Fix up deserialise functions (delete/cleanup allocated arrays on replay)

This commit is contained in:
baldurk
2016-02-07 18:48:14 +01:00
parent 8cc0c10a00
commit 50195131cc
2 changed files with 38 additions and 52 deletions
+36 -52
View File
@@ -2754,6 +2754,8 @@ void Serialiser::Deserialise(const VkDeviceCreateInfo* const el) const
if(m_Mode == READING)
{
RDCASSERT(el->pNext == NULL); // otherwise delete
for(uint32_t i=0; i < el->queueCreateInfoCount; i++)
delete[] el->pQueueCreateInfos[i].pQueuePriorities;
delete [] el->pQueueCreateInfos;
delete el->ppEnabledExtensionNames;
delete el->ppEnabledLayerNames;
@@ -2872,16 +2874,6 @@ void Serialiser::Serialise(const char *name, VkSparseBufferMemoryBindInfo &el)
SerialiseComplexArray("pBinds", (VkSparseMemoryBind *&)el.pBinds, el.bindCount);
}
template<>
void Serialiser::Deserialise(const VkSparseBufferMemoryBindInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] el->pBinds;
}
}
template<>
void Serialiser::Serialise(const char *name, VkSparseImageOpaqueMemoryBindInfo &el)
{
@@ -2891,16 +2883,6 @@ void Serialiser::Serialise(const char *name, VkSparseImageOpaqueMemoryBindInfo &
SerialiseComplexArray("pBinds", (VkSparseMemoryBind *&)el.pBinds, el.bindCount);
}
template<>
void Serialiser::Deserialise(const VkSparseImageOpaqueMemoryBindInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] el->pBinds;
}
}
template<>
void Serialiser::Serialise(const char *name, VkSparseImageMemoryBind &el)
{
@@ -2956,7 +2938,11 @@ void Serialiser::Deserialise(const VkBindSparseInfo* const el) const
{
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] el->pWaitSemaphores;
for(uint32_t i=0; i < el->bufferBindCount; i++)
delete[] el->pBufferBinds[i].pBinds;
delete [] el->pBufferBinds;
for(uint32_t i=0; i < el->imageOpaqueBindCount; i++)
delete[] el->pImageOpaqueBinds[i].pBinds;
delete [] el->pImageOpaqueBinds;
delete [] el->pImageBinds;
delete [] el->pSignalSemaphores;
@@ -3078,24 +3064,16 @@ void Serialiser::Deserialise(const VkRenderPassCreateInfo* const el) const
if(m_Mode == READING)
{
RDCASSERT(el->pNext == NULL); // otherwise delete
for (uint32_t i=0; i<el->attachmentCount; i++)
{
RDCASSERT(el->pAttachments[i].pNext == NULL); // otherwise delete
}
delete [] el->pAttachments;
for (uint32_t i=0; i<el->subpassCount; i++)
{
RDCASSERT(el->pSubpasses[i].pNext == NULL); // otherwise delete
delete el->pSubpasses[i].pInputAttachments;
delete el->pSubpasses[i].pColorAttachments;
delete el->pSubpasses[i].pResolveAttachments;
delete el->pSubpasses[i].pPreserveAttachments;
delete el->pSubpasses[i].pDepthStencilAttachment;
delete[] el->pSubpasses[i].pInputAttachments;
delete[] el->pSubpasses[i].pColorAttachments;
delete[] el->pSubpasses[i].pResolveAttachments;
if(el->pSubpasses[i].pPreserveAttachments) delete[] el->pSubpasses[i].pPreserveAttachments;
}
delete [] el->pSubpasses;
for (uint32_t i=0; i<el->dependencyCount; i++)
{
RDCASSERT(el->pDependencies[i].pNext == NULL); // otherwise delete
}
delete [] el->pDependencies;
}
}
@@ -3517,17 +3495,6 @@ void Serialiser::Serialise(const char *name, VkSpecializationInfo &el)
SerialiseComplexArray("pMapEntries", (VkSpecializationMapEntry *&)el.pMapEntries, el.mapEntryCount);
}
template<>
void Serialiser::Deserialise(const VkSpecializationInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] (byte *)(el->pData);
delete [] el->pMapEntries;
}
}
template<>
void Serialiser::Serialise(const char *name, VkPipelineCacheCreateInfo &el)
{
@@ -3767,8 +3734,8 @@ void Serialiser::Deserialise(const VkGraphicsPipelineCreateInfo* const el) const
if (el->pViewportState)
{
RDCASSERT(el->pViewportState->pNext == NULL); // otherwise delete
delete [] el->pViewportState->pViewports;
delete [] el->pViewportState->pScissors;
if(el->pViewportState->pViewports) delete [] el->pViewportState->pViewports;
if(el->pViewportState->pScissors) delete [] el->pViewportState->pScissors;
delete el->pViewportState;
}
if (el->pRasterizationState)
@@ -3796,7 +3763,7 @@ void Serialiser::Deserialise(const VkGraphicsPipelineCreateInfo* const el) const
if (el->pDynamicState)
{
RDCASSERT(el->pDynamicState->pNext == NULL); // otherwise delete
delete [] el->pDynamicState->pDynamicStates;
if(el->pDynamicState->pDynamicStates) delete [] el->pDynamicState->pDynamicStates;
delete el->pDynamicState;
}
for (uint32_t i=0; i<el->stageCount; i++)
@@ -3805,7 +3772,7 @@ void Serialiser::Deserialise(const VkGraphicsPipelineCreateInfo* const el) const
if (el->pStages[i].pSpecializationInfo)
{
delete [] (byte *)(el->pStages[i].pSpecializationInfo->pData);
delete [] el->pStages[i].pSpecializationInfo->pMap;
delete [] el->pStages[i].pSpecializationInfo->pMapEntries;
delete el->pStages[i].pSpecializationInfo;
}
}
@@ -3828,6 +3795,22 @@ void Serialiser::Serialise(const char *name, VkComputePipelineCreateInfo &el)
Serialise("basePipelineIndex", el.basePipelineIndex);
}
template<>
void Serialiser::Deserialise(const VkComputePipelineCreateInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(el->pNext == NULL); // otherwise delete
RDCASSERT(el->stage.pNext == NULL); // otherwise delete
if (el->stage.pSpecializationInfo)
{
delete [] (byte *)(el->stage.pSpecializationInfo->pData);
delete [] el->stage.pSpecializationInfo->pMapEntries;
delete el->stage.pSpecializationInfo;
}
}
}
template<>
void Serialiser::Serialise(const char *name, VkDescriptorPoolSize &el)
{
@@ -3939,9 +3922,9 @@ void Serialiser::Deserialise(const VkWriteDescriptorSet* const el) const
if(m_Mode == READING)
{
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] el->pImageInfo;
delete [] el->pBufferInfo;
delete [] el->pTexelBufferView;
if(el->pImageInfo) delete[] el->pImageInfo;
if(el->pBufferInfo) delete[] el->pBufferInfo;
if(el->pTexelBufferView) delete[] el->pTexelBufferView;
}
}
@@ -4023,7 +4006,8 @@ void Serialiser::Deserialise(const VkDescriptorSetLayoutCreateInfo* const el) co
{
RDCASSERT(el->pNext == NULL); // otherwise delete
for (uint32_t i=0; i<el->bindingCount; i++)
delete [] el->pBinding[i].pImmutableSamplers;
if(el->pBinding[i].pImmutableSamplers)
delete[] el->pBinding[i].pImmutableSamplers;
delete [] el->pBinding;
}
}
+2
View File
@@ -127,6 +127,7 @@ template<> void Serialiser::Serialise(const char *name, VkSwapchainCreateInfoKHR
template<> void Serialiser::Deserialise(const VkDeviceCreateInfo* const el) const;
template<> void Serialiser::Deserialise(const VkBufferCreateInfo* const el) const;
template<> void Serialiser::Deserialise(const VkImageCreateInfo* const el) const;
template<> void Serialiser::Deserialise(const VkBindSparseInfo* const el) const;
template<> void Serialiser::Deserialise(const VkFramebufferCreateInfo* const el) const;
template<> void Serialiser::Deserialise(const VkRenderPassCreateInfo* const el) const;
template<> void Serialiser::Deserialise(const VkRenderPassBeginInfo* const el) const;
@@ -134,6 +135,7 @@ template<> void Serialiser::Deserialise(const VkPipelineCacheCreateInfo* const e
template<> void Serialiser::Deserialise(const VkPipelineLayoutCreateInfo* const el) const;
template<> void Serialiser::Deserialise(const VkShaderModuleCreateInfo* const el) const;
template<> void Serialiser::Deserialise(const VkGraphicsPipelineCreateInfo* const el) const;
template<> void Serialiser::Deserialise(const VkComputePipelineCreateInfo* const el) const;
template<> void Serialiser::Deserialise(const VkDescriptorPoolCreateInfo* const el) const;
template<> void Serialiser::Deserialise(const VkWriteDescriptorSet* const el) const;
template<> void Serialiser::Deserialise(const VkDescriptorSetLayoutCreateInfo* const el) const;