From 9799dcdb7f709c9714ea42dd004147874b9afac8 Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 8 Jan 2019 18:45:23 -0500 Subject: [PATCH] gl_rasterizer: Flush and invalidate when GPU thread is idle. --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 43b23c2baa..64d882cfb5 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -751,16 +751,19 @@ void RasterizerOpenGL::FlushRegion(VAddr addr, u64 size) { if (Settings::values.use_accurate_gpu_emulation) { // Only flush if use_accurate_gpu_emulation is enabled, as it incurs a performance hit - res_cache.FlushRegion(addr, size); + Core::System::GetInstance().GPU().WaitUntilIdle( + [this, addr, size]() { res_cache.FlushRegion(addr, size); }); } } void RasterizerOpenGL::InvalidateRegion(VAddr addr, u64 size) { MICROPROFILE_SCOPE(OpenGL_CacheManagement); - res_cache.InvalidateRegion(addr, size); - shader_cache.InvalidateRegion(addr, size); - global_cache.InvalidateRegion(addr, size); - buffer_cache.InvalidateRegion(addr, size); + Core::System::GetInstance().GPU().WaitUntilIdle([this, addr, size]() { + res_cache.InvalidateRegion(addr, size); + shader_cache.InvalidateRegion(addr, size); + global_cache.InvalidateRegion(addr, size); + buffer_cache.InvalidateRegion(addr, size); + }); } void RasterizerOpenGL::FlushAndInvalidateRegion(VAddr addr, u64 size) {