From fcea53820bd57f0ea4c562b98a7779b376a29847 Mon Sep 17 00:00:00 2001 From: psucien Date: Thu, 30 May 2024 22:56:14 +0200 Subject: [PATCH] to ensure that we're not unlocking submits too early --- src/core/libraries/gnmdriver/gnmdriver.cpp | 1 + src/video_core/amdgpu/liverpool.cpp | 6 +++++- src/video_core/amdgpu/liverpool.h | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/core/libraries/gnmdriver/gnmdriver.cpp b/src/core/libraries/gnmdriver/gnmdriver.cpp index a2358955d..9b351c3c4 100644 --- a/src/core/libraries/gnmdriver/gnmdriver.cpp +++ b/src/core/libraries/gnmdriver/gnmdriver.cpp @@ -1455,6 +1455,7 @@ int PS4_SYSV_ABI sceGnmSubmitDone() { if (!liverpool->IsGpuIdle()) { submission_lock = true; } + liverpool->NotifySubmitDone(); return ORBIS_OK; } diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp index 0bcc34863..ddfff4b74 100644 --- a/src/video_core/amdgpu/liverpool.cpp +++ b/src/video_core/amdgpu/liverpool.cpp @@ -61,7 +61,11 @@ void Liverpool::Process(std::stop_token stoken) { --num_submits; } } - num_submits.notify_all(); + + if (submit_done) { + num_submits.notify_all(); + submit_done = false; + } } } diff --git a/src/video_core/amdgpu/liverpool.h b/src/video_core/amdgpu/liverpool.h index 9c2b4bcd2..4718d174d 100644 --- a/src/video_core/amdgpu/liverpool.h +++ b/src/video_core/amdgpu/liverpool.h @@ -777,6 +777,10 @@ public: return num_submits == 0; } + void NotifySubmitDone() { + submit_done = true; + } + void BindRasterizer(Vulkan::Rasterizer* rasterizer_) { rasterizer = rasterizer_; } @@ -841,6 +845,7 @@ private: Vulkan::Rasterizer* rasterizer{}; std::jthread process_thread{}; std::atomic num_submits{}; + std::atomic submit_done{}; }; static_assert(GFX6_3D_REG_INDEX(ps_program) == 0x2C08);