From f5ed08eea1d8ffaf42b4e14e23318c6f0cabe0db Mon Sep 17 00:00:00 2001 From: Chip Davis Date: Fri, 19 Jul 2019 12:31:44 -0500 Subject: [PATCH] MVKDevice: Enable VK_EXT_scalar_block_layout features. --- MoltenVK/MoltenVK/GPUObjects/MVKDevice.h | 1 + MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h index 1b2cfa07..1a1282e3 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h @@ -616,6 +616,7 @@ public: const VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR _enabledUBOLayoutFeatures; const VkPhysicalDeviceVariablePointerFeatures _enabledVarPtrFeatures; const VkPhysicalDeviceHostQueryResetFeaturesEXT _enabledHostQryResetFeatures; + const VkPhysicalDeviceScalarBlockLayoutFeaturesEXT _enabledScalarLayoutFeatures; const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT _enabledTexelBuffAlignFeatures; const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT _enabledVtxAttrDivFeatures; const VkPhysicalDevicePortabilitySubsetFeaturesEXTX _enabledPortabilityFeatures; diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm index aa71323a..e22abc09 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm @@ -2224,6 +2224,7 @@ MVKDevice::MVKDevice(MVKPhysicalDevice* physicalDevice, const VkDeviceCreateInfo _enabledUBOLayoutFeatures(), _enabledVarPtrFeatures(), _enabledHostQryResetFeatures(), + _enabledScalarLayoutFeatures(), _enabledTexelBuffAlignFeatures(), _enabledVtxAttrDivFeatures(), _enabledPortabilityFeatures(), @@ -2305,6 +2306,7 @@ void MVKDevice::enableFeatures(const VkDeviceCreateInfo* pCreateInfo) { memset((void*)&_enabledUBOLayoutFeatures, 0, sizeof(_enabledUBOLayoutFeatures)); memset((void*)&_enabledVarPtrFeatures, 0, sizeof(_enabledVarPtrFeatures)); memset((void*)&_enabledHostQryResetFeatures, 0, sizeof(_enabledHostQryResetFeatures)); + memset((void*)&_enabledScalarLayoutFeatures, 0, sizeof(_enabledScalarLayoutFeatures)); memset((void*)&_enabledTexelBuffAlignFeatures, 0, sizeof(_enabledTexelBuffAlignFeatures)); memset((void*)&_enabledVtxAttrDivFeatures, 0, sizeof(_enabledVtxAttrDivFeatures)); memset((void*)&_enabledPortabilityFeatures, 0, sizeof(_enabledPortabilityFeatures)); @@ -2322,9 +2324,13 @@ void MVKDevice::enableFeatures(const VkDeviceCreateInfo* pCreateInfo) { pdTexelBuffAlignFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT; pdTexelBuffAlignFeatures.pNext = &pdVtxAttrDivFeatures; + VkPhysicalDeviceScalarBlockLayoutFeaturesEXT pdScalarLayoutFeatures; + pdScalarLayoutFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT; + pdScalarLayoutFeatures.pNext = &pdTexelBuffAlignFeatures; + VkPhysicalDeviceHostQueryResetFeaturesEXT pdHostQryResetFeatures; pdHostQryResetFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT; - pdHostQryResetFeatures.pNext = &pdTexelBuffAlignFeatures; + pdHostQryResetFeatures.pNext = &pdScalarLayoutFeatures; VkPhysicalDeviceVariablePointerFeatures pdVarPtrFeatures; pdVarPtrFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES; @@ -2411,6 +2417,13 @@ void MVKDevice::enableFeatures(const VkDeviceCreateInfo* pCreateInfo) { &pdHostQryResetFeatures.hostQueryReset, 1); break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: { + auto* requestedFeatures = (VkPhysicalDeviceScalarBlockLayoutFeaturesEXT*)next; + enableFeatures(&_enabledScalarLayoutFeatures.scalarBlockLayout, + &requestedFeatures->scalarBlockLayout, + &pdScalarLayoutFeatures.scalarBlockLayout, 1); + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: { auto* requestedFeatures = (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*)next; enableFeatures(&_enabledTexelBuffAlignFeatures.texelBufferAlignment,