diff options
| author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2023-08-04 03:32:30 +0200 |
|---|---|---|
| committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2023-09-23 23:05:29 +0200 |
| commit | 5ea12207f3ca747587afb090502285404e0dccbb (patch) | |
| tree | 0920a98bd359b9207130d01f6df4ae5135ec805c /src/video_core/fence_manager.h | |
| parent | 7f78d844abee3a7599b27098555e42954390fc6a (diff) | |
Query Cachge: Fully rework Vulkan's query cache
Diffstat (limited to 'src/video_core/fence_manager.h')
| -rw-r--r-- | src/video_core/fence_manager.h | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/video_core/fence_manager.h b/src/video_core/fence_manager.h index ab20ff30fd..8459a3092b 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<true>(); + if (force) { + TryReleasePendingFences<true>(); + } else { + TryReleasePendingFences<false>(); + } + } else { + if (!force) { + return; + } + std::mutex wait_mutex; + std::condition_variable wait_cv; + std::atomic<bool> wait_finished{}; + std::function<void()> 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); }); } } |
