diff options
| author | 2021-10-05 00:07:51 -0400 | |
|---|---|---|
| committer | 2021-11-16 22:11:30 +0100 | |
| commit | 88ef04dbaf26ab83ec85bfa3c68434c283c66e50 (patch) | |
| tree | a665955df2300f63ac774a4101ec00959024a620 /src | |
| parent | Texture Cache: Fix calculations when scaling. (diff) | |
| download | yuzu-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.h | 24 | ||||
| -rw-r--r-- | src/video_core/texture_cache/texture_cache_base.h | 1 |
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 | ||
| 855 | template <class P> | 855 | template <class P> |
| 856 | u64 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 | |||
| 865 | template <class P> | ||
| 856 | bool TextureCache<P>::ScaleUp(Image& image) { | 866 | bool 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; |