summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/fence_manager.h8
-rw-r--r--src/video_core/texture_cache/texture_cache.h11
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;