diff options
| -rw-r--r-- | src/video_core/fence_manager.h | 23 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 7 |
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 | ||
| 644 | void RasterizerOpenGL::ReleaseFences() { | 644 | void RasterizerOpenGL::ReleaseFences() { |
| @@ -657,10 +657,7 @@ void RasterizerOpenGL::FlushAndInvalidateRegion(VAddr addr, u64 size) { | |||
| 657 | 657 | ||
| 658 | void RasterizerOpenGL::WaitForIdle() { | 658 | void 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 | ||
| 666 | void RasterizerOpenGL::FragmentBarrier() { | 663 | void 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 | ||
| 590 | void RasterizerVulkan::ReleaseFences() { | 590 | void 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 | ||
| 628 | void RasterizerVulkan::FragmentBarrier() { | 625 | void RasterizerVulkan::FragmentBarrier() { |