From 7d2ed9200d041ebfa424c033c121e3d2c5cde69f Mon Sep 17 00:00:00 2001 From: kd-11 Date: Fri, 31 Jan 2020 22:40:02 +0300 Subject: [PATCH] rsx: Remove sections that are wholly inherited by new blocks - Allows sections reclaimed by the surface store due to overlap/inheritance to be identified and removed. - Additionally, potentially lowers the number of flushes required per block with multiple overlaps improving efficiency and theoretically performance. --- rpcs3/Emu/RSX/Common/texture_cache.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rpcs3/Emu/RSX/Common/texture_cache.h b/rpcs3/Emu/RSX/Common/texture_cache.h index 0783fb5e4f..b477ead808 100644 --- a/rpcs3/Emu/RSX/Common/texture_cache.h +++ b/rpcs3/Emu/RSX/Common/texture_cache.h @@ -749,6 +749,14 @@ namespace rsx tex.is_flushable() && tex.get_section_base() != fault_range_in.start) { + if (tex.get_context() == texture_upload_context::framebuffer_storage && + tex.inside(fault_range, section_bounds::full_range)) + { + // FBO data 'lives on' in the new region. Surface cache handles memory intersection for us. + verify(HERE), tex.inside(fault_range, section_bounds::locked_range); + tex.discard(false); + } + // HACK: When being superseded by an fbo, we preserve overlapped flushables unless the start addresses match continue; }