From 19ca0c9ab5cbaa86e30743ea760e0aab5c40c1d6 Mon Sep 17 00:00:00 2001
From: Fernando Sahmkow <fsahmkow27@gmail.com>
Date: Mon, 20 Sep 2021 19:11:03 +0200
Subject: [PATCH] TextureCache: Base fixes on rescaling.

---
 src/video_core/renderer_vulkan/vk_rasterizer.cpp | 3 ++-
 src/video_core/texture_cache/texture_cache.h     | 7 ++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 87f265e09a..1ceffa7188 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -207,7 +207,7 @@ void RasterizerVulkan::Clear() {
 
     query_cache.UpdateCounters();
 
-    const auto& regs = maxwell3d.regs;
+    auto& regs = maxwell3d.regs;
     const bool use_color = regs.clear_buffers.R || regs.clear_buffers.G || regs.clear_buffers.B ||
                            regs.clear_buffers.A;
     const bool use_depth = regs.clear_buffers.Z;
@@ -228,6 +228,7 @@ void RasterizerVulkan::Clear() {
         up_scale = Settings::values.resolution_info.up_scale;
         down_shift = Settings::values.resolution_info.down_shift;
     }
+    UpdateViewportsState(regs);
 
     VkClearRect clear_rect{
         .rect = GetScissorState(regs, 0, up_scale, down_shift),
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index 7649845465..a543776fda 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -205,8 +205,8 @@ void TextureCache<P>::UpdateRenderTargets(bool is_clear) {
         return;
     }
 
-    u32 scale_rating;
-    bool rescaled;
+    u32 scale_rating = 0;
+    bool rescaled = false;
     std::array<ImageId, NUM_RT> tmp_color_images{};
     ImageId tmp_depth_image{};
     do {
@@ -223,7 +223,7 @@ void TextureCache<P>::UpdateRenderTargets(bool is_clear) {
         bool can_rescale = true;
         bool any_blacklisted = false;
         const auto check_rescale = [&](ImageViewId view_id, ImageId& id_save) {
-            if (view_id) {
+            if (view_id != NULL_IMAGE_VIEW_ID && view_id != ImageViewId{}) {
                 const auto& view = slot_image_views[view_id];
                 const auto image_id = view.image_id;
                 id_save = image_id;
@@ -265,6 +265,7 @@ void TextureCache<P>::UpdateRenderTargets(bool is_clear) {
                     scale_up(tmp_color_images[index]);
                 }
                 scale_up(tmp_depth_image);
+                scale_rating = 2;
             }
         } else {
             rescaled = false;