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.
This commit is contained in:
kd-11 2020-01-31 22:40:02 +03:00 committed by kd-11
parent f6e90b4c72
commit 7d2ed9200d

View file

@ -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;
}