From 88ef04dbaf26ab83ec85bfa3c68434c283c66e50 Mon Sep 17 00:00:00 2001
From: ameerj <52414509+ameerj@users.noreply.github.com>
Date: Tue, 5 Oct 2021 00:07:51 -0400
Subject: [PATCH] texture_cache: Refactor scaled image size calculation

---
 src/video_core/texture_cache/texture_cache.h  | 24 +++++++++----------
 .../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
@@ -852,18 +852,23 @@ void TextureCache<P>::InvalidateScale(Image& image) {
     has_deleted_images = true;
 }
 
+template <class P>
+u64 TextureCache<P>::GetScaledImageSizeBytes(Image& image) {
+    const f32 add_to_size = Settings::values.resolution_info.up_factor - 1.0f;
+    const bool sign = std::signbit(add_to_size);
+    const u32 image_size_bytes = std::max(image.guest_size_bytes, image.unswizzled_size_bytes);
+    const u64 tentative_size = static_cast<u64>(image_size_bytes * std::abs(add_to_size));
+    const u64 fitted_size = Common::AlignUp(tentative_size, 1024);
+    return sign ? -fitted_size : fitted_size;
+}
+
 template <class P>
 bool TextureCache<P>::ScaleUp(Image& image) {
     const bool rescaled = image.ScaleUp();
     if (!rescaled) {
         return false;
     }
-    const auto& add_to_size = Settings::values.resolution_info.up_factor - 1.0f;
-    const auto sign = std::signbit(add_to_size);
-    const u64 tentative_size = static_cast<u64>(
-        std::max(image.guest_size_bytes, image.unswizzled_size_bytes) * std::abs(add_to_size));
-    const u64 fitted_size = Common::AlignUp(tentative_size, 1024);
-    total_used_memory += sign ? -fitted_size : fitted_size;
+    total_used_memory += GetScaledImageSizeBytes(image);
     InvalidateScale(image);
     return true;
 }
@@ -874,12 +879,7 @@ bool TextureCache<P>::ScaleDown(Image& image) {
     if (!rescaled) {
         return false;
     }
-    const auto& add_to_size = Settings::values.resolution_info.up_factor - 1.0f;
-    const auto sign = std::signbit(add_to_size);
-    const u64 tentative_size = static_cast<u64>(
-        std::max(image.guest_size_bytes, image.unswizzled_size_bytes) * std::abs(add_to_size));
-    const u64 fitted_size = Common::AlignUp(tentative_size, 1024);
-    total_used_memory += sign ? fitted_size : -fitted_size;
+    total_used_memory += GetScaledImageSizeBytes(image);
     InvalidateScale(image);
     return true;
 }
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:
     void InvalidateScale(Image& image);
     bool ScaleUp(Image& image);
     bool ScaleDown(Image& image);
+    u64 GetScaledImageSizeBytes(Image& image);
 
     Runtime& runtime;
     VideoCore::RasterizerInterface& rasterizer;