diff --git a/rpcs3/Emu/RSX/VK/VKResourceManager.h b/rpcs3/Emu/RSX/VK/VKResourceManager.h index ac2e579e74..bc9b459482 100644 --- a/rpcs3/Emu/RSX/VK/VKResourceManager.h +++ b/rpcs3/Emu/RSX/VK/VKResourceManager.h @@ -136,6 +136,7 @@ namespace vk if (const auto found = m_sampler_pool.find(key)) { + found->add_ref(); return found; } @@ -145,9 +146,8 @@ namespace vk min_filter, mag_filter, mipmap_mode, border_color, depth_compare, depth_compare_mode); - result->add_ref(); - auto ret = result.get(); - m_sampler_pool.emplace(key, result); + auto ret = m_sampler_pool.emplace(key, result); + ret->add_ref(); return ret; } diff --git a/rpcs3/Emu/RSX/VK/vkutils/sampler.cpp b/rpcs3/Emu/RSX/VK/vkutils/sampler.cpp index f5e957329f..586656c621 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/sampler.cpp +++ b/rpcs3/Emu/RSX/VK/vkutils/sampler.cpp @@ -154,7 +154,7 @@ namespace vk m_custom_color_sampler_pool.clear(); } - vk::sampler* sampler_pool_t::find(const sampler_pool_key_t& key) const + cached_sampler_object_t* sampler_pool_t::find(const sampler_pool_key_t& key) const { if (!key.border_color_key) [[ likely ]] { @@ -174,17 +174,18 @@ namespace vk return nullptr; } - void sampler_pool_t::emplace(const sampler_pool_key_t& key, std::unique_ptr& object) + cached_sampler_object_t* sampler_pool_t::emplace(const sampler_pool_key_t& key, std::unique_ptr& object) { object->key = key; if (!key.border_color_key) [[ likely ]] { - m_generic_sampler_pool.emplace(key.base_key, std::move(object)); - return; + const auto [iterator, _unused] = m_generic_sampler_pool.emplace(key.base_key, std::move(object)); + return iterator->second.get(); } - m_custom_color_sampler_pool.emplace (key.base_key, std::move(object)); + const auto [iterator, _unused] = m_custom_color_sampler_pool.emplace(key.base_key, std::move(object)); + return iterator->second.get(); } std::vector> sampler_pool_t::collect(std::function predicate) diff --git a/rpcs3/Emu/RSX/VK/vkutils/sampler.h b/rpcs3/Emu/RSX/VK/vkutils/sampler.h index f231350b43..ff86ffe9b4 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/sampler.h +++ b/rpcs3/Emu/RSX/VK/vkutils/sampler.h @@ -80,9 +80,9 @@ namespace vk void clear(); - vk::sampler* find(const sampler_pool_key_t& key) const; + cached_sampler_object_t* find(const sampler_pool_key_t& key) const; - void emplace(const sampler_pool_key_t& key, std::unique_ptr& object); + cached_sampler_object_t* emplace(const sampler_pool_key_t& key, std::unique_ptr& object); std::vector> collect(std::function predicate); };