Browse Source

Fence Manager: remove reference fencing.

Fernando Sahmkow 5 years ago
parent
commit
4a09517336

+ 2 - 21
src/video_core/fence_manager.h

@@ -60,23 +60,6 @@ public:
         buffer_cache.AccumulateFlushes();
     }
 
-    void SignalReference() {
-        // Only sync references on High
-        if (Settings::values.gpu_accuracy.GetValue() != Settings::GPUAccuracy::High) {
-            return;
-        }
-        TryReleasePendingFences();
-        const bool should_flush = ShouldFlush();
-        CommitAsyncFlushes();
-        TFence new_fence = CreateFence(0, 0, !should_flush);
-        fences.push(new_fence);
-        QueueFence(new_fence);
-        if (should_flush) {
-            rasterizer.FlushCommands();
-        }
-        rasterizer.SyncGuestHost();
-    }
-
     void SignalSemaphore(GPUVAddr addr, u32 value) {
         TryReleasePendingFences();
         const bool should_flush = ShouldFlush();
@@ -111,10 +94,8 @@ public:
             }
             PopAsyncFlushes();
             if (current_fence->IsSemaphore()) {
-                if (current_fence->GetAddress() != 0) {
-                    gpu_memory.template Write<u32>(current_fence->GetAddress(),
-                                                   current_fence->GetPayload());
-                }
+                gpu_memory.template Write<u32>(current_fence->GetAddress(),
+                                               current_fence->GetPayload());
             } else {
                 gpu.IncrementSyncPoint(current_fence->GetPayload());
             }

+ 2 - 5
src/video_core/renderer_opengl/gl_rasterizer.cpp

@@ -638,7 +638,7 @@ void RasterizerOpenGL::SignalReference() {
     if (!gpu.IsAsync()) {
         return;
     }
-    fence_manager.SignalReference();
+    fence_manager.SignalOrdering();
 }
 
 void RasterizerOpenGL::ReleaseFences() {
@@ -657,10 +657,7 @@ void RasterizerOpenGL::FlushAndInvalidateRegion(VAddr addr, u64 size) {
 
 void RasterizerOpenGL::WaitForIdle() {
     glMemoryBarrier(GL_ALL_BARRIER_BITS);
-    if (!gpu.IsAsync()) {
-        return;
-    }
-    fence_manager.SignalOrdering();
+    SignalReference();
 }
 
 void RasterizerOpenGL::FragmentBarrier() {

+ 2 - 5
src/video_core/renderer_vulkan/vk_rasterizer.cpp

@@ -584,7 +584,7 @@ void RasterizerVulkan::SignalReference() {
     if (!gpu.IsAsync()) {
         return;
     }
-    fence_manager.SignalReference();
+    fence_manager.SignalOrdering();
 }
 
 void RasterizerVulkan::ReleaseFences() {
@@ -619,10 +619,7 @@ void RasterizerVulkan::WaitForIdle() {
         cmdbuf.SetEvent(event, flags);
         cmdbuf.WaitEvents(event, flags, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, {}, {}, {});
     });
-    if (!gpu.IsAsync()) {
-        return;
-    }
-    fence_manager.SignalOrdering();
+    SignalReference();
 }
 
 void RasterizerVulkan::FragmentBarrier() {