rsx: Workaround for lost memory sections

- TODO: surface_cache and texture_cache need a better method of persisting partial framebuffer resources
This commit is contained in:
kd-11 2018-04-23 12:11:29 +03:00 committed by kd-11
parent 58035697d5
commit f3210a9a33

View file

@ -975,13 +975,22 @@ namespace rsx
if (surface == &region)
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();