From 63915bf2de3358029cb5e904f51f6b147b64bfa1 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Tue, 6 Jul 2021 22:23:10 +0200 Subject: Fence Manager: Add fences on Reference Count. --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 7 +++++++ src/video_core/renderer_opengl/gl_rasterizer.h | 1 + 2 files changed, 8 insertions(+) (limited to 'src/video_core/renderer_opengl') diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 07ad0e205..64869abf9 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -634,6 +634,13 @@ void RasterizerOpenGL::SignalSyncPoint(u32 value) { fence_manager.SignalSyncPoint(value); } +void RasterizerOpenGL::SignalReference() { + if (!gpu.IsAsync()) { + return; + } + fence_manager.SignalReference(); +} + void RasterizerOpenGL::ReleaseFences() { if (!gpu.IsAsync()) { return; diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 482efed7a..d8df71962 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -83,6 +83,7 @@ public: void ModifyGPUMemory(GPUVAddr addr, u64 size) override; void SignalSemaphore(GPUVAddr addr, u32 value) override; void SignalSyncPoint(u32 value) override; + void SignalReference() override; void ReleaseFences() override; void FlushAndInvalidateRegion(VAddr addr, u64 size) override; void WaitForIdle() override; -- cgit v1.2.3 From cf38faee9ba6223721223c0a16b2ece2383bfc9a Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Wed, 7 Jul 2021 16:42:26 +0200 Subject: Fence Manager: Force ordering on WFI. --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/video_core/renderer_opengl') diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 64869abf9..514c2f47d 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -657,6 +657,10 @@ void RasterizerOpenGL::FlushAndInvalidateRegion(VAddr addr, u64 size) { void RasterizerOpenGL::WaitForIdle() { glMemoryBarrier(GL_ALL_BARRIER_BITS); + if (!gpu.IsAsync()) { + return; + } + fence_manager.SignalOrdering(); } void RasterizerOpenGL::FragmentBarrier() { -- cgit v1.2.3 From 4a0951733621a89a5048e7ff5d44ea4f4fbc7461 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Thu, 8 Jul 2021 03:05:23 +0200 Subject: Fence Manager: remove reference fencing. --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'src/video_core/renderer_opengl') 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() { 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() { -- cgit v1.2.3