summaryrefslogtreecommitdiff
path: root/src/video_core/texture_cache
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2021-10-15 22:59:16 +0200
committerGravatar Fernando Sahmkow2021-11-16 22:11:31 +0100
commitb7ccc58f235d9e442677eb10259b7196a387c6bc (patch)
tree2a479e907e8019b81aaeb99c5a1966ec05b5aab0 /src/video_core/texture_cache
parenttexture_cache_base: Remove unused function declarations (diff)
downloadyuzu-b7ccc58f235d9e442677eb10259b7196a387c6bc.tar.gz
yuzu-b7ccc58f235d9e442677eb10259b7196a387c6bc.tar.xz
yuzu-b7ccc58f235d9e442677eb10259b7196a387c6bc.zip
Texture Cahe: Fix downscaling on SMO.
Diffstat (limited to 'src/video_core/texture_cache')
-rw-r--r--src/video_core/texture_cache/image_info.cpp4
-rw-r--r--src/video_core/texture_cache/image_info.h1
-rw-r--r--src/video_core/texture_cache/texture_cache.h3
3 files changed, 8 insertions, 0 deletions
diff --git a/src/video_core/texture_cache/image_info.cpp b/src/video_core/texture_cache/image_info.cpp
index 7fa8fd4fe..d8e414247 100644
--- a/src/video_core/texture_cache/image_info.cpp
+++ b/src/video_core/texture_cache/image_info.cpp
@@ -102,6 +102,7 @@ ImageInfo::ImageInfo(const TICEntry& config) noexcept {
102 layer_stride = CalculateLayerStride(*this); 102 layer_stride = CalculateLayerStride(*this);
103 maybe_unaligned_layer_stride = CalculateLayerSize(*this); 103 maybe_unaligned_layer_stride = CalculateLayerSize(*this);
104 rescaleable &= (block.depth == 0) && resources.levels == 1; 104 rescaleable &= (block.depth == 0) && resources.levels == 1;
105 downscaleable = size.height > 512;
105 } 106 }
106} 107}
107 108
@@ -135,6 +136,7 @@ ImageInfo::ImageInfo(const Tegra::Engines::Maxwell3D::Regs& regs, size_t index)
135 size.depth = rt.depth; 136 size.depth = rt.depth;
136 } else { 137 } else {
137 rescaleable = block.depth == 0 && size.height > 256; 138 rescaleable = block.depth == 0 && size.height > 256;
139 downscaleable = size.height > 512;
138 type = ImageType::e2D; 140 type = ImageType::e2D;
139 resources.layers = rt.depth; 141 resources.layers = rt.depth;
140 } 142 }
@@ -164,6 +166,7 @@ ImageInfo::ImageInfo(const Tegra::Engines::Maxwell3D::Regs& regs) noexcept {
164 size.depth = regs.zeta_depth; 166 size.depth = regs.zeta_depth;
165 } else { 167 } else {
166 rescaleable = block.depth == 0 && size.height > 256; 168 rescaleable = block.depth == 0 && size.height > 256;
169 downscaleable = size.height > 512;
167 type = ImageType::e2D; 170 type = ImageType::e2D;
168 resources.layers = regs.zeta_depth; 171 resources.layers = regs.zeta_depth;
169 } 172 }
@@ -197,6 +200,7 @@ ImageInfo::ImageInfo(const Tegra::Engines::Fermi2D::Surface& config) noexcept {
197 .depth = 1, 200 .depth = 1,
198 }; 201 };
199 rescaleable = block.depth == 0 && size.height > 256; 202 rescaleable = block.depth == 0 && size.height > 256;
203 downscaleable = size.height > 512;
200 } 204 }
201} 205}
202 206
diff --git a/src/video_core/texture_cache/image_info.h b/src/video_core/texture_cache/image_info.h
index e874d2870..5932dcaba 100644
--- a/src/video_core/texture_cache/image_info.h
+++ b/src/video_core/texture_cache/image_info.h
@@ -34,6 +34,7 @@ struct ImageInfo {
34 u32 num_samples = 1; 34 u32 num_samples = 1;
35 u32 tile_width_spacing = 0; 35 u32 tile_width_spacing = 0;
36 bool rescaleable = false; 36 bool rescaleable = false;
37 bool downscaleable = false;
37}; 38};
38 39
39} // namespace VideoCommon 40} // namespace VideoCommon
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index c1fb12679..261cb6c48 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -798,6 +798,9 @@ bool TextureCache<P>::ImageCanRescale(ImageBase& image) {
798 if (!image.info.rescaleable || 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 (Settings::values.resolution_info.downscale && !image.info.downscaleable) {
802 return false;
803 }
801 if (True(image.flags & (ImageFlagBits::Rescaled | ImageFlagBits::CheckingRescalable))) { 804 if (True(image.flags & (ImageFlagBits::Rescaled | ImageFlagBits::CheckingRescalable))) {
802 return true; 805 return true;
803 } 806 }