From f1a2e367113518b277f34ffbb04499882c3b6051 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Fri, 4 Aug 2023 03:32:30 +0200 Subject: Query Cachge: Fully rework Vulkan's query cache --- src/video_core/fence_manager.h | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'src/video_core/fence_manager.h') diff --git a/src/video_core/fence_manager.h b/src/video_core/fence_manager.h index ab20ff30f..8459a3092 100644 --- a/src/video_core/fence_manager.h +++ b/src/video_core/fence_manager.h @@ -104,9 +104,28 @@ public: SignalFence(std::move(func)); } - void WaitPendingFences() { + void WaitPendingFences(bool force) { if constexpr (!can_async_check) { - TryReleasePendingFences(); + if (force) { + TryReleasePendingFences(); + } else { + TryReleasePendingFences(); + } + } else { + if (!force) { + return; + } + std::mutex wait_mutex; + std::condition_variable wait_cv; + std::atomic wait_finished{}; + std::function func([&] { + std::scoped_lock lk(wait_mutex); + wait_finished.store(true, std::memory_order_relaxed); + wait_cv.notify_all(); + }); + SignalFence(std::move(func)); + std::unique_lock lk(wait_mutex); + wait_cv.wait(lk, [&wait_finished] { return wait_finished.load(std::memory_order_relaxed); }); } } -- cgit v1.2.3