diff --git a/src/video_core/texture_cache/texture_cache.cpp b/src/video_core/texture_cache/texture_cache.cpp index e42a0bbd3..318f94577 100644 --- a/src/video_core/texture_cache/texture_cache.cpp +++ b/src/video_core/texture_cache/texture_cache.cpp @@ -101,6 +101,7 @@ TextureCache::~TextureCache() { } void TextureCache::OnCpuWrite(VAddr address) { + std::unique_lock lock{m_page_table}; ForEachImageInRegion(address, 1 << PageShift, [&](ImageId image_id, Image& image) { // Ensure image is reuploaded when accessed again. image.flags |= ImageFlagBits::CpuModified; @@ -110,6 +111,7 @@ void TextureCache::OnCpuWrite(VAddr address) { } Image& TextureCache::FindImage(const ImageInfo& info, VAddr cpu_address) { + std::unique_lock lock{m_page_table}; boost::container::small_vector image_ids; ForEachImageInRegion(cpu_address, info.guest_size_bytes, [&](ImageId image_id, Image& image) { if (image.cpu_addr == cpu_address) { diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index bb37677d8..21d5ce5dd 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -136,6 +136,7 @@ private: #ifdef _WIN64 void* veh_handle{}; #endif + std::mutex m_page_table; }; } // namespace VideoCore