summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ameerj2021-10-05 00:07:51 -0400
committerGravatar Fernando Sahmkow2021-11-16 22:11:30 +0100
commit88ef04dbaf26ab83ec85bfa3c68434c283c66e50 (patch)
treea665955df2300f63ac774a4101ec00959024a620 /src
parentTexture Cache: Fix calculations when scaling. (diff)
downloadyuzu-88ef04dbaf26ab83ec85bfa3c68434c283c66e50.tar.gz
yuzu-88ef04dbaf26ab83ec85bfa3c68434c283c66e50.tar.xz
yuzu-88ef04dbaf26ab83ec85bfa3c68434c283c66e50.zip
texture_cache: Refactor scaled image size calculation
Diffstat (limited to 'src')
-rw-r--r--src/video_core/texture_cache/texture_cache.h24
-rw-r--r--src/video_core/texture_cache/texture_cache_base.h1
2 files changed, 13 insertions, 12 deletions
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index 691198853..b708e41b5 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -853,17 +853,22 @@ void TextureCache<P>::InvalidateScale(Image& image) {
853} 853}
854 854
855template <class P> 855template <class P>
856u64 TextureCache<P>::GetScaledImageSizeBytes(Image& image) {
857 const f32 add_to_size = Settings::values.resolution_info.up_factor - 1.0f;
858 const bool sign = std::signbit(add_to_size);
859 const u32 image_size_bytes = std::max(image.guest_size_bytes, image.unswizzled_size_bytes);
860 const u64 tentative_size = static_cast<u64>(image_size_bytes * std::abs(add_to_size));
861 const u64 fitted_size = Common::AlignUp(tentative_size, 1024);
862 return sign ? -fitted_size : fitted_size;
863}
864
865template <class P>
856bool TextureCache<P>::ScaleUp(Image& image) { 866bool TextureCache<P>::ScaleUp(Image& image) {
857 const bool rescaled = image.ScaleUp(); 867 const bool rescaled = image.ScaleUp();
858 if (!rescaled) { 868 if (!rescaled) {
859 return false; 869 return false;
860 } 870 }
861 const auto& add_to_size = Settings::values.resolution_info.up_factor - 1.0f; 871 total_used_memory += GetScaledImageSizeBytes(image);
862 const auto sign = std::signbit(add_to_size);
863 const u64 tentative_size = static_cast<u64>(
864 std::max(image.guest_size_bytes, image.unswizzled_size_bytes) * std::abs(add_to_size));
865 const u64 fitted_size = Common::AlignUp(tentative_size, 1024);
866 total_used_memory += sign ? -fitted_size : fitted_size;
867 InvalidateScale(image); 872 InvalidateScale(image);
868 return true; 873 return true;
869} 874}
@@ -874,12 +879,7 @@ bool TextureCache<P>::ScaleDown(Image& image) {
874 if (!rescaled) { 879 if (!rescaled) {
875 return false; 880 return false;
876 } 881 }
877 const auto& add_to_size = Settings::values.resolution_info.up_factor - 1.0f; 882 total_used_memory += GetScaledImageSizeBytes(image);
878 const auto sign = std::signbit(add_to_size);
879 const u64 tentative_size = static_cast<u64>(
880 std::max(image.guest_size_bytes, image.unswizzled_size_bytes) * std::abs(add_to_size));
881 const u64 fitted_size = Common::AlignUp(tentative_size, 1024);
882 total_used_memory += sign ? fitted_size : -fitted_size;
883 InvalidateScale(image); 883 InvalidateScale(image);
884 return true; 884 return true;
885} 885}
diff --git a/src/video_core/texture_cache/texture_cache_base.h b/src/video_core/texture_cache/texture_cache_base.h
index 517a4c224..40e003b60 100644
--- a/src/video_core/texture_cache/texture_cache_base.h
+++ b/src/video_core/texture_cache/texture_cache_base.h
@@ -339,6 +339,7 @@ private:
339 void InvalidateScale(Image& image); 339 void InvalidateScale(Image& image);
340 bool ScaleUp(Image& image); 340 bool ScaleUp(Image& image);
341 bool ScaleDown(Image& image); 341 bool ScaleDown(Image& image);
342 u64 GetScaledImageSizeBytes(Image& image);
342 343
343 Runtime& runtime; 344 Runtime& runtime;
344 VideoCore::RasterizerInterface& rasterizer; 345 VideoCore::RasterizerInterface& rasterizer;