Finish move to Deserialise function; remove Deserialise class

This commit is contained in:
GregF
2016-02-07 18:43:24 +01:00
committed by baldurk
parent c3553d26a9
commit 38ebce536e
8 changed files with 106 additions and 125 deletions
+92 -92
View File
@@ -2221,7 +2221,7 @@ void Serialiser::Serialise(const char *name, VkDeviceCreateInfo &el)
//template <> class Serialiser::Deserialise<VkDeviceCreateInfo>;
template<>
void Serialiser::Deserialize(const VkDeviceCreateInfo* const el) const
void Serialiser::Deserialise(const VkDeviceCreateInfo* const el) const
{
if(m_Mode == READING)
{
@@ -2251,12 +2251,12 @@ void Serialiser::Serialise(const char *name, VkBufferCreateInfo &el)
}
template<>
Serialiser::Deserialise<VkBufferCreateInfo>::~Deserialise()
void Serialiser::Deserialise(const VkBufferCreateInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
delete [] pQueueFamilyIndices;
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] el->pQueueFamilyIndices;
}
}
@@ -2300,12 +2300,12 @@ void Serialiser::Serialise(const char *name, VkImageCreateInfo &el)
}
template<>
Serialiser::Deserialise<VkImageCreateInfo>::~Deserialise()
void Serialiser::Deserialise(const VkImageCreateInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
delete [] pQueueFamilyIndices;
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] el->pQueueFamilyIndices;
}
}
@@ -2353,12 +2353,12 @@ void Serialiser::Serialise(const char *name, VkFramebufferCreateInfo &el)
}
template<>
Serialiser::Deserialise<VkFramebufferCreateInfo>::~Deserialise()
void Serialiser::Deserialise(const VkFramebufferCreateInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
delete [] pAttachments;
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] el->pAttachments;
}
}
@@ -2448,30 +2448,30 @@ void Serialiser::Serialise(const char *name, VkRenderPassCreateInfo &el)
}
template<>
Serialiser::Deserialise<VkRenderPassCreateInfo>::~Deserialise()
void Serialiser::Deserialise(const VkRenderPassCreateInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
for (uint32_t i=0; i<attachmentCount; i++)
RDCASSERT(el->pNext == NULL); // otherwise delete
for (uint32_t i=0; i<el->attachmentCount; i++)
{
RDCASSERT(pAttachments[i].pNext == NULL); // otherwise delete
RDCASSERT(el->pAttachments[i].pNext == NULL); // otherwise delete
}
delete [] pAttachments;
for (uint32_t i=0; i<subpassCount; i++)
delete [] el->pAttachments;
for (uint32_t i=0; i<el->subpassCount; i++)
{
RDCASSERT(pSubpasses[i].pNext == NULL); // otherwise delete
delete pSubpasses[i].pInputAttachments;
delete pSubpasses[i].pColorAttachments;
delete pSubpasses[i].pResolveAttachments;
delete pSubpasses[i].pPreserveAttachments;
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 [] pSubpasses;
for (uint32_t i=0; i<dependencyCount; i++)
delete [] el->pSubpasses;
for (uint32_t i=0; i<el->dependencyCount; i++)
{
RDCASSERT(pDependencies[i].pNext == NULL); // otherwise delete
RDCASSERT(el->pDependencies[i].pNext == NULL); // otherwise delete
}
delete [] pDependencies;
delete [] el->pDependencies;
}
}
@@ -2494,12 +2494,12 @@ void Serialiser::Serialise(const char *name, VkRenderPassBeginInfo &el)
}
template<>
Serialiser::Deserialise<VkRenderPassBeginInfo>::~Deserialise()
void Serialiser::Deserialise(const VkRenderPassBeginInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
delete [] pClearValues;
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] el->pClearValues;
}
}
@@ -2889,12 +2889,12 @@ void Serialiser::Serialise(const char *name, VkPipelineCacheCreateInfo &el)
}
template<>
Serialiser::Deserialise<VkPipelineCacheCreateInfo>::~Deserialise()
void Serialiser::Deserialise(const VkPipelineCacheCreateInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
delete [] (byte *)initialData;
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] (byte *)(el->initialData);
}
}
@@ -2923,13 +2923,13 @@ void Serialiser::Serialise(const char *name, VkPipelineLayoutCreateInfo &el)
}
template<>
Serialiser::Deserialise<VkPipelineLayoutCreateInfo>::~Deserialise()
void Serialiser::Deserialise(const VkPipelineLayoutCreateInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
delete [] pSetLayouts;
delete [] pPushConstantRanges;
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] el->pSetLayouts;
delete [] el->pPushConstantRanges;
}
}
@@ -2955,12 +2955,12 @@ void Serialiser::Serialise(const char *name, VkShaderModuleCreateInfo &el)
}
template<>
Serialiser::Deserialise<VkShaderModuleCreateInfo>::~Deserialise()
void Serialiser::Deserialise(const VkShaderModuleCreateInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
delete [] (byte *)pCode;
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] (byte *)(el->pCode);
}
}
@@ -3126,74 +3126,74 @@ void Serialiser::Serialise(const char *name, VkGraphicsPipelineCreateInfo &el)
}
template<>
Serialiser::Deserialise<VkGraphicsPipelineCreateInfo>::~Deserialise()
void Serialiser::Deserialise(const VkGraphicsPipelineCreateInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
if (pVertexInputState)
RDCASSERT(el->pNext == NULL); // otherwise delete
if (el->pVertexInputState)
{
RDCASSERT(pVertexInputState->pNext == NULL); // otherwise delete
delete pVertexInputState->pVertexBindingDescriptions;
delete pVertexInputState->pVertexAttributeDescriptions;
delete pVertexInputState;
RDCASSERT(el->pVertexInputState->pNext == NULL); // otherwise delete
delete el->pVertexInputState->pVertexBindingDescriptions;
delete el->pVertexInputState->pVertexAttributeDescriptions;
delete el->pVertexInputState;
}
if (pInputAssemblyState)
if (el->pInputAssemblyState)
{
RDCASSERT(pInputAssemblyState->pNext == NULL); // otherwise delete
delete pInputAssemblyState;
RDCASSERT(el->pInputAssemblyState->pNext == NULL); // otherwise delete
delete el->pInputAssemblyState;
}
if (pTessellationState)
if (el->pTessellationState)
{
RDCASSERT(pTessellationState->pNext == NULL); // otherwise delete
delete pTessellationState;
RDCASSERT(el->pTessellationState->pNext == NULL); // otherwise delete
delete el->pTessellationState;
}
if (pViewportState)
if (el->pViewportState)
{
RDCASSERT(pViewportState->pNext == NULL); // otherwise delete
delete [] pViewportState->pViewports;
delete [] pViewportState->pScissors;
delete pViewportState;
RDCASSERT(el->pViewportState->pNext == NULL); // otherwise delete
delete [] el->pViewportState->pViewports;
delete [] el->pViewportState->pScissors;
delete el->pViewportState;
}
if (pRasterState)
if (el->pRasterState)
{
RDCASSERT(pRasterState->pNext == NULL); // otherwise delete
delete pRasterState;
RDCASSERT(el->pRasterState->pNext == NULL); // otherwise delete
delete el->pRasterState;
}
if (pMultisampleState)
if (el->pMultisampleState)
{
RDCASSERT(pMultisampleState->pNext == NULL); // otherwise delete
delete pMultisampleState->pSampleMask;
delete pMultisampleState;
RDCASSERT(el->pMultisampleState->pNext == NULL); // otherwise delete
delete el->pMultisampleState->pSampleMask;
delete el->pMultisampleState;
}
if (pDepthStencilState)
if (el->pDepthStencilState)
{
RDCASSERT(pDepthStencilState->pNext == NULL); // otherwise delete
delete pDepthStencilState;
RDCASSERT(el->pDepthStencilState->pNext == NULL); // otherwise delete
delete el->pDepthStencilState;
}
if (pColorBlendState)
if (el->pColorBlendState)
{
RDCASSERT(pColorBlendState->pNext == NULL); // otherwise delete
delete [] pColorBlendState->pAttachments;
delete pColorBlendState;
RDCASSERT(el->pColorBlendState->pNext == NULL); // otherwise delete
delete [] el->pColorBlendState->pAttachments;
delete el->pColorBlendState;
}
if (pDynamicState)
if (el->pDynamicState)
{
RDCASSERT(pDynamicState->pNext == NULL); // otherwise delete
delete [] pDynamicState->pDynamicStates;
delete pDynamicState;
RDCASSERT(el->pDynamicState->pNext == NULL); // otherwise delete
delete [] el->pDynamicState->pDynamicStates;
delete el->pDynamicState;
}
for (uint32_t i=0; i<stageCount; i++)
for (uint32_t i=0; i<el->stageCount; i++)
{
RDCASSERT(pStages[i].pNext == NULL); // otherwise delete
if (pStages[i].pSpecializationInfo)
RDCASSERT(el->pStages[i].pNext == NULL); // otherwise delete
if (el->pStages[i].pSpecializationInfo)
{
delete [] (byte *)pStages[i].pSpecializationInfo->pData;
delete [] pStages[i].pSpecializationInfo->pMap;
delete pStages[i].pSpecializationInfo;
delete [] (byte *)(el->pStages[i].pSpecializationInfo->pData);
delete [] el->pStages[i].pSpecializationInfo->pMap;
delete el->pStages[i].pSpecializationInfo;
}
}
delete [] pStages;
delete [] el->pStages;
}
}
@@ -3237,12 +3237,12 @@ void Serialiser::Serialise(const char *name, VkDescriptorPoolCreateInfo &el)
}
template<>
Serialiser::Deserialise<VkDescriptorPoolCreateInfo>::~Deserialise()
void Serialiser::Deserialise(const VkDescriptorPoolCreateInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
delete [] pTypeCount;
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] el->pTypeCount;
}
}
@@ -3278,12 +3278,12 @@ void Serialiser::Serialise(const char *name, VkWriteDescriptorSet &el)
}
template<>
Serialiser::Deserialise<VkWriteDescriptorSet>::~Deserialise()
void Serialiser::Deserialise(const VkWriteDescriptorSet* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
delete [] pDescriptors;
RDCASSERT(el->pNext == NULL); // otherwise delete
delete [] el->pDescriptors;
}
}
@@ -3359,16 +3359,16 @@ void Serialiser::Serialise(const char *name, VkDescriptorSetLayoutCreateInfo &el
}
template<>
Serialiser::Deserialise<VkDescriptorSetLayoutCreateInfo>::~Deserialise()
void Serialiser::Deserialise(const VkDescriptorSetLayoutCreateInfo* const el) const
{
if(m_Mode == READING)
{
RDCASSERT(pNext == NULL); // otherwise delete
for (uint32_t i=0; i<count; i++)
RDCASSERT(el->pNext == NULL); // otherwise delete
for (uint32_t i=0; i<el->count; i++)
{
delete [] pBinding[i].pImmutableSamplers;
delete [] el->pBinding[i].pImmutableSamplers;
}
delete [] pBinding;
delete [] el->pBinding;
}
}
-6
View File
@@ -133,12 +133,6 @@ template<> void Serialiser::Serialise(const char *name, VkImageResolve &el);
template<> void Serialiser::Serialise(const char *name, VkSwapchainCreateInfoKHR &el);
//template<> class Serialiser::Deserialise<VkDeviceCreateInfo>;
// template<> class Serialiser::Deserialise : VkDeviceCreateInfo;
//template<> void Serialiser::Deserialize(const VkDeviceCreateInfo* const el) const;
#pragma region Chunks
enum VulkanChunkType
@@ -517,7 +517,7 @@ bool WrappedVulkan::Serialise_vkCmdBeginRenderPass(
VkRenderPassContents contents)
{
SERIALISE_ELEMENT(ResourceId, cmdid, GetResID(cmdBuffer));
SERIALISE_ELEMENT_CLASS(VkRenderPassBeginInfo, beginInfo, *pRenderPassBegin);
SERIALISE_ELEMENT(VkRenderPassBeginInfo, beginInfo, *pRenderPassBegin);
SERIALISE_ELEMENT(VkRenderPassContents, cont, contents);
if(m_State < WRITING)
@@ -31,7 +31,7 @@ bool WrappedVulkan::Serialise_vkCreateDescriptorPool(
VkDescriptorPool* pDescriptorPool)
{
SERIALISE_ELEMENT(ResourceId, devId, GetResID(device));
SERIALISE_ELEMENT_CLASS(VkDescriptorPoolCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(VkDescriptorPoolCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(ResourceId, id, GetResID(*pDescriptorPool));
if(m_State == READING)
@@ -99,7 +99,7 @@ bool WrappedVulkan::Serialise_vkCreateDescriptorSetLayout(
VkDescriptorSetLayout* pSetLayout)
{
SERIALISE_ELEMENT(ResourceId, devId, GetResID(device));
SERIALISE_ELEMENT_CLASS(VkDescriptorSetLayoutCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(VkDescriptorSetLayoutCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(ResourceId, id, GetResID(*pSetLayout));
// this creation info is needed at capture time (for creating/updating descriptor set bindings)
@@ -337,7 +337,7 @@ bool WrappedVulkan::Serialise_vkUpdateDescriptorSets(
VkCopyDescriptorSet copyDesc;
if(writes)
{
SERIALISE_ELEMENT_CLASS(VkWriteDescriptorSet, w, *pDescriptorWrites);
SERIALISE_ELEMENT(VkWriteDescriptorSet, w, *pDescriptorWrites);
writeDesc = w;
}
else
@@ -367,7 +367,7 @@ bool WrappedVulkan::Serialise_vkCreateFramebuffer(
VkFramebuffer* pFramebuffer)
{
SERIALISE_ELEMENT(ResourceId, devId, GetResID(device));
SERIALISE_ELEMENT_CLASS(VkFramebufferCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(VkFramebufferCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(ResourceId, id, GetResID(*pFramebuffer));
if(m_State == READING)
@@ -558,7 +558,7 @@ bool WrappedVulkan::Serialise_vkCreateRenderPass(
VkRenderPass* pRenderPass)
{
SERIALISE_ELEMENT(ResourceId, devId, GetResID(device));
SERIALISE_ELEMENT_CLASS(VkRenderPassCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(VkRenderPassCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(ResourceId, id, GetResID(*pRenderPass));
if(m_State == READING)
@@ -511,7 +511,7 @@ bool WrappedVulkan::Serialise_vkCreateBuffer(
VkBuffer* pBuffer)
{
SERIALISE_ELEMENT(ResourceId, devId, GetResID(device));
SERIALISE_ELEMENT_CLASS(VkBufferCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(VkBufferCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(ResourceId, id, GetResID(*pBuffer));
if(m_State == READING)
@@ -654,7 +654,7 @@ bool WrappedVulkan::Serialise_vkCreateImage(
VkImage* pImage)
{
SERIALISE_ELEMENT(ResourceId, devId, GetResID(device));
SERIALISE_ELEMENT_CLASS(VkImageCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(VkImageCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(ResourceId, id, GetResID(*pImage));
if(m_State == READING)
@@ -34,7 +34,7 @@ bool WrappedVulkan::Serialise_vkCreatePipelineLayout(
VkPipelineLayout* pPipelineLayout)
{
SERIALISE_ELEMENT(ResourceId, devId, GetResID(device));
SERIALISE_ELEMENT_CLASS(VkPipelineLayoutCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(VkPipelineLayoutCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(ResourceId, id, GetResID(*pPipelineLayout));
if(m_State == READING)
@@ -114,7 +114,7 @@ bool WrappedVulkan::Serialise_vkCreateShaderModule(
VkShaderModule* pShaderModule)
{
SERIALISE_ELEMENT(ResourceId, devId, GetResID(device));
SERIALISE_ELEMENT_CLASS(VkShaderModuleCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(VkShaderModuleCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(ResourceId, id, GetResID(*pShaderModule));
if(m_State == READING)
@@ -267,7 +267,7 @@ bool WrappedVulkan::Serialise_vkCreatePipelineCache(
VkPipelineCache* pPipelineCache)
{
SERIALISE_ELEMENT(ResourceId, devId, GetResID(device));
SERIALISE_ELEMENT_CLASS(VkPipelineCacheCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(VkPipelineCacheCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(ResourceId, id, GetResID(*pPipelineCache));
if(m_State == READING)
@@ -337,7 +337,7 @@ bool WrappedVulkan::Serialise_vkCreateGraphicsPipelines(
{
SERIALISE_ELEMENT(ResourceId, devId, GetResID(device));
SERIALISE_ELEMENT(ResourceId, cacheId, GetResID(pipelineCache));
SERIALISE_ELEMENT_CLASS(VkGraphicsPipelineCreateInfo, info, *pCreateInfos);
SERIALISE_ELEMENT(VkGraphicsPipelineCreateInfo, info, *pCreateInfos);
SERIALISE_ELEMENT(ResourceId, id, GetResID(*pPipelines));
if(m_State == READING)
+2 -15
View File
@@ -432,20 +432,8 @@ class Serialiser
DebugPrint("%s: %s\n", name, ToStr::Get<T>(el).c_str());
}
// object to serialise a single element
// used to instantiate destructors for structs
// with allocated members
template<class T>
class Deserialise : public T {
public:
Deserialise(T t) : T(t) {}
Deserialise() {}
virtual ~Deserialise() {}
Mode m_Mode;
};
// function to deallocate members
template<class T> void Deserialize(const T* const el) const {}
template<class T> void Deserialise(const T* const el) const {}
template<typename X>
void Serialise(const char *name, std::vector<X> &el)
@@ -775,7 +763,7 @@ template<class T>
struct ScopedDeserialise
{
ScopedDeserialise(const Serialiser* const ser, const T* const t) : m_ser(ser), m_t(t) {}
~ScopedDeserialise() { m_ser->Deserialize(m_t); }
~ScopedDeserialise() { m_ser->Deserialise(m_t); }
const Serialiser* const m_ser;
const T* const m_t;
};
@@ -789,7 +777,6 @@ struct ScopedDeserialise
#define SCOPED_SERIALISE_SMALL_CONTEXT(n) ScopedContext scope(GET_SERIALISER, GetChunkName(n), n, true);
#define SERIALISE_ELEMENT(type, name, inValue) type name; ScopedDeserialise<type> CONCAT(deserialise_, name)(m_pSerialiser, &name); if(m_State >= WRITING) name = (inValue); GET_SERIALISER->Serialise(#name, name);
#define SERIALISE_ELEMENT_CLASS(type, name, inValue) Serialiser::Deserialise<type> name; if(m_State >= WRITING) { static_cast<type&>(name) = (inValue); name.m_Mode = Serialiser::WRITING; } else name.m_Mode = Serialiser::READING; GET_SERIALISER->Serialise(#name, static_cast<type&>(name));
#define SERIALISE_ELEMENT_OPT(type, name, inValue, Condition) type name = type(); if(Condition) { if(m_State >= WRITING) name = (inValue); GET_SERIALISER->Serialise(#name, name); }
#define SERIALISE_ELEMENT_ARR(type, name, inValues, count) type *name = new type[count]; for(size_t serialiseIdx=0; serialiseIdx < count; serialiseIdx++) { if(m_State >= WRITING) name[serialiseIdx] = (inValues)[serialiseIdx]; GET_SERIALISER->Serialise(#name, name[serialiseIdx]); }
#define SERIALISE_ELEMENT_ARR_OPT(type, name, inValues, count, Condition) type *name = NULL; if(Condition) { name = new type[count]; for(size_t serialiseIdx=0; serialiseIdx < count; serialiseIdx++) { if(m_State >= WRITING) name[serialiseIdx] = (inValues)[serialiseIdx]; GET_SERIALISER->Serialise(#name, name[serialiseIdx]); } }