summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar liamwhite2024-02-13 08:17:59 -0500
committerGravatar GitHub2024-02-13 08:17:59 -0500
commitf75fceb3c030ac2ed589eb01bc7f3fa61905a76d (patch)
treec50e54988d79b98b326993e9b4b61461e42bd531 /src
parentMerge pull request #12989 from german77/hotcake (diff)
parentTexture Cache: Fix untracking on GPU remap (diff)
downloadyuzu-f75fceb3c030ac2ed589eb01bc7f3fa61905a76d.tar.gz
yuzu-f75fceb3c030ac2ed589eb01bc7f3fa61905a76d.tar.xz
yuzu-f75fceb3c030ac2ed589eb01bc7f3fa61905a76d.zip
Merge pull request #12975 from FernandoS27/keep-your-own-vodoo-doll-away-from-gf
Texture Cache: Fix untracking on GPU remap
Diffstat (limited to 'src')
-rw-r--r--src/video_core/texture_cache/image_info.cpp1
-rw-r--r--src/video_core/texture_cache/image_info.h1
-rw-r--r--src/video_core/texture_cache/texture_cache.h15
3 files changed, 10 insertions, 7 deletions
diff --git a/src/video_core/texture_cache/image_info.cpp b/src/video_core/texture_cache/image_info.cpp
index b72788c6d..9444becce 100644
--- a/src/video_core/texture_cache/image_info.cpp
+++ b/src/video_core/texture_cache/image_info.cpp
@@ -42,6 +42,7 @@ ImageInfo::ImageInfo(const TICEntry& config) noexcept {
42 }; 42 };
43 } 43 }
44 rescaleable = false; 44 rescaleable = false;
45 is_sparse = config.is_sparse != 0;
45 tile_width_spacing = config.tile_width_spacing; 46 tile_width_spacing = config.tile_width_spacing;
46 if (config.texture_type != TextureType::Texture2D && 47 if (config.texture_type != TextureType::Texture2D &&
47 config.texture_type != TextureType::Texture2DNoMipmap) { 48 config.texture_type != TextureType::Texture2DNoMipmap) {
diff --git a/src/video_core/texture_cache/image_info.h b/src/video_core/texture_cache/image_info.h
index 8a4cb0cbd..eb490a642 100644
--- a/src/video_core/texture_cache/image_info.h
+++ b/src/video_core/texture_cache/image_info.h
@@ -41,6 +41,7 @@ struct ImageInfo {
41 bool downscaleable = false; 41 bool downscaleable = false;
42 bool forced_flushed = false; 42 bool forced_flushed = false;
43 bool dma_downloaded = false; 43 bool dma_downloaded = false;
44 bool is_sparse = false;
44}; 45};
45 46
46} // namespace VideoCommon 47} // namespace VideoCommon
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index 3a1cc060e..01c3561c9 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -600,17 +600,17 @@ void TextureCache<P>::UnmapGPUMemory(size_t as_id, GPUVAddr gpu_addr, size_t siz
600 [&](ImageId id, Image&) { deleted_images.push_back(id); }); 600 [&](ImageId id, Image&) { deleted_images.push_back(id); });
601 for (const ImageId id : deleted_images) { 601 for (const ImageId id : deleted_images) {
602 Image& image = slot_images[id]; 602 Image& image = slot_images[id];
603 if (True(image.flags & ImageFlagBits::CpuModified)) { 603 if (False(image.flags & ImageFlagBits::CpuModified)) {
604 continue; 604 image.flags |= ImageFlagBits::CpuModified;
605 if (True(image.flags & ImageFlagBits::Tracked)) {
606 UntrackImage(image, id);
607 }
605 } 608 }
606 image.flags |= ImageFlagBits::CpuModified; 609
607 if (True(image.flags & ImageFlagBits::Remapped)) { 610 if (True(image.flags & ImageFlagBits::Remapped)) {
608 continue; 611 continue;
609 } 612 }
610 image.flags |= ImageFlagBits::Remapped; 613 image.flags |= ImageFlagBits::Remapped;
611 if (True(image.flags & ImageFlagBits::Tracked)) {
612 UntrackImage(image, id);
613 }
614 } 614 }
615} 615}
616 616
@@ -1469,7 +1469,8 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, DA
1469 const ImageId new_image_id = slot_images.insert(runtime, new_info, gpu_addr, cpu_addr); 1469 const ImageId new_image_id = slot_images.insert(runtime, new_info, gpu_addr, cpu_addr);
1470 Image& new_image = slot_images[new_image_id]; 1470 Image& new_image = slot_images[new_image_id];
1471 1471
1472 if (!gpu_memory->IsContinuousRange(new_image.gpu_addr, new_image.guest_size_bytes)) { 1472 if (!gpu_memory->IsContinuousRange(new_image.gpu_addr, new_image.guest_size_bytes) &&
1473 new_info.is_sparse) {
1473 new_image.flags |= ImageFlagBits::Sparse; 1474 new_image.flags |= ImageFlagBits::Sparse;
1474 } 1475 }
1475 1476