From 44ae306e6b2752d2e12a9d30128baf6b743f423f Mon Sep 17 00:00:00 2001 From: kd-11 Date: Tue, 9 Aug 2016 03:47:42 +0300 Subject: [PATCH] vk: delay texture removal when cache is clobbered (#2045) --- rpcs3/Emu/RSX/VK/VKTextureCache.h | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/rpcs3/Emu/RSX/VK/VKTextureCache.h b/rpcs3/Emu/RSX/VK/VKTextureCache.h index aede466763..ff8457cf96 100644 --- a/rpcs3/Emu/RSX/VK/VKTextureCache.h +++ b/rpcs3/Emu/RSX/VK/VKTextureCache.h @@ -32,6 +32,7 @@ namespace vk std::vector m_cache; std::pair texture_cache_range = std::make_pair(0xFFFFFFFF, 0); std::vector > m_temporary_image_view; + std::vector> m_dirty_textures; bool lock_memory_region(u32 start, u32 size) { @@ -99,7 +100,7 @@ namespace vk { if (tex.exists) { - tex.uploaded_texture.reset(); + m_dirty_textures.push_back(std::move(tex.uploaded_texture)); tex.exists = false; } @@ -133,18 +134,6 @@ namespace vk unlock_memory_region(static_cast(obj.protected_rgn_start), static_cast(obj.native_rsx_size)); } - void purge_dirty_textures() - { - for (cached_texture_object &tex : m_cache) - { - if (tex.dirty && tex.exists) - { - tex.uploaded_texture.reset(); - tex.exists = false; - } - } - } - public: texture_cache() {} @@ -293,6 +282,7 @@ namespace vk void flush() { + m_dirty_textures.clear(); m_temporary_image_view.clear(); } };