summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/fence_manager.h23
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp7
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp7
3 files changed, 6 insertions, 31 deletions
diff --git a/src/video_core/fence_manager.h b/src/video_core/fence_manager.h
index b702b2015..34dc6c596 100644
--- a/src/video_core/fence_manager.h
+++ b/src/video_core/fence_manager.h
@@ -60,23 +60,6 @@ public:
60 buffer_cache.AccumulateFlushes(); 60 buffer_cache.AccumulateFlushes();
61 } 61 }
62 62
63 void SignalReference() {
64 // Only sync references on High
65 if (Settings::values.gpu_accuracy.GetValue() != Settings::GPUAccuracy::High) {
66 return;
67 }
68 TryReleasePendingFences();
69 const bool should_flush = ShouldFlush();
70 CommitAsyncFlushes();
71 TFence new_fence = CreateFence(0, 0, !should_flush);
72 fences.push(new_fence);
73 QueueFence(new_fence);
74 if (should_flush) {
75 rasterizer.FlushCommands();
76 }
77 rasterizer.SyncGuestHost();
78 }
79
80 void SignalSemaphore(GPUVAddr addr, u32 value) { 63 void SignalSemaphore(GPUVAddr addr, u32 value) {
81 TryReleasePendingFences(); 64 TryReleasePendingFences();
82 const bool should_flush = ShouldFlush(); 65 const bool should_flush = ShouldFlush();
@@ -111,10 +94,8 @@ public:
111 } 94 }
112 PopAsyncFlushes(); 95 PopAsyncFlushes();
113 if (current_fence->IsSemaphore()) { 96 if (current_fence->IsSemaphore()) {
114 if (current_fence->GetAddress() != 0) { 97 gpu_memory.template Write<u32>(current_fence->GetAddress(),
115 gpu_memory.template Write<u32>(current_fence->GetAddress(), 98 current_fence->GetPayload());
116 current_fence->GetPayload());
117 }
118 } else { 99 } else {
119 gpu.IncrementSyncPoint(current_fence->GetPayload()); 100 gpu.IncrementSyncPoint(current_fence->GetPayload());
120 } 101 }
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 514c2f47d..a4ed8f68f 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -638,7 +638,7 @@ void RasterizerOpenGL::SignalReference() {
638 if (!gpu.IsAsync()) { 638 if (!gpu.IsAsync()) {
639 return; 639 return;
640 } 640 }
641 fence_manager.SignalReference(); 641 fence_manager.SignalOrdering();
642} 642}
643 643
644void RasterizerOpenGL::ReleaseFences() { 644void RasterizerOpenGL::ReleaseFences() {
@@ -657,10 +657,7 @@ void RasterizerOpenGL::FlushAndInvalidateRegion(VAddr addr, u64 size) {
657 657
658void RasterizerOpenGL::WaitForIdle() { 658void RasterizerOpenGL::WaitForIdle() {
659 glMemoryBarrier(GL_ALL_BARRIER_BITS); 659 glMemoryBarrier(GL_ALL_BARRIER_BITS);
660 if (!gpu.IsAsync()) { 660 SignalReference();
661 return;
662 }
663 fence_manager.SignalOrdering();
664} 661}
665 662
666void RasterizerOpenGL::FragmentBarrier() { 663void RasterizerOpenGL::FragmentBarrier() {
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 392de47d0..9ea4b6653 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -584,7 +584,7 @@ void RasterizerVulkan::SignalReference() {
584 if (!gpu.IsAsync()) { 584 if (!gpu.IsAsync()) {
585 return; 585 return;
586 } 586 }
587 fence_manager.SignalReference(); 587 fence_manager.SignalOrdering();
588} 588}
589 589
590void RasterizerVulkan::ReleaseFences() { 590void RasterizerVulkan::ReleaseFences() {
@@ -619,10 +619,7 @@ void RasterizerVulkan::WaitForIdle() {
619 cmdbuf.SetEvent(event, flags); 619 cmdbuf.SetEvent(event, flags);
620 cmdbuf.WaitEvents(event, flags, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, {}, {}, {}); 620 cmdbuf.WaitEvents(event, flags, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, {}, {}, {});
621 }); 621 });
622 if (!gpu.IsAsync()) { 622 SignalReference();
623 return;
624 }
625 fence_manager.SignalOrdering();
626} 623}
627 624
628void RasterizerVulkan::FragmentBarrier() { 625void RasterizerVulkan::FragmentBarrier() {