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