From cdb48f31a594335bc9627fa60caa52158ca4ca2b Mon Sep 17 00:00:00 2001 From: Charles Johnston Date: Wed, 22 Jul 2020 12:54:13 -0400 Subject: [PATCH] Fix for dEQP-VK.subgroups.*_requiredsubgroupsize The tests in the group dEQP-VK.subgroups.*_requiredsubgroupsize do not check if requiredSubgroupSizeStages from the structure VkPhysicalDeviceSubgroupSizeControlPropertiesEXT contain the shader stage the tests are using. Affected tests: dEQP-VK.subgroups.*_requiredsubgroupsize Components: Vulkan VK-GL-CTS issue: 2494 Change-Id: I2a932248698658a75364b9adc907f5454ff1d969 --- .../vulkan/subgroups/vktSubgroupsArithmeticTests.cpp | 13 +++++++++++++ .../vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp | 13 +++++++++++++ .../vulkan/subgroups/vktSubgroupsBallotMasksTests.cpp | 13 +++++++++++++ .../vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp | 13 +++++++++++++ .../modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp | 13 +++++++++++++ .../modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp | 13 +++++++++++++ .../vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp | 13 +++++++++++++ .../vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp | 13 +++++++++++++ .../modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp | 13 +++++++++++++ .../vulkan/subgroups/vktSubgroupsPartitionedTests.cpp | 13 +++++++++++++ .../modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp | 13 +++++++++++++ .../modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp | 13 +++++++++++++ .../modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp | 13 +++++++++++++ .../modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp | 13 +++++++++++++ 14 files changed, 182 insertions(+) diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp index f6cd13a..d9182f3 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp @@ -273,6 +273,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp index dbc7b25..26bddd6 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp @@ -284,6 +284,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotMasksTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotMasksTests.cpp index 1274730..c622f7a 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotMasksTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotMasksTests.cpp @@ -425,6 +425,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp index 4fa0e3c..eb039a7 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp @@ -491,6 +491,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp index d983650..b8260e7 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp @@ -939,6 +939,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp index fe0bbd7..9d0b8c9 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp @@ -1879,6 +1879,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp index 9661ec1..047ddea 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp @@ -1378,6 +1378,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp index 48a2102..afb033b 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp @@ -1608,6 +1608,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp index 294e126..1e9ff24 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp @@ -192,6 +192,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsPartitionedTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsPartitionedTests.cpp index 89b038a..3f0e552 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsPartitionedTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsPartitionedTests.cpp @@ -595,6 +595,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp index 0f1d443..004104b 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp @@ -237,6 +237,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp index d2a5ad0..82a828c 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp @@ -489,6 +489,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp index 53176ed..457167a 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp @@ -485,6 +485,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp index fd3bd55..0416791 100755 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp @@ -645,6 +645,19 @@ void supportedCheck (Context& context, CaseDefinition caseDef) if (subgroupSizeControlFeatures.computeFullSubgroups == DE_FALSE) TCU_THROW(NotSupportedError, "Device does not support full subgroups in compute shaders"); + + VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroupSizeControlProperties; + subgroupSizeControlProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; + subgroupSizeControlProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupSizeControlProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + if ((subgroupSizeControlProperties.requiredSubgroupSizeStages & caseDef.shaderStage) != caseDef.shaderStage) + TCU_THROW(NotSupportedError, "Required subgroup size is not supported for shader stage"); } *caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context); -- 2.7.4