diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index dd80587fb..2b35636fc 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -1818,6 +1818,8 @@ void RasterizerCacheOpenGL::ClearAll(bool flush) { } void RasterizerCacheOpenGL::FlushRegion(PAddr addr, u32 size, Surface flush_surface) { + std::lock_guard lock{mutex}; + if (size == 0) return; @@ -1854,6 +1856,8 @@ void RasterizerCacheOpenGL::FlushAll() { } void RasterizerCacheOpenGL::InvalidateRegion(PAddr addr, u32 size, const Surface& region_owner) { + std::lock_guard lock{mutex}; + if (size == 0) return; @@ -1930,6 +1934,8 @@ Surface RasterizerCacheOpenGL::CreateSurface(const SurfaceParams& params) { } void RasterizerCacheOpenGL::RegisterSurface(const Surface& surface) { + std::lock_guard lock{mutex}; + if (surface->registered) { return; } @@ -1939,6 +1945,8 @@ void RasterizerCacheOpenGL::RegisterSurface(const Surface& surface) { } void RasterizerCacheOpenGL::UnregisterSurface(const Surface& surface) { + std::lock_guard lock{mutex}; + if (!surface->registered) { return; } diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h index 1a9b6a3b3..a9ee8effa 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.h +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #ifdef __GNUC__ @@ -325,6 +326,8 @@ private: std::unordered_map texture_cube_cache; + std::recursive_mutex mutex; + public: std::unique_ptr texture_filterer; std::unique_ptr format_reinterpreter;