From b3029b6ddf3d60e29536b6afa98da57239d2038d Mon Sep 17 00:00:00 2001 From: baldurk Date: Sun, 27 Dec 2015 12:48:50 +0100 Subject: [PATCH] Changed command buffers to be handled properly as pooled objects --- renderdoc/driver/vulkan/vk_manager.h | 6 ++++++ renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp | 9 ++++++++- renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp | 11 ----------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_manager.h b/renderdoc/driver/vulkan/vk_manager.h index 59a063821..7ab1374e1 100644 --- a/renderdoc/driver/vulkan/vk_manager.h +++ b/renderdoc/driver/vulkan/vk_manager.h @@ -169,6 +169,12 @@ class VulkanResourceManager : public ResourceManagerbakedCommands) + { + record->bakedCommands->Delete(this); + record->bakedCommands = NULL; + } if(record->pool) { diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index a8fbc205c..99f8c11de 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -239,7 +239,14 @@ VkResult WrappedVulkan::vkAllocateCommandBuffers( record->bakedCommands = NULL; - record->AddParent(GetRecord(pAllocateInfo->commandPool)); + record->pool = GetRecord(pAllocateInfo->commandPool); + record->AddParent(record->pool); + + { + record->pool->LockChunks(); + record->pool->pooledChildren.push_back(record); + record->pool->UnlockChunks(); + } // we don't serialise this as we never create this command buffer directly. // Instead we create a command buffer for each baked list that we find. diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index 9ed1758be..ef057feee 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -103,17 +103,6 @@ void WrappedVulkan::vkFreeCommandBuffers(VkDevice device, VkCommandPool commandP { WrappedVkDispRes *wrapped = (WrappedVkDispRes *)GetWrapped(pCommandBuffers[c]); - if(wrapped->record) - { - if(wrapped->record->bakedCommands) - { - wrapped->record->bakedCommands->Delete(GetResourceManager()); - wrapped->record->bakedCommands = NULL; - } - wrapped->record->Delete(GetResourceManager()); - wrapped->record = NULL; - } - VkCommandBuffer unwrapped = wrapped->real.As(); GetResourceManager()->ReleaseWrappedResource(pCommandBuffers[c]);