Fix vkUpdateDescriptorSetWithTemplate() for inline block descriptors.
Wrap incoming data in VkWriteDescriptorSetInlineUniformBlock before passing to MVKInlineUniformBlockDescriptor::write().
This commit is contained in:
parent
b88c94a651
commit
85c4b5c680
@ -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`.
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user