Fix EXT_inline_uniform_block when using push descriptor sets

This commit is contained in:
Michael Barriault 2019-12-26 14:02:43 -03:30
parent 9e09ece372
commit 2ccfb29998

View File

@ -253,6 +253,25 @@ void MVKCmdPushDescriptorSet::setContent(VkPipelineBindPoint pipelineBindPoint,
std::copy_n(descWrite.pTexelBufferView, descWrite.descriptorCount, pNewTexelBufferView);
descWrite.pTexelBufferView = pNewTexelBufferView;
}
if (getDevice()->_enabledExtensions.vk_EXT_inline_uniform_block.enabled) {
const VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock = nullptr;
for (auto* next = (VkWriteDescriptorSetInlineUniformBlockEXT*)descWrite.pNext; next; next = (VkWriteDescriptorSetInlineUniformBlockEXT*)next->pNext)
{
switch (next->sType) {
case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT: {
pInlineUniformBlock = next;
break;
}
default:
break;
}
}
if (pInlineUniformBlock != nullptr) {
auto *pNewInlineUniformBlock = new VkWriteDescriptorSetInlineUniformBlockEXT(*pInlineUniformBlock);
pNewInlineUniformBlock->pNext = nullptr; // clear pNext just in case, no other extensions are supported at this time
descWrite.pNext = pNewInlineUniformBlock;
}
}
}
// Validate by encoding on a null encoder
@ -276,6 +295,22 @@ void MVKCmdPushDescriptorSet::clearDescriptorWrites() {
if (descWrite.pImageInfo) delete[] descWrite.pImageInfo;
if (descWrite.pBufferInfo) delete[] descWrite.pBufferInfo;
if (descWrite.pTexelBufferView) delete[] descWrite.pTexelBufferView;
if (getDevice()->_enabledExtensions.vk_EXT_inline_uniform_block.enabled) {
const VkWriteDescriptorSetInlineUniformBlockEXT* pInlineUniformBlock = nullptr;
for (auto* next = (VkWriteDescriptorSetInlineUniformBlockEXT*)descWrite.pNext; next; next = (VkWriteDescriptorSetInlineUniformBlockEXT*)next->pNext)
{
switch (next->sType) {
case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT: {
pInlineUniformBlock = next;
break;
}
default:
break;
}
}
if (pInlineUniformBlock != nullptr)
delete pInlineUniformBlock;
}
}
_descriptorWrites.clear();
}