From 7530b3c971fed8025f40ac4f920520995304d0c5 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Wed, 8 Jun 2022 22:02:41 +0300 Subject: [PATCH] vk: Fix image view search and destroy --- rpcs3/Emu/RSX/VK/vkutils/image.cpp | 14 +++++++++++--- rpcs3/Emu/RSX/VK/vkutils/image.h | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/RSX/VK/vkutils/image.cpp b/rpcs3/Emu/RSX/VK/vkutils/image.cpp index 2f90963153..265e68c153 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/image.cpp +++ b/rpcs3/Emu/RSX/VK/vkutils/image.cpp @@ -4,6 +4,7 @@ #include "image.h" #include "image_helpers.h" +#include "../VKResourceManager.h" #include namespace vk @@ -391,11 +392,11 @@ namespace vk } } - const auto storage_key = remap_encoding | (mask << 16); + const u64 storage_key = remap_encoding | (static_cast(mask) << 32); auto found = views.find(storage_key); - if (found != views.end() && - found->second->info.subresourceRange.aspectMask & mask) + if (found != views.end()) { + ensure(found->second->info.subresourceRange.aspectMask & mask); return found->second.get(); } @@ -434,6 +435,13 @@ namespace vk new_layout.a != native_component_map.a) { native_component_map = new_layout; + + // Safely discard existing views + auto gc = vk::get_resource_manager(); + for (auto& p : views) + { + gc->dispose(p.second); + } views.clear(); } } diff --git a/rpcs3/Emu/RSX/VK/vkutils/image.h b/rpcs3/Emu/RSX/VK/vkutils/image.h index 037786a16b..8a570b7ddf 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/image.h +++ b/rpcs3/Emu/RSX/VK/vkutils/image.h @@ -124,7 +124,7 @@ namespace vk class viewable_image : public image { protected: - std::unordered_map> views; + std::unordered_map> views; viewable_image* clone(); public: