Extension check in vkCreateDescriptorSetLayout
dEQP random tests sometimes add a struct of type:
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT
This cl handles this case gracefully.
Bug b/123244275 b/132185385
Change-Id: I2e0d1af058c33e4014e3ee0e544a95ebf42c9db5
Tests: dEQP-VK.binding_model.descriptorset_random.*
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/30789
Presubmit-Ready: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Chris Forbes <chrisforbes@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 76dbb1d..d64127e 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -1155,9 +1155,22 @@
TRACE("(VkDevice device = %p, const VkDescriptorSetLayoutCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkDescriptorSetLayout* pSetLayout = %p)",
device, pCreateInfo, pAllocator, pSetLayout);
- if(pCreateInfo->pNext)
+ const VkBaseInStructure* extensionCreateInfo = reinterpret_cast<const VkBaseInStructure*>(pCreateInfo->pNext);
+
+ while(extensionCreateInfo)
{
- UNIMPLEMENTED("pCreateInfo->pNext");
+ switch(extensionCreateInfo->sType)
+ {
+ case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT:
+ ASSERT(!HasExtensionProperty(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, deviceExtensionProperties,
+ sizeof(deviceExtensionProperties) / sizeof(deviceExtensionProperties[0])));
+ break;
+ default:
+ UNIMPLEMENTED("extensionCreateInfo->sType");
+ break;
+ }
+
+ extensionCreateInfo = extensionCreateInfo->pNext;
}
return vk::DescriptorSetLayout::Create(pAllocator, pCreateInfo, pSetLayout);