diff options
Diffstat (limited to 'src/vulkan/pipeline.cc')
-rw-r--r-- | src/vulkan/pipeline.cc | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/vulkan/pipeline.cc b/src/vulkan/pipeline.cc index c5edbc5..1e8f917 100644 --- a/src/vulkan/pipeline.cc +++ b/src/vulkan/pipeline.cc @@ -66,24 +66,32 @@ Result Pipeline::InitializeCommandBuffer(VkCommandPool pool, VkQueue queue) { } void Pipeline::Shutdown() { - Result r = command_->End(); - if (r.IsSuccess()) - command_->SubmitAndReset(fence_timeout_ms_); - command_->Shutdown(); + if (command_) { + Result r = command_->End(); + if (r.IsSuccess()) + command_->SubmitAndReset(fence_timeout_ms_); + + command_->Shutdown(); + } DestroyVkDescriptorRelatedObjects(); } void Pipeline::DestroyVkDescriptorRelatedObjects() { for (auto& info : descriptor_set_info_) { - vkDestroyDescriptorSetLayout(device_, info.layout, nullptr); + if (info.layout != VK_NULL_HANDLE) + vkDestroyDescriptorSetLayout(device_, info.layout, nullptr); + if (info.empty) continue; - vkDestroyDescriptorPool(device_, info.pool, nullptr); + if (info.pool != VK_NULL_HANDLE) + vkDestroyDescriptorPool(device_, info.pool, nullptr); - for (auto& desc : info.descriptors_) - desc->Shutdown(); + for (auto& desc : info.descriptors_) { + if (desc) + desc->Shutdown(); + } } if (pipeline_layout_ != VK_NULL_HANDLE) |