diff options
| -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: | |||
| 53 | void WaitPendingFences() { | 53 | void WaitPendingFences() { |
| 54 | while (!fences.empty()) { | 54 | while (!fences.empty()) { |
| 55 | TFence& current_fence = fences.front(); | 55 | TFence& current_fence = fences.front(); |
| 56 | WaitFence(current_fence); | 56 | bool should_wait = texture_cache.ShouldWaitAsyncFlushes(); |
| 57 | if (should_wait) { | ||
| 58 | WaitFence(current_fence); | ||
| 59 | } | ||
| 57 | texture_cache.PopAsyncFlushes(); | 60 | texture_cache.PopAsyncFlushes(); |
| 58 | auto& gpu{system.GPU()}; | 61 | auto& gpu{system.GPU()}; |
| 59 | auto& memory_manager{gpu.MemoryManager()}; | 62 | auto& memory_manager{gpu.MemoryManager()}; |
| @@ -80,7 +83,8 @@ private: | |||
| 80 | void TryReleasePendingFences() { | 83 | void TryReleasePendingFences() { |
| 81 | while (!fences.empty()) { | 84 | while (!fences.empty()) { |
| 82 | TFence& current_fence = fences.front(); | 85 | TFence& current_fence = fences.front(); |
| 83 | if (!IsFenceSignaled(current_fence)) { | 86 | bool should_wait = texture_cache.ShouldWaitAsyncFlushes(); |
| 87 | if (should_wait && !IsFenceSignaled(current_fence)) { | ||
| 84 | return; | 88 | return; |
| 85 | } | 89 | } |
| 86 | texture_cache.PopAsyncFlushes(); | 90 | 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: | |||
| 322 | uncommited_flushes.reset(); | 322 | uncommited_flushes.reset(); |
| 323 | } | 323 | } |
| 324 | 324 | ||
| 325 | bool ShouldWaitAsyncFlushes() { | ||
| 326 | if (commited_flushes.empty()) { | ||
| 327 | return false; | ||
| 328 | } | ||
| 329 | auto& flush_list = commited_flushes.front(); | ||
| 330 | if (!flush_list) { | ||
| 331 | return false; | ||
| 332 | } | ||
| 333 | return true; | ||
| 334 | } | ||
| 335 | |||
| 325 | void PopAsyncFlushes() { | 336 | void PopAsyncFlushes() { |
| 326 | if (commited_flushes.empty()) { | 337 | if (commited_flushes.empty()) { |
| 327 | return; | 338 | return; |