summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/rasterizer_cache.h3
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.cpp2
-rw-r--r--src/video_core/renderer_opengl/gl_global_cache.cpp1
3 files changed, 5 insertions, 1 deletions
diff --git a/src/video_core/rasterizer_cache.h b/src/video_core/rasterizer_cache.h
index 0c4ea1494..6de1597a2 100644
--- a/src/video_core/rasterizer_cache.h
+++ b/src/video_core/rasterizer_cache.h
@@ -169,6 +169,8 @@ protected:
169 object->MarkAsModified(false, *this); 169 object->MarkAsModified(false, *this);
170 } 170 }
171 171
172 std::recursive_mutex mutex;
173
172private: 174private:
173 /// Returns a list of cached objects from the specified memory region, ordered by access time 175 /// Returns a list of cached objects from the specified memory region, ordered by access time
174 std::vector<T> GetSortedObjectsFromRegion(CacheAddr addr, u64 size) { 176 std::vector<T> GetSortedObjectsFromRegion(CacheAddr addr, u64 size) {
@@ -208,5 +210,4 @@ private:
208 IntervalCache interval_cache; ///< Cache of objects 210 IntervalCache interval_cache; ///< Cache of objects
209 u64 modified_ticks{}; ///< Counter of cache state ticks, used for in-order flushing 211 u64 modified_ticks{}; ///< Counter of cache state ticks, used for in-order flushing
210 VideoCore::RasterizerInterface& rasterizer; 212 VideoCore::RasterizerInterface& rasterizer;
211 std::recursive_mutex mutex;
212}; 213};
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
index 48b86f3bd..2b9bd142e 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
@@ -23,6 +23,7 @@ OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, std::size_t size)
23 23
24GLintptr OGLBufferCache::UploadMemory(GPUVAddr gpu_addr, std::size_t size, std::size_t alignment, 24GLintptr OGLBufferCache::UploadMemory(GPUVAddr gpu_addr, std::size_t size, std::size_t alignment,
25 bool cache) { 25 bool cache) {
26 std::lock_guard lock{mutex};
26 auto& memory_manager = Core::System::GetInstance().GPU().MemoryManager(); 27 auto& memory_manager = Core::System::GetInstance().GPU().MemoryManager();
27 28
28 // Cache management is a big overhead, so only cache entries with a given size. 29 // Cache management is a big overhead, so only cache entries with a given size.
@@ -62,6 +63,7 @@ GLintptr OGLBufferCache::UploadMemory(GPUVAddr gpu_addr, std::size_t size, std::
62 63
63GLintptr OGLBufferCache::UploadHostMemory(const void* raw_pointer, std::size_t size, 64GLintptr OGLBufferCache::UploadHostMemory(const void* raw_pointer, std::size_t size,
64 std::size_t alignment) { 65 std::size_t alignment) {
66 std::lock_guard lock{mutex};
65 AlignBuffer(alignment); 67 AlignBuffer(alignment);
66 std::memcpy(buffer_ptr, raw_pointer, size); 68 std::memcpy(buffer_ptr, raw_pointer, size);
67 const GLintptr uploaded_offset = buffer_offset; 69 const GLintptr uploaded_offset = buffer_offset;
diff --git a/src/video_core/renderer_opengl/gl_global_cache.cpp b/src/video_core/renderer_opengl/gl_global_cache.cpp
index ea4a593af..d5e385151 100644
--- a/src/video_core/renderer_opengl/gl_global_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_global_cache.cpp
@@ -76,6 +76,7 @@ GlobalRegionCacheOpenGL::GlobalRegionCacheOpenGL(RasterizerOpenGL& rasterizer)
76GlobalRegion GlobalRegionCacheOpenGL::GetGlobalRegion( 76GlobalRegion GlobalRegionCacheOpenGL::GetGlobalRegion(
77 const GLShader::GlobalMemoryEntry& global_region, 77 const GLShader::GlobalMemoryEntry& global_region,
78 Tegra::Engines::Maxwell3D::Regs::ShaderStage stage) { 78 Tegra::Engines::Maxwell3D::Regs::ShaderStage stage) {
79 std::lock_guard lock{mutex};
79 80
80 auto& gpu{Core::System::GetInstance().GPU()}; 81 auto& gpu{Core::System::GetInstance().GPU()};
81 auto& memory_manager{gpu.MemoryManager()}; 82 auto& memory_manager{gpu.MemoryManager()};