From baa0dc3e3d0dd450687756eba945e0a0dcf49f21 Mon Sep 17 00:00:00 2001 From: Lynix Date: Wed, 1 Jun 2016 20:59:39 +0200 Subject: [PATCH] Vulkan: Fix Destroy() method of object not resetting the internal pointer Leading to double-delete if Delete() was explictly called Former-commit-id: 0f42bc70913b64eb60193035ae15285fcc8c88ad [formerly 6d8b0e87e7b2edfb2052671a059863b3ce439fcc] Former-commit-id: 2806bd83474c0c12fb88b9562b6baf71cc7692c1 --- include/Nazara/Vulkan/VkDevice.inl | 2 ++ include/Nazara/Vulkan/VkDeviceObject.inl | 3 +++ include/Nazara/Vulkan/VkInstance.inl | 3 +++ include/Nazara/Vulkan/VkSurface.inl | 3 +++ 4 files changed, 11 insertions(+) diff --git a/include/Nazara/Vulkan/VkDevice.inl b/include/Nazara/Vulkan/VkDevice.inl index 77dc1e254..81b784ae2 100644 --- a/include/Nazara/Vulkan/VkDevice.inl +++ b/include/Nazara/Vulkan/VkDevice.inl @@ -29,6 +29,8 @@ namespace Nz { vkDeviceWaitIdle(m_device); vkDestroyDevice(m_device, (m_allocator.pfnAllocation) ? &m_allocator : nullptr); + + m_device = nullptr; } } diff --git a/include/Nazara/Vulkan/VkDeviceObject.inl b/include/Nazara/Vulkan/VkDeviceObject.inl index a3136156c..24499a7d0 100644 --- a/include/Nazara/Vulkan/VkDeviceObject.inl +++ b/include/Nazara/Vulkan/VkDeviceObject.inl @@ -57,7 +57,10 @@ namespace Nz inline void DeviceObject::Destroy() { if (m_handle != VK_NULL_HANDLE) + { C::DestroyHelper(m_device, m_handle, (m_allocator.pfnAllocation) ? &m_allocator : nullptr); + m_handle = VK_NULL_HANDLE; + } } template diff --git a/include/Nazara/Vulkan/VkInstance.inl b/include/Nazara/Vulkan/VkInstance.inl index 801691855..bea7164fb 100644 --- a/include/Nazara/Vulkan/VkInstance.inl +++ b/include/Nazara/Vulkan/VkInstance.inl @@ -50,7 +50,10 @@ namespace Nz inline void Instance::Destroy() { if (m_instance) + { vkDestroyInstance(m_instance, (m_allocator.pfnAllocation) ? &m_allocator : nullptr); + m_instance = nullptr; + } } inline PFN_vkVoidFunction Instance::GetDeviceProcAddr(VkDevice device, const char* name) diff --git a/include/Nazara/Vulkan/VkSurface.inl b/include/Nazara/Vulkan/VkSurface.inl index f64c24af0..a79d9c65d 100644 --- a/include/Nazara/Vulkan/VkSurface.inl +++ b/include/Nazara/Vulkan/VkSurface.inl @@ -165,7 +165,10 @@ namespace Nz inline void Surface::Destroy() { if (m_surface != VK_NULL_HANDLE) + { m_instance.vkDestroySurfaceKHR(m_instance, m_surface, (m_allocator.pfnAllocation) ? &m_allocator : nullptr); + m_surface = VK_NULL_HANDLE; + } } inline VkResult Surface::GetLastErrorCode() const