diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 3b30ec4c4..262a936cf 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -1832,6 +1832,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; @@ -1868,6 +1870,8 @@ void RasterizerCacheOpenGL::FlushAll() { } void RasterizerCacheOpenGL::InvalidateRegion(PAddr addr, u32 size, const Surface& region_owner) { + std::lock_guard lock{mutex}; + if (size == 0) return; @@ -1943,6 +1947,8 @@ Surface RasterizerCacheOpenGL::CreateSurface(const SurfaceParams& params) { } void RasterizerCacheOpenGL::RegisterSurface(const Surface& surface) { + std::lock_guard lock{mutex}; + if (surface->registered) { return; } @@ -1952,6 +1958,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 108aa7bad..6f7b7443a 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__ @@ -365,6 +366,8 @@ private: std::unordered_map texture_cube_cache; + std::recursive_mutex mutex; + public: OGLTexture AllocateSurfaceTexture(const FormatTuple& format_tuple, u32 width, u32 height);