From 494af5a9f4ea03a9d069d612a7c278cdbd8e4d4e Mon Sep 17 00:00:00 2001 From: GregF Date: Tue, 13 Oct 2015 18:26:42 -0600 Subject: [PATCH] Add Deserialise support for object created with SerialiseBuffer. --- renderdoc/driver/vulkan/vk_common.cpp | 20 +++++++++++++++++++ .../vulkan/wrappers/vk_shader_funcs.cpp | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_common.cpp b/renderdoc/driver/vulkan/vk_common.cpp index 8e1615775..2b61aad58 100644 --- a/renderdoc/driver/vulkan/vk_common.cpp +++ b/renderdoc/driver/vulkan/vk_common.cpp @@ -2888,6 +2888,16 @@ void Serialiser::Serialise(const char *name, VkPipelineCacheCreateInfo &el) el.maxSize = (size_t)maxSize; } +template<> +Serialiser::Deserialise::~Deserialise() +{ + if(m_Mode == READING) + { + RDCASSERT(pNext == NULL); // otherwise delete + delete [] (byte *)initialData; + } +} + template<> void Serialiser::Serialise(const char *name, VkPipelineLayoutCreateInfo &el) { @@ -2944,6 +2954,16 @@ void Serialiser::Serialise(const char *name, VkShaderModuleCreateInfo &el) Serialise("flags", el.flags); } +template<> +Serialiser::Deserialise::~Deserialise() +{ + if(m_Mode == READING) + { + RDCASSERT(pNext == NULL); // otherwise delete + delete [] (byte *)pCode; + } +} + template<> void Serialiser::Serialise(const char *name, VkShaderCreateInfo &el) { diff --git a/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp index 3e8d78da6..45a28772b 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp @@ -114,7 +114,7 @@ bool WrappedVulkan::Serialise_vkCreateShaderModule( VkShaderModule* pShaderModule) { SERIALISE_ELEMENT(ResourceId, devId, GetResID(device)); - SERIALISE_ELEMENT(VkShaderModuleCreateInfo, info, *pCreateInfo); + SERIALISE_ELEMENT_CLASS(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(VkPipelineCacheCreateInfo, info, *pCreateInfo); + SERIALISE_ELEMENT_CLASS(VkPipelineCacheCreateInfo, info, *pCreateInfo); SERIALISE_ELEMENT(ResourceId, id, GetResID(*pPipelineCache)); if(m_State == READING)