Просмотр исходного кода

Texture Cache: Fix collision with multiple overlaps of the same sparse texture.

Fernando Sahmkow 5 лет назад
Родитель
Сommit
c6a9e91784
1 измененных файлов с 6 добавлено и 1 удалено
  1. 6 1
      src/video_core/texture_cache/texture_cache.h

+ 6 - 1
src/video_core/texture_cache/texture_cache.h

@@ -1169,7 +1169,12 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, VA
     ForEachImageInRegion(cpu_addr, size_bytes, region_check);
     ForEachImageInRegion(cpu_addr, size_bytes, region_check);
     const auto region_check_gpu = [&](ImageId overlap_id, ImageBase& overlap) {
     const auto region_check_gpu = [&](ImageId overlap_id, ImageBase& overlap) {
         if (!overlaps_found.contains(overlap_id)) {
         if (!overlaps_found.contains(overlap_id)) {
-            ignore_textures.insert(overlap_id);
+            if (True(overlap.flags & ImageFlagBits::Remapped)) {
+                ignore_textures.insert(overlap_id);
+            }
+            if (overlap.gpu_addr == gpu_addr && overlap.guest_size_bytes == size_bytes) {
+                ignore_textures.insert(overlap_id);
+            }
         }
         }
     };
     };
     ForEachSparseImageInRegion(gpu_addr, size_bytes, region_check_gpu);
     ForEachSparseImageInRegion(gpu_addr, size_bytes, region_check_gpu);