Fix vkUpdateDescriptorSetWithTemplate() for inline block descriptors.

Wrap incoming data in VkWriteDescriptorSetInlineUniformBlock
before passing to MVKInlineUniformBlockDescriptor::write().
This commit is contained in:
Bill Hollings 2022-07-26 16:57:47 -04:00
parent b88c94a651
commit 85c4b5c680
2 changed files with 13 additions and 0 deletions

View File

@ -28,6 +28,7 @@ Released TBD
- Check `MTLDevice` to enable support for `VK_KHR_fragment_shader_barycentric`
and `VK_NV_fragment_shader_barycentric` extensions.
- Fix query pool wait block when query is not encoded to be written to.
- Fix `vkUpdateDescriptorSetWithTemplate()` for inline block descriptors.
- Ignore sampler update in descriptor set bindings that use immutable samplers.
- Update `VK_MVK_MOLTENVK_SPEC_VERSION` to version `35`.

View File

@ -924,6 +924,8 @@ void mvkUpdateDescriptorSets(uint32_t writeCount,
// For inline block create a temp buffer of descCnt bytes to hold data during copy.
uint8_t dstBuffer[descCnt];
VkWriteDescriptorSetInlineUniformBlockEXT inlineUniformBlock;
inlineUniformBlock.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK;
inlineUniformBlock.pNext = nullptr;
inlineUniformBlock.pData = dstBuffer;
inlineUniformBlock.dataSize = descCnt;
@ -953,6 +955,16 @@ void mvkUpdateDescriptorSetWithTemplate(VkDescriptorSet descriptorSet,
for (uint32_t i = 0; i < pTemplate->getNumberOfEntries(); i++) {
const VkDescriptorUpdateTemplateEntryKHR* pEntry = pTemplate->getEntry(i);
const void* pCurData = (const char*)pData + pEntry->offset;
// For inline block, wrap the raw data in in inline update struct.
VkWriteDescriptorSetInlineUniformBlockEXT inlineUniformBlock;
if (pEntry->descriptorType == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT) {
inlineUniformBlock.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK;
inlineUniformBlock.pNext = nullptr;
inlineUniformBlock.pData = pCurData;
inlineUniformBlock.dataSize = pEntry->descriptorCount;
pCurData = &inlineUniformBlock;
}
dstSet->write(pEntry, pEntry->stride, pCurData);
}
}