From a7bceb8a2f12c7ee055f770c87f3026770d3d8f1 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Tue, 9 Jul 2019 17:44:13 -0400 Subject: [PATCH] Texture_Cache correct some bugs introduced on rescaling --- src/video_core/texture_cache/texture_cache.h | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index 59d5a1a000..8180675b32 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -413,11 +413,11 @@ protected: return new_surface; } - std::pair GetFermiSurface(const Tegra::Engines::Fermi2D::Regs::Surface& config, - const bool is_render) { + std::pair GetFermiSurface( + const Tegra::Engines::Fermi2D::Regs::Surface& config) { SurfaceParams params = SurfaceParams::CreateForFermiCopySurface(config); const GPUVAddr gpu_addr = config.Address(); - return GetSurface(gpu_addr, params, true, is_render); + return GetSurface(gpu_addr, params, true, false); } // Must be called by child's create surface @@ -572,13 +572,18 @@ private: } } if (IsResScannerEnabled()) { - bool is_candidate = IsInRSDatabase(current_surface); - if (is_candidate) { + if (IsInRSDatabase(current_surface)) { if (IsRSBlacklisted(new_surface)) { UnmarkScanner(current_surface); } else { MarkScanner(new_surface); } + } else if (IsInRSDatabase(new_surface)) { + if (IsRSBlacklisted(current_surface)) { + UnmarkScanner(new_surface); + } else { + MarkScanner(current_surface); + } } } Unregister(current_surface, UnregisterReason::Rebuilt); @@ -731,7 +736,7 @@ private: // If none are found, we are done. we just load the surface and create it. if (overlaps.empty()) { - return InitializeSurface(gpu_addr, params, preserve_contents && !is_render); + return InitializeSurface(gpu_addr, params, preserve_contents); } // Step 3