diff options
Diffstat (limited to 'serialize.c')
-rw-r--r-- | serialize.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/serialize.c b/serialize.c index 14a296f..f17f4aa 100644 --- a/serialize.c +++ b/serialize.c @@ -548,10 +548,14 @@ static void serialize_viewport_state(const VkPipelineViewportStateCreateInfo *pInfo, struct blob *metadata) { + if (pInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO) { + blob_write_uint32(metadata, VK_STRUCTURE_TYPE_MAX_ENUM); + return; + } + bool has_viewports = pInfo->pViewports ? true : false; bool has_scissors = pInfo->pScissors ? true : false; - assert(pInfo->sType == VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO); blob_write_uint32(metadata, pInfo->sType); blob_write_uint32(metadata, pInfo->viewportCount); @@ -578,6 +582,10 @@ deserialize_viewport_state(struct pipeline_info *pipeline, VkPipelineViewportStateCreateInfo *pInfo = &pipeline->viewportState; pInfo->sType = blob_read_uint32(metadata); + if (pInfo->sType == VK_STRUCTURE_TYPE_MAX_ENUM) { + return true; + } + assert(pInfo->sType == VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO); pInfo->viewportCount = blob_read_uint32(metadata); @@ -645,9 +653,13 @@ static void serialize_multisample_state(const VkPipelineMultisampleStateCreateInfo *pInfo, struct blob *metadata) { + if (pInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO) { + blob_write_uint32(metadata, VK_STRUCTURE_TYPE_MAX_ENUM); + return; + } + bool has_sample_mask = pInfo->pSampleMask ? true : false; - assert(pInfo->sType == VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO); blob_write_uint32(metadata, pInfo->sType); blob_write_uint32(metadata, pInfo->rasterizationSamples); @@ -673,6 +685,10 @@ deserialize_multisample_state(struct pipeline_info *pipeline, VkPipelineMultisampleStateCreateInfo *pInfo = &pipeline->multisampleState; pInfo->sType = blob_read_uint32(metadata); + if (pInfo->sType == VK_STRUCTURE_TYPE_MAX_ENUM) { + return true; + } + assert(pInfo->sType == VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO); pInfo->rasterizationSamples = blob_read_uint32(metadata); @@ -697,7 +713,11 @@ static void serialize_depth_stencil_state(const VkPipelineDepthStencilStateCreateInfo *pInfo, struct blob *metadata) { - assert(pInfo->sType == VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO); + if (pInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO) { + blob_write_uint32(metadata, VK_STRUCTURE_TYPE_MAX_ENUM); + return; + } + blob_write_uint32(metadata, pInfo->sType); blob_write_uint32(metadata, pInfo->depthTestEnable); @@ -720,6 +740,10 @@ deserialize_depth_stencil_state(struct pipeline_info *pipeline, VkPipelineDepthStencilStateCreateInfo *pInfo = &pipeline->depthStencilState; pInfo->sType = blob_read_uint32(metadata); + if (pInfo->sType == VK_STRUCTURE_TYPE_MAX_ENUM) { + return true; + } + assert(pInfo->sType == VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO); pInfo->depthTestEnable = blob_read_uint32(metadata); |