diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index 91df6f0650..abc4ff3c5f 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -936,8 +936,6 @@ VKGSRender::~VKGSRender() ctx.buffer_views_to_clean.clear(); } - m_descriptor_pool.destroy(); - // Textures m_rtts.destroy(); m_texture_cache.destroy(); @@ -965,6 +963,9 @@ VKGSRender::~VKGSRender() // Global resources vk::destroy_global_resources(); + // Destroy at the end in case of lingering callbacks + m_descriptor_pool.destroy(); + // Device handles/contexts m_swapchain->destroy(); m_instance.destroy(); diff --git a/rpcs3/Emu/RSX/VK/vkutils/descriptors.h b/rpcs3/Emu/RSX/VK/vkutils/descriptors.h index 15da245bbe..b842670561 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/descriptors.h +++ b/rpcs3/Emu/RSX/VK/vkutils/descriptors.h @@ -20,7 +20,10 @@ namespace vk ~gc_wrapper_t() { - m_callback(); + if (m_callback) + { + m_callback(); + } } }; @@ -36,7 +39,7 @@ namespace vk VkDescriptorSet allocate(VkDescriptorSetLayout layout, VkBool32 use_cache = VK_TRUE); operator VkDescriptorPool() { return m_current_pool_handle; } - FORCE_INLINE bool valid() const { return (!m_device_subpools.empty()); } + FORCE_INLINE bool valid() const { return !m_device_subpools.empty(); } FORCE_INLINE u32 max_sets() const { return m_create_info.maxSets; } private: