Check if the driver supports subgroup operations
authorSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Mon, 11 Sep 2017 10:41:56 +0000 (12:41 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 15 Sep 2017 11:15:53 +0000 (07:15 -0400)
Affects: dEQP-VK.subgroups.*

Components: Vulkan

VK-GL-CTS issue: 683

Change-Id: I85936d808459fab9a260bff372c7a5bbe7cc67fc
(cherry picked from commit 9cbd59a275ea092c6e1ffed249d974054224c081)

14 files changed:
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.hpp
external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp

index d844f33..8c6be83 100644 (file)
@@ -712,6 +712,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!subgroups::areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {
index e8cd86c..a38bc03 100644 (file)
@@ -396,6 +396,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!subgroups::areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {
index 9b89b0f..6381c69 100644 (file)
@@ -461,6 +461,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!subgroups::areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {
index c8c9f54..448aff4 100644 (file)
@@ -335,6 +335,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!subgroups::areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {
index 16c8e25..ab5f9eb 100644 (file)
@@ -818,6 +818,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!subgroups::areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {
index 58aef72..009c679 100644 (file)
@@ -336,6 +336,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {
index 7046047..5070097 100644 (file)
@@ -541,6 +541,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {
index 74b3f69..8c8b388 100644 (file)
@@ -610,6 +610,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!subgroups::areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {
index 138f6be..60c1c12 100644 (file)
@@ -485,6 +485,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!subgroups::areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {
index 46aed4f..e1e7fe9 100644 (file)
@@ -365,6 +365,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!subgroups::areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {
index 3d0f6a3..0030895 100644 (file)
@@ -500,6 +500,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!subgroups::areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {
index 3cecdf0..652be8e 100644 (file)
@@ -789,6 +789,13 @@ std::string vkt::subgroups::getVertShaderForStage(vk::VkShaderStageFlags stage)
        }
 }
 
+bool vkt::subgroups::isSubgroupSupported(Context& context)
+{
+       VkPhysicalDeviceProperties properties;
+       context.getInstanceInterface().getPhysicalDeviceProperties(context.getPhysicalDevice(), &properties);
+       return (properties.apiVersion < VK_MAKE_VERSION(1, 1, 0)) ? false : true;
+}
+
 bool vkt::subgroups::areSubgroupOperationsSupportedForStage(
        Context& context, const VkShaderStageFlags stage)
 {
index f34d0d9..7689e08 100644 (file)
@@ -86,6 +86,8 @@ std::string getSubgroupFeatureName(vk::VkSubgroupFeatureFlagBits bit);
 
 std::string getVertShaderForStage(vk::VkShaderStageFlags stage);
 
+bool isSubgroupSupported(Context& context);
+
 bool areSubgroupOperationsSupportedForStage(
        Context& context, vk::VkShaderStageFlags stage);
 
index 80ec5aa..d94ef3e 100644 (file)
@@ -545,6 +545,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
 
 tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
 {
+       if (!subgroups::isSubgroupSupported(context))
+               TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
+
        if (!subgroups::areSubgroupOperationsSupportedForStage(
                                context, caseDef.shaderStage))
        {