diff --git a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp index d3c5c3a93..dda80e71e 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp @@ -547,7 +547,10 @@ VkResult WrappedVulkan::vkFreeDescriptorSets(VkDevice device, VkDescriptorPool d unwrapped[i] = Unwrap(pDescriptorSets[i]); for(uint32_t i = 0; i < count; i++) - GetResourceManager()->ReleaseWrappedResource(pDescriptorSets[i]); + { + if(pDescriptorSets[i] != VK_NULL_HANDLE) + GetResourceManager()->ReleaseWrappedResource(pDescriptorSets[i]); + } VkResult ret = ObjDisp(device)->FreeDescriptorSets(Unwrap(device), Unwrap(descriptorPool), count, unwrapped); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 482cd43d4..dbb4b9dec 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -926,6 +926,9 @@ void WrappedVulkan::Shutdown() void WrappedVulkan::vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) { + if(instance == VK_NULL_HANDLE) + return; + RDCASSERT(m_Instance == instance); if(ObjDisp(m_Instance)->DestroyDebugReportCallbackEXT && m_DbgReportCallback != VK_NULL_HANDLE) @@ -3676,6 +3679,9 @@ VkResult WrappedVulkan::vkCreateDevice(VkPhysicalDevice physicalDevice, void WrappedVulkan::vkDestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) { + if(device == VK_NULL_HANDLE) + return; + // flush out any pending commands/semaphores SubmitCmds(); SubmitSemaphores(); diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index da068ba39..445da6d33 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -1756,6 +1756,9 @@ void WrappedVulkan::vkDestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks *pAllocator) { + if(callback == VK_NULL_HANDLE) + return; + UserDebugReportCallbackData *user = (UserDebugReportCallbackData *)(uintptr_t)NON_DISP_TO_UINT64(callback); @@ -2089,6 +2092,9 @@ void WrappedVulkan::vkDestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, const VkAllocationCallbacks *pAllocator) { + if(messenger == VK_NULL_HANDLE) + return; + UserDebugUtilsCallbackData *user = (UserDebugUtilsCallbackData *)(uintptr_t)NON_DISP_TO_UINT64(messenger); diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index 8f1187be5..f247722f1 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -987,6 +987,9 @@ VkResult WrappedVulkan::vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR void WrappedVulkan::vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks *pAllocator) { + if(surface == VK_NULL_HANDLE) + return; + WrappedVkSurfaceKHR *wrapper = GetWrapped(surface); // record pointer has window handle packed in