From 8b5aba9d93b1060b0a6fef2addbccc35ced7deb5 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 9 Oct 2016 12:43:27 -0700 Subject: [PATCH] Vulkan: Fix vulkan2d deletion order. --- GPU/Vulkan/FramebufferVulkan.cpp | 10 ++++------ GPU/Vulkan/VulkanUtil.cpp | 4 ++++ GPU/Vulkan/VulkanUtil.h | 1 + 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/GPU/Vulkan/FramebufferVulkan.cpp b/GPU/Vulkan/FramebufferVulkan.cpp index dd5939a58c..88d681d8c3 100644 --- a/GPU/Vulkan/FramebufferVulkan.cpp +++ b/GPU/Vulkan/FramebufferVulkan.cpp @@ -100,6 +100,7 @@ FramebufferManagerVulkan::FramebufferManagerVulkan(VulkanContext *vulkan) : FramebufferManagerVulkan::~FramebufferManagerVulkan() { delete[] convBuf_; + vulkan2D_.Shutdown(); DestroyDeviceObjects(); } @@ -237,10 +238,7 @@ void FramebufferManagerVulkan::DestroyDeviceObjects() { vulkan_->Delete().QueueDeleteSampler(linearSampler_); if (nearestSampler_ != VK_NULL_HANDLE) vulkan_->Delete().QueueDeleteSampler(nearestSampler_); - if (pipelineBasicTex_ != VK_NULL_HANDLE) - vulkan_->Delete().QueueDeletePipeline(pipelineBasicTex_); - if (pipelinePostShader_ != VK_NULL_HANDLE) - vulkan_->Delete().QueueDeletePipeline(pipelinePostShader_); + // pipelineBasicTex_ and pipelineBasicTex_ come from vulkan2D_. if (pipelineCache2D_ != VK_NULL_HANDLE) vulkan_->Delete().QueueDeletePipelineCache(pipelineCache2D_); } @@ -1541,11 +1539,11 @@ void FramebufferManagerVulkan::EndFrame() { } void FramebufferManagerVulkan::DeviceLost() { + vulkan2D_.DeviceLost(); + DestroyAllFBOs(false); DestroyDeviceObjects(); resized_ = false; - - vulkan2D_.DeviceLost(); } void FramebufferManagerVulkan::DeviceRestore(VulkanContext *vulkan) { diff --git a/GPU/Vulkan/VulkanUtil.cpp b/GPU/Vulkan/VulkanUtil.cpp index 879bd90ff8..8e53bba5ae 100644 --- a/GPU/Vulkan/VulkanUtil.cpp +++ b/GPU/Vulkan/VulkanUtil.cpp @@ -55,6 +55,10 @@ Vulkan2D::~Vulkan2D() { DestroyDeviceObjects(); } +void Vulkan2D::Shutdown() { + DestroyDeviceObjects(); +} + void Vulkan2D::DestroyDeviceObjects() { for (int i = 0; i < 2; i++) { if (frameData_[i].descPool != VK_NULL_HANDLE) { diff --git a/GPU/Vulkan/VulkanUtil.h b/GPU/Vulkan/VulkanUtil.h index 48e9a09bda..52f80cc55c 100644 --- a/GPU/Vulkan/VulkanUtil.h +++ b/GPU/Vulkan/VulkanUtil.h @@ -81,6 +81,7 @@ public: void DeviceLost(); void DeviceRestore(VulkanContext *vulkan); + void Shutdown(); VkPipeline GetPipeline(VkPipelineCache cache, VkRenderPass rp, VkShaderModule vs, VkShaderModule fs);