summaryrefslogtreecommitdiff
path: root/src/video_core/texture_cache
diff options
context:
space:
mode:
authorGravatar ameerj2021-10-12 01:45:54 -0400
committerGravatar Fernando Sahmkow2021-11-16 22:11:31 +0100
commit4de584005fe8ae00608f8c3267a78e7cf0eb52aa (patch)
treeadbbf400f85034b0661513f27f56e110685c2950 /src/video_core/texture_cache
parentvk_texture_cache: Fix BlitScale of non-2D images (diff)
downloadyuzu-4de584005fe8ae00608f8c3267a78e7cf0eb52aa.tar.gz
yuzu-4de584005fe8ae00608f8c3267a78e7cf0eb52aa.tar.xz
yuzu-4de584005fe8ae00608f8c3267a78e7cf0eb52aa.zip
texture_cache: Fix infinitely recursive ImageCanRescale check
Diffstat (limited to 'src/video_core/texture_cache')
-rw-r--r--src/video_core/texture_cache/image_base.cpp2
-rw-r--r--src/video_core/texture_cache/image_base.h5
-rw-r--r--src/video_core/texture_cache/texture_cache.h16
3 files changed, 13 insertions, 10 deletions
diff --git a/src/video_core/texture_cache/image_base.cpp b/src/video_core/texture_cache/image_base.cpp
index 25a211df8..1909c9ecb 100644
--- a/src/video_core/texture_cache/image_base.cpp
+++ b/src/video_core/texture_cache/image_base.cpp
@@ -256,6 +256,8 @@ void AddImageAlias(ImageBase& lhs, ImageBase& rhs, ImageId lhs_id, ImageId rhs_i
256 } 256 }
257 lhs.aliased_images.push_back(std::move(lhs_alias)); 257 lhs.aliased_images.push_back(std::move(lhs_alias));
258 rhs.aliased_images.push_back(std::move(rhs_alias)); 258 rhs.aliased_images.push_back(std::move(rhs_alias));
259 lhs.flags &= ~ImageFlagBits::IsRescalable;
260 rhs.flags &= ~ImageFlagBits::IsRescalable;
259} 261}
260 262
261} // namespace VideoCommon 263} // namespace VideoCommon
diff --git a/src/video_core/texture_cache/image_base.h b/src/video_core/texture_cache/image_base.h
index 9c34687e0..bab290ac7 100644
--- a/src/video_core/texture_cache/image_base.h
+++ b/src/video_core/texture_cache/image_base.h
@@ -36,8 +36,9 @@ enum class ImageFlagBits : u32 {
36 36
37 // Rescaler 37 // Rescaler
38 Rescaled = 1 << 12, 38 Rescaled = 1 << 12,
39 RescaleChecked = 1 << 13, 39 CheckingRescalable = 1 << 13,
40 Blacklisted = 1 << 14, 40 IsRescalable = 1 << 14,
41 Blacklisted = 1 << 15,
41}; 42};
42DECLARE_ENUM_FLAG_OPERATORS(ImageFlagBits) 43DECLARE_ENUM_FLAG_OPERATORS(ImageFlagBits)
43 44
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index c77332b46..c1fb12679 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -795,25 +795,25 @@ bool TextureCache<P>::BlackListImage(ImageId image_id) {
795 795
796template <class P> 796template <class P>
797bool TextureCache<P>::ImageCanRescale(ImageBase& image) { 797bool TextureCache<P>::ImageCanRescale(ImageBase& image) {
798 if (True(image.flags & ImageFlagBits::Blacklisted)) { 798 if (!image.info.rescaleable || True(image.flags & ImageFlagBits::Blacklisted)) {
799 return false; 799 return false;
800 } 800 }
801 if (True(image.flags & (ImageFlagBits::Rescaled | ImageFlagBits::RescaleChecked))) { 801 if (True(image.flags & (ImageFlagBits::Rescaled | ImageFlagBits::CheckingRescalable))) {
802 return true; 802 return true;
803 } 803 }
804 if (!image.info.rescaleable) { 804 if (True(image.flags & ImageFlagBits::IsRescalable)) {
805 image.flags &= ~ImageFlagBits::RescaleChecked; 805 return true;
806 return false;
807 } 806 }
808 image.flags |= ImageFlagBits::RescaleChecked; 807 image.flags |= ImageFlagBits::CheckingRescalable;
809 for (const auto& alias : image.aliased_images) { 808 for (const auto& alias : image.aliased_images) {
810 Image& other_image = slot_images[alias.id]; 809 Image& other_image = slot_images[alias.id];
811 if (!ImageCanRescale(other_image)) { 810 if (!ImageCanRescale(other_image)) {
812 image.flags &= ~ImageFlagBits::RescaleChecked; 811 image.flags &= ~ImageFlagBits::CheckingRescalable;
813 return false; 812 return false;
814 } 813 }
815 } 814 }
816 image.flags &= ~ImageFlagBits::RescaleChecked; 815 image.flags &= ~ImageFlagBits::CheckingRescalable;
816 image.flags |= ImageFlagBits::IsRescalable;
817 return true; 817 return true;
818} 818}
819 819