Allow to override some structure member encoding
We have to special-case the VkWriteDescriptorSet encoding:
Currently it is generated as:
static inline void
vn_encode_VkWriteDescriptorSet_self(struct vn_cs_encoder *enc, const VkWriteDescriptorSet *val)
{
/* skip val->{sType,pNext} */
vn_encode_VkDescriptorSet(enc, &val->dstSet);
vn_encode_uint32_t(enc, &val->dstBinding);
vn_encode_uint32_t(enc, &val->dstArrayElement);
vn_encode_uint32_t(enc, &val->descriptorCount);
vn_encode_VkDescriptorType(enc, &val->descriptorType);
if (val->pImageInfo) {
vn_encode_array_size(enc, val->descriptorCount);
for (uint32_t i = 0; i < val->descriptorCount; i++)
vn_encode_VkDescriptorImageInfo(enc, &val->pImageInfo[i]);
} else {
vn_encode_array_size(enc, 0);
}
if (val->pBufferInfo) {
vn_encode_array_size(enc, val->descriptorCount);
for (uint32_t i = 0; i < val->descriptorCount; i++)
vn_encode_VkDescriptorBufferInfo(enc, &val->pBufferInfo[i]);
} else {
vn_encode_array_size(enc, 0);
}
if (val->pTexelBufferView) {
vn_encode_array_size(enc, val->descriptorCount);
for (uint32_t i = 0; i < val->descriptorCount; i++)
vn_encode_VkBufferView(enc, &val->pTexelBufferView[i]);
} else {
vn_encode_array_size(enc, 0);
}
}
The CTS is currently producing this structure without zero-ing its fields leading to dangling pointers for pImageInfo, pBufferInfo or pTexelBufferView. We need to tighten the generation with a more custom as these fields are behaving like unions (pBufferInfo is only valid for a limited subset defined by descriptorType)