diff --git a/rpcs3/Emu/RSX/Common/texture_cache.h b/rpcs3/Emu/RSX/Common/texture_cache.h index f30034acd9..bb5298d703 100644 --- a/rpcs3/Emu/RSX/Common/texture_cache.h +++ b/rpcs3/Emu/RSX/Common/texture_cache.h @@ -975,13 +975,22 @@ namespace rsx if (surface == ®ion) continue; + if (surface->get_context() != rsx::texture_upload_context::framebuffer_storage) + { + m_unreleased_texture_objects++; + } + else + { + if (surface->get_section_base() != memory_address) + //HACK: preserve other overlapped sections despite overlap unless new section is superseding + //TODO: write memory to cell or redesign sections to preserve the data + continue; + } + //Memory is shared with another surface //Discard it - the backend should ensure memory contents are preserved if needed surface->set_dirty(true); - if (surface->get_context() != rsx::texture_upload_context::framebuffer_storage) - m_unreleased_texture_objects++; - if (surface->is_locked()) { surface->unprotect();