diff options
| -rw-r--r-- | src/video_core/rasterizer_cache.h | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_buffer_cache.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_global_cache.cpp | 1 |
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 | |||
| 172 | private: | 174 | private: |
| 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 | ||
| 24 | GLintptr OGLBufferCache::UploadMemory(GPUVAddr gpu_addr, std::size_t size, std::size_t alignment, | 24 | GLintptr 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 | ||
| 63 | GLintptr OGLBufferCache::UploadHostMemory(const void* raw_pointer, std::size_t size, | 64 | GLintptr 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) | |||
| 76 | GlobalRegion GlobalRegionCacheOpenGL::GetGlobalRegion( | 76 | GlobalRegion 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()}; |