From c2079c54d484f458d225ad08dd9ea6083225c0b2 Mon Sep 17 00:00:00 2001 From: PavelBARABANOV Date: Sun, 22 Feb 2026 11:33:22 +0300 Subject: [PATCH] an additional counter is not needed --- .../renderer_vulkan/vk_master_semaphore.cpp | 12 ++++++------ src/video_core/renderer_vulkan/vk_master_semaphore.h | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_master_semaphore.cpp b/src/video_core/renderer_vulkan/vk_master_semaphore.cpp index 0e92902669..13ecfd20a6 100644 --- a/src/video_core/renderer_vulkan/vk_master_semaphore.cpp +++ b/src/video_core/renderer_vulkan/vk_master_semaphore.cpp @@ -83,11 +83,10 @@ void MasterSemaphore::Wait(u64 tick) { return; } - // Wait for fence completions using atomic wait - u64 last_notify = notify_counter.load(std::memory_order_relaxed); + u64 last_tick = gpu_tick.load(std::memory_order_relaxed); while (gpu_tick.load(std::memory_order_acquire) < tick) { - notify_counter.wait(last_notify, std::memory_order_acquire); - last_notify = notify_counter.load(std::memory_order_relaxed); + gpu_tick.wait(last_tick, std::memory_order_acquire); + last_tick = gpu_tick.load(std::memory_order_relaxed); } return; } @@ -223,15 +222,16 @@ void MasterSemaphore::WaitThread(std::stop_token token) { std::tie(host_tick, fence) = std::move(wait_queue.front()); wait_queue.pop(); } + fence.Wait(); fence.Reset(); + { std::scoped_lock lock{free_mutex}; free_queue.push_front(std::move(fence)); gpu_tick.store(host_tick, std::memory_order_release); - notify_counter.fetch_add(1, std::memory_order_release); } - notify_counter.notify_one(); + gpu_tick.notify_one(); } } diff --git a/src/video_core/renderer_vulkan/vk_master_semaphore.h b/src/video_core/renderer_vulkan/vk_master_semaphore.h index 9233304e8d..f580c25d35 100644 --- a/src/video_core/renderer_vulkan/vk_master_semaphore.h +++ b/src/video_core/renderer_vulkan/vk_master_semaphore.h @@ -75,7 +75,6 @@ private: vk::Semaphore semaphore; ///< Timeline semaphore. std::atomic gpu_tick{0}; ///< Current known GPU tick. std::atomic current_tick{1}; ///< Current logical tick. - std::atomic notify_counter{0}; ///< Fence completion counter for atomic wait. std::mutex wait_mutex; std::mutex free_mutex; std::condition_variable_any wait_cv;