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`
|
- Check `MTLDevice` to enable support for `VK_KHR_fragment_shader_barycentric`
|
||||||
and `VK_NV_fragment_shader_barycentric` extensions.
|
and `VK_NV_fragment_shader_barycentric` extensions.
|
||||||
- Fix query pool wait block when query is not encoded to be written to.
|
- 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.
|
- Ignore sampler update in descriptor set bindings that use immutable samplers.
|
||||||
- Update `VK_MVK_MOLTENVK_SPEC_VERSION` to version `35`.
|
- 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.
|
// For inline block create a temp buffer of descCnt bytes to hold data during copy.
|
||||||
uint8_t dstBuffer[descCnt];
|
uint8_t dstBuffer[descCnt];
|
||||||
VkWriteDescriptorSetInlineUniformBlockEXT inlineUniformBlock;
|
VkWriteDescriptorSetInlineUniformBlockEXT inlineUniformBlock;
|
||||||
|
inlineUniformBlock.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK;
|
||||||
|
inlineUniformBlock.pNext = nullptr;
|
||||||
inlineUniformBlock.pData = dstBuffer;
|
inlineUniformBlock.pData = dstBuffer;
|
||||||
inlineUniformBlock.dataSize = descCnt;
|
inlineUniformBlock.dataSize = descCnt;
|
||||||
|
|
||||||
@ -953,6 +955,16 @@ void mvkUpdateDescriptorSetWithTemplate(VkDescriptorSet descriptorSet,
|
|||||||
for (uint32_t i = 0; i < pTemplate->getNumberOfEntries(); i++) {
|
for (uint32_t i = 0; i < pTemplate->getNumberOfEntries(); i++) {
|
||||||
const VkDescriptorUpdateTemplateEntryKHR* pEntry = pTemplate->getEntry(i);
|
const VkDescriptorUpdateTemplateEntryKHR* pEntry = pTemplate->getEntry(i);
|
||||||
const void* pCurData = (const char*)pData + pEntry->offset;
|
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);
|
dstSet->write(pEntry, pEntry->stride, pCurData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user