diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-02-18 03:15:43 +0100 |
---|---|---|
committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-04-22 17:36:11 +0200 |
commit | 57fdbd9b8992de4eaf2b262e6a2cece43c141894 (patch) | |
tree | f7d0bb17daffdffa76c61bd39eef3fa766150d9c | |
parent | GPU: Implement a Fence Manager. (diff) | |
download | yuzu-57fdbd9b8992de4eaf2b262e6a2cece43c141894.tar yuzu-57fdbd9b8992de4eaf2b262e6a2cece43c141894.tar.gz yuzu-57fdbd9b8992de4eaf2b262e6a2cece43c141894.tar.bz2 yuzu-57fdbd9b8992de4eaf2b262e6a2cece43c141894.tar.lz yuzu-57fdbd9b8992de4eaf2b262e6a2cece43c141894.tar.xz yuzu-57fdbd9b8992de4eaf2b262e6a2cece43c141894.tar.zst yuzu-57fdbd9b8992de4eaf2b262e6a2cece43c141894.zip |
-rw-r--r-- | src/video_core/fence_manager.h | 8 | ||||
-rw-r--r-- | src/video_core/texture_cache/texture_cache.h | 11 |
2 files changed, 17 insertions, 2 deletions
diff --git a/src/video_core/fence_manager.h b/src/video_core/fence_manager.h index 19cec0f66..036f3996c 100644 --- a/src/video_core/fence_manager.h +++ b/src/video_core/fence_manager.h @@ -53,7 +53,10 @@ public: void WaitPendingFences() { while (!fences.empty()) { TFence& current_fence = fences.front(); - WaitFence(current_fence); + bool should_wait = texture_cache.ShouldWaitAsyncFlushes(); + if (should_wait) { + WaitFence(current_fence); + } texture_cache.PopAsyncFlushes(); auto& gpu{system.GPU()}; auto& memory_manager{gpu.MemoryManager()}; @@ -80,7 +83,8 @@ private: void TryReleasePendingFences() { while (!fences.empty()) { TFence& current_fence = fences.front(); - if (!IsFenceSignaled(current_fence)) { + bool should_wait = texture_cache.ShouldWaitAsyncFlushes(); + if (should_wait && !IsFenceSignaled(current_fence)) { return; } texture_cache.PopAsyncFlushes(); diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index 6629c59ed..04fe69c11 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -322,6 +322,17 @@ public: uncommited_flushes.reset(); } + bool ShouldWaitAsyncFlushes() { + if (commited_flushes.empty()) { + return false; + } + auto& flush_list = commited_flushes.front(); + if (!flush_list) { + return false; + } + return true; + } + void PopAsyncFlushes() { if (commited_flushes.empty()) { return; |