From d1a80c6657afcd3c53c778f3487197f455cfd79f Mon Sep 17 00:00:00 2001 From: GregF Date: Tue, 13 Oct 2015 14:04:02 -0600 Subject: [PATCH] Add Deserialise support for all objects created with SerialiseComplexArray and SerialiseOptionalObject. --- renderdoc/driver/vulkan/vk_common.cpp | 135 +++++++++++++++++- .../vulkan/wrappers/vk_descriptor_funcs.cpp | 4 +- .../vulkan/wrappers/vk_device_funcs.cpp | 1 - .../driver/vulkan/wrappers/vk_misc_funcs.cpp | 4 +- .../vulkan/wrappers/vk_shader_funcs.cpp | 2 +- 5 files changed, 137 insertions(+), 9 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_common.cpp b/renderdoc/driver/vulkan/vk_common.cpp index c5f3f24b8..17de62928 100644 --- a/renderdoc/driver/vulkan/vk_common.cpp +++ b/renderdoc/driver/vulkan/vk_common.cpp @@ -2225,8 +2225,11 @@ Serialiser::Deserialise::~Deserialise() { if(m_Mode == READING) { + RDCASSERT(pNext == NULL); // otherwise delete + delete [] pRequestedQueues; delete ppEnabledExtensionNames; delete ppEnabledLayerNames; + delete pEnabledFeatures; } } @@ -2329,6 +2332,16 @@ void Serialiser::Serialise(const char *name, VkFramebufferCreateInfo &el) SerialiseObject(VkImageView, "pAttachments", attaches[i]); } +template<> +Serialiser::Deserialise::~Deserialise() +{ + if(m_Mode == READING) + { + RDCASSERT(pNext == NULL); // otherwise delete + delete [] pAttachments; + } +} + template<> void Serialiser::Serialise(const char *name, VkAttachmentDescription &el) { @@ -2414,6 +2427,34 @@ void Serialiser::Serialise(const char *name, VkRenderPassCreateInfo &el) SerialiseComplexArray("pDependencies", (VkSubpassDependency *&)el.pDependencies, el.dependencyCount); } +template<> +Serialiser::Deserialise::~Deserialise() +{ + if(m_Mode == READING) + { + RDCASSERT(pNext == NULL); // otherwise delete + for (uint32_t i=0; i void Serialiser::Serialise(const char *name, VkRenderPassBeginInfo &el) { @@ -2845,7 +2886,11 @@ template<> Serialiser::Deserialise::~Deserialise() { if(m_Mode == READING) - delete pSetLayouts; + { + RDCASSERT(pNext == NULL); // otherwise delete + delete [] pSetLayouts; + delete [] pPushConstantRanges; + } } template<> @@ -3030,6 +3075,69 @@ void Serialiser::Serialise(const char *name, VkGraphicsPipelineCreateInfo &el) SerialiseComplexArray("pStages", (VkPipelineShaderStageCreateInfo *&)el.pStages, el.stageCount); } +template<> +Serialiser::Deserialise::~Deserialise() +{ + if(m_Mode == READING) + { + RDCASSERT(pNext == NULL); // otherwise delete + if (pVertexInputState) + { + RDCASSERT(pVertexInputState->pNext == NULL); // otherwise delete + delete pVertexInputState->pVertexBindingDescriptions; + delete pVertexInputState->pVertexAttributeDescriptions; + delete pVertexInputState; + } + if (pInputAssemblyState) + { + RDCASSERT(pInputAssemblyState->pNext == NULL); // otherwise delete + delete pInputAssemblyState; + } + if (pTessellationState) + { + RDCASSERT(pTessellationState->pNext == NULL); // otherwise delete + delete pTessellationState; + } + if (pViewportState) + { + RDCASSERT(pViewportState->pNext == NULL); // otherwise delete + delete pViewportState; + } + if (pRasterState) + { + RDCASSERT(pRasterState->pNext == NULL); // otherwise delete + delete pRasterState; + } + if (pMultisampleState) + { + RDCASSERT(pMultisampleState->pNext == NULL); // otherwise delete + delete pMultisampleState; + } + if (pDepthStencilState) + { + RDCASSERT(pDepthStencilState->pNext == NULL); // otherwise delete + delete pDepthStencilState; + } + if (pColorBlendState) + { + RDCASSERT(pColorBlendState->pNext == NULL); // otherwise delete + delete [] pColorBlendState->pAttachments; + delete pColorBlendState; + } + for (uint32_t i=0; ipData; + delete [] pStages[i].pSpecializationInfo->pMap; + delete pStages[i].pSpecializationInfo; + } + } + delete [] pStages; + } +} + template<> void Serialiser::Serialise(const char *name, VkComputePipelineCreateInfo &el) { @@ -3069,6 +3177,16 @@ void Serialiser::Serialise(const char *name, VkDescriptorPoolCreateInfo &el) SerialiseComplexArray("pTypeCount", (VkDescriptorTypeCount*&)el.pTypeCount, el.count); } +template<> +Serialiser::Deserialise::~Deserialise() +{ + if(m_Mode == READING) + { + RDCASSERT(pNext == NULL); // otherwise delete + delete [] pTypeCount; + } +} + template<> void Serialiser::Serialise(const char *name, VkDescriptorInfo &el) { @@ -3100,6 +3218,16 @@ void Serialiser::Serialise(const char *name, VkWriteDescriptorSet &el) SerialiseComplexArray("pDescriptors", (VkDescriptorInfo*&)el.pDescriptors, el.count); } +template<> +Serialiser::Deserialise::~Deserialise() +{ + if(m_Mode == READING) + { + RDCASSERT(pNext == NULL); // otherwise delete + delete [] pDescriptors; + } +} + template<> void Serialiser::Serialise(const char *name, VkCopyDescriptorSet &el) { @@ -3176,11 +3304,12 @@ Serialiser::Deserialise::~Deserialise() { if(m_Mode == READING) { + RDCASSERT(pNext == NULL); // otherwise delete for (uint32_t i=0; i