diff --git a/renderdoc/driver/vulkan/vk_common.cpp b/renderdoc/driver/vulkan/vk_common.cpp index 132d430bb..816009817 100644 --- a/renderdoc/driver/vulkan/vk_common.cpp +++ b/renderdoc/driver/vulkan/vk_common.cpp @@ -2221,7 +2221,7 @@ void Serialiser::Serialise(const char *name, VkDeviceCreateInfo &el) //template <> class Serialiser::Deserialise; 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::~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::~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::~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::~Deserialise() +void Serialiser::Deserialise(const VkRenderPassCreateInfo* const el) const { if(m_Mode == READING) { - RDCASSERT(pNext == NULL); // otherwise delete - for (uint32_t i=0; ipNext == NULL); // otherwise delete + for (uint32_t i=0; iattachmentCount; i++) { - RDCASSERT(pAttachments[i].pNext == NULL); // otherwise delete + RDCASSERT(el->pAttachments[i].pNext == NULL); // otherwise delete } - delete [] pAttachments; - for (uint32_t i=0; ipAttachments; + for (uint32_t i=0; isubpassCount; 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; ipSubpasses; + for (uint32_t i=0; idependencyCount; 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::~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::~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::~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::~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::~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; istageCount; 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::~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::~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::~Deserialise() +void Serialiser::Deserialise(const VkDescriptorSetLayoutCreateInfo* const el) const { if(m_Mode == READING) { - RDCASSERT(pNext == NULL); // otherwise delete - for (uint32_t i=0; ipNext == NULL); // otherwise delete + for (uint32_t i=0; icount; i++) { - delete [] pBinding[i].pImmutableSamplers; + delete [] el->pBinding[i].pImmutableSamplers; } - delete [] pBinding; + delete [] el->pBinding; } } diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 1e86bd8de..abf14a0dc 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -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; - -// template<> class Serialiser::Deserialise : VkDeviceCreateInfo; - -//template<> void Serialiser::Deserialize(const VkDeviceCreateInfo* const el) const; - #pragma region Chunks enum VulkanChunkType diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index b74cd37ae..31c0e2ee4 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -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) diff --git a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp index a8082aba7..95c3a3cb8 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp @@ -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 diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index d5694ee48..799c00955 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -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) diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index 473406a38..10a0fff47 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -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) diff --git a/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp index 45a28772b..a54acd404 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp @@ -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) diff --git a/renderdoc/serialise/serialiser.h b/renderdoc/serialise/serialiser.h index 0d2e2347b..65a84b257 100644 --- a/renderdoc/serialise/serialiser.h +++ b/renderdoc/serialise/serialiser.h @@ -432,20 +432,8 @@ class Serialiser DebugPrint("%s: %s\n", name, ToStr::Get(el).c_str()); } - // object to serialise a single element - // used to instantiate destructors for structs - // with allocated members - template - class Deserialise : public T { - public: - Deserialise(T t) : T(t) {} - Deserialise() {} - virtual ~Deserialise() {} - Mode m_Mode; - }; - // function to deallocate members - template void Deserialize(const T* const el) const {} + template void Deserialise(const T* const el) const {} template void Serialise(const char *name, std::vector &el) @@ -775,7 +763,7 @@ template 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 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 name; if(m_State >= WRITING) { static_cast(name) = (inValue); name.m_Mode = Serialiser::WRITING; } else name.m_Mode = Serialiser::READING; GET_SERIALISER->Serialise(#name, static_cast(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]); } }