Explorar o código

gl_rasterizer_cache: Only flush when use_accurate_framebuffers is enabled.

bunnei %!s(int64=7) %!d(string=hai) anos
pai
achega
949d7832fa

+ 7 - 1
src/video_core/rasterizer_cache.h

@@ -11,6 +11,7 @@
 
 
 #include "common/common_types.h"
 #include "common/common_types.h"
 #include "core/core.h"
 #include "core/core.h"
+#include "core/settings.h"
 #include "video_core/rasterizer_interface.h"
 #include "video_core/rasterizer_interface.h"
 #include "video_core/renderer_base.h"
 #include "video_core/renderer_base.h"
 
 
@@ -87,7 +88,12 @@ protected:
     void Unregister(const T& object) {
     void Unregister(const T& object) {
         auto& rasterizer = Core::System::GetInstance().Renderer().Rasterizer();
         auto& rasterizer = Core::System::GetInstance().Renderer().Rasterizer();
         rasterizer.UpdatePagesCachedCount(object->GetAddr(), object->GetSizeInBytes(), -1);
         rasterizer.UpdatePagesCachedCount(object->GetAddr(), object->GetSizeInBytes(), -1);
-        object->Flush();
+
+        if (Settings::values.use_accurate_framebuffers) {
+            // Only flush if use_accurate_framebuffers is enabled, as it incurs a performance hit
+            object->Flush();
+        }
+
         object_cache.subtract({GetInterval(object), ObjectSet{object}});
         object_cache.subtract({GetInterval(object), ObjectSet{object}});
     }
     }
 
 

+ 6 - 1
src/video_core/renderer_opengl/gl_rasterizer.cpp

@@ -637,7 +637,12 @@ void RasterizerOpenGL::FlushAll() {}
 
 
 void RasterizerOpenGL::FlushRegion(VAddr addr, u64 size) {
 void RasterizerOpenGL::FlushRegion(VAddr addr, u64 size) {
     MICROPROFILE_SCOPE(OpenGL_CacheManagement);
     MICROPROFILE_SCOPE(OpenGL_CacheManagement);
-    res_cache.FlushRegion(addr, size);
+
+    if (Settings::values.use_accurate_framebuffers) {
+        // Only flush if use_accurate_framebuffers is enabled, as it incurs a performance hit
+        res_cache.FlushRegion(addr, size);
+    }
+
     shader_cache.FlushRegion(addr, size);
     shader_cache.FlushRegion(addr, size);
     buffer_cache.FlushRegion(addr, size);
     buffer_cache.FlushRegion(addr, size);
 }
 }