From aa06ac119f25f3e725ab1618a32498b5d7731c3d Mon Sep 17 00:00:00 2001 From: kd-11 Date: Mon, 3 Jul 2023 20:57:57 +0300 Subject: [PATCH] rsx: Fix sampled descriptor address corruption --- rpcs3/Emu/RSX/Common/texture_cache.h | 11 ++++++++--- rpcs3/Emu/RSX/Common/texture_cache_helpers.h | 4 ++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/RSX/Common/texture_cache.h b/rpcs3/Emu/RSX/Common/texture_cache.h index 19eb1c21af..8e8cbe1912 100644 --- a/rpcs3/Emu/RSX/Common/texture_cache.h +++ b/rpcs3/Emu/RSX/Common/texture_cache.h @@ -2004,8 +2004,9 @@ namespace rsx (result.external_subresource_desc.op == deferred_request_command::copy_image_dynamic) || (result.external_subresource_desc.op == deferred_request_command::blit_image_static); - if (is_simple_subresource_copy && - attr.edge_clamped && + if (attr.edge_clamped && + !g_cfg.video.strict_rendering_mode && + is_simple_subresource_copy && render_target_format_is_compatible(result.external_subresource_desc.src0(), attr.gcm_format)) { if (result.external_subresource_desc.op != deferred_request_command::blit_image_static) [[ likely ]] @@ -2327,7 +2328,11 @@ namespace rsx result.external_subresource_desc.cache_range = lookup_range; } - result.ref_address = attributes.address; + if (!result.ref_address) + { + result.ref_address = attributes.address; + } + result.surface_cache_tag = m_rtts.write_tag; if (subsurface_count == 1) diff --git a/rpcs3/Emu/RSX/Common/texture_cache_helpers.h b/rpcs3/Emu/RSX/Common/texture_cache_helpers.h index 37a2371afe..52a73a5bdf 100644 --- a/rpcs3/Emu/RSX/Common/texture_cache_helpers.h +++ b/rpcs3/Emu/RSX/Common/texture_cache_helpers.h @@ -646,9 +646,13 @@ namespace rsx { // If we can get away with clip only, do it if (attr.edge_clamped) + { requires_clip = true; + } else + { requires_processing = true; + } } if (surface_is_rop_target && g_cfg.video.strict_rendering_mode)