Add feature checks to spirv assembly tests
authorToni Merilehti <toni.merilehti@siru.fi>
Thu, 11 Apr 2019 10:18:14 +0000 (13:18 +0300)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 23 Apr 2019 09:43:33 +0000 (05:43 -0400)
Adds missing checks for vertexPipelineStoresAndAtomics and
fragmentStoresAndAtomics core device features to spirv assembly
tests when required by the shaders.

Affects:

dEQP-VK.spirv_assembly.instruction.graphics.*

Components: Vulkan

VK-GL-CTS issue: 1725

Change-Id: I33af3faac948913f2f5ac7a4d385c323b00e5444
(cherry picked from commit c71c2e3a5afa19c68c0ad9a03d18c06d2997b2c3)

external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm8bitStorageTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmConditionalBranchTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmIndexingTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmPointerParameterTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariableInitTests.cpp

index f17dd0d..7248f07 100644 (file)
@@ -2177,13 +2177,19 @@ void addGraphics16BitStorageUniformInt32To16Group (tcu::TestCaseGroup* testGroup
                                        for (deUint32 padIdx = 0; padIdx < arrayStrides[capIdx] / 4 - 1; ++padIdx)
                                                inputsPadded.push_back(0);
                                }
+
                                GraphicsResources       resources;
+                               VulkanFeatures          features;
+
                                resources.inputs.push_back(Resource(BufferSp(new Int32Buffer(inputsPadded)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                resources.outputs.push_back(Resource(BufferSp(new Int16Buffer(outputs)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
-
                                resources.inputs.back().setDescriptorType(CAPABILITIES[capIdx].dtype);
 
-                               createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get16BitStorageFeatures(CAPABILITIES[capIdx].name));
+                               features                                                                                                = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
+                               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                               features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                               createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                        }
        }
        // Vector
@@ -2197,6 +2203,7 @@ void addGraphics16BitStorageUniformInt32To16Group (tcu::TestCaseGroup* testGroup
                        {
                                map<string, string>     specs;
                                string                          name            = string(CAPABILITIES[capIdx].name) + "_vector_" + intFacts[factIdx].name;
+                               VulkanFeatures          features;
 
                                specs["cap"]                                    = CAPABILITIES[capIdx].cap;
                                specs["indecor"]                                = CAPABILITIES[capIdx].decor;
@@ -2213,7 +2220,11 @@ void addGraphics16BitStorageUniformInt32To16Group (tcu::TestCaseGroup* testGroup
 
                                resources.inputs.back().setDescriptorType(CAPABILITIES[capIdx].dtype);
 
-                               createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get16BitStorageFeatures(CAPABILITIES[capIdx].name));
+                               features                                                                                                = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
+                               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                               features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                               createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                        }
        }
 }
@@ -3337,8 +3348,9 @@ void addGraphics16BitStorageUniformFloat32To16Group (tcu::TestCaseGroup* testGro
                        {
                                map<string, string>     specs;
                                string                          testName        = string(CAPABILITIES[capIdx].name) + "_scalar_float_" + rndModes[rndModeIdx].name;
-
                                GraphicsResources       resources;
+                               VulkanFeatures          features;
+
                                resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(arrayStrides[capIdx] == 4 ? float32Data : float32DataPadded)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                // We use a custom verifyIO to check the result via computing directly from inputs; the contents in outputs do not matter.
                                resources.outputs.push_back(Resource(BufferSp(new Float16Buffer(float16DummyData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
@@ -3354,7 +3366,11 @@ void addGraphics16BitStorageUniformFloat32To16Group (tcu::TestCaseGroup* testGro
                                resources.inputs.back().setDescriptorType(CAPABILITIES[capIdx].dtype);
                                resources.verifyIO                              = rndModes[rndModeIdx].f;
 
-                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get16BitStorageFeatures(CAPABILITIES[capIdx].name));
+                               features                                                                                                = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
+                               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                               features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                        }
        }
 
@@ -3440,6 +3456,7 @@ void addGraphics16BitStorageUniformFloat32To16Group (tcu::TestCaseGroup* testGro
                        for (deUint32 rndModeIdx = 0; rndModeIdx < DE_LENGTH_OF_ARRAY(rndModes); ++rndModeIdx)
                        {
                                map<string, string>     specs;
+                               VulkanFeatures          features;
                                string                          testName        = string(CAPABILITIES[capIdx].name) + "_vector_float_" + rndModes[rndModeIdx].name;
 
                                specs["cap"]                                    = CAPABILITIES[capIdx].cap;
@@ -3452,8 +3469,11 @@ void addGraphics16BitStorageUniformFloat32To16Group (tcu::TestCaseGroup* testGro
                                resources.inputs.back().setDescriptorType(CAPABILITIES[capIdx].dtype);
                                resources.verifyIO                              = rndModes[rndModeIdx].f;
 
+                               features                                                                                                = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
+                               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                               features.coreFeatures.fragmentStoresAndAtomics                  = true;
 
-                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get16BitStorageFeatures(CAPABILITIES[capIdx].name));
+                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                        }
        }
 
@@ -3553,6 +3573,7 @@ void addGraphics16BitStorageUniformFloat32To16Group (tcu::TestCaseGroup* testGro
                        for (deUint32 rndModeIdx = 0; rndModeIdx < DE_LENGTH_OF_ARRAY(rndModes); ++rndModeIdx)
                        {
                                map<string, string>     specs;
+                               VulkanFeatures          features;
                                string                          testName        = string(CAPABILITIES[capIdx].name) + "_matrix_float_" + rndModes[rndModeIdx].name;
 
                                specs["cap"]                                    = CAPABILITIES[capIdx].cap;
@@ -3565,8 +3586,11 @@ void addGraphics16BitStorageUniformFloat32To16Group (tcu::TestCaseGroup* testGro
                                resources.inputs.back().setDescriptorType(CAPABILITIES[capIdx].dtype);
                                resources.verifyIO                              = rndModes[rndModeIdx].f;
 
+                               features                                                                                                = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
+                               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                               features.coreFeatures.fragmentStoresAndAtomics                  = true;
 
-                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get16BitStorageFeatures(CAPABILITIES[capIdx].name));
+                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                        }
        }
 }
@@ -4733,7 +4757,10 @@ void addGraphics16BitStoragePushConstantFloat16To32Group (tcu::TestCaseGroup* te
                float32Data.push_back(deFloat16To32(float16Data[numIdx]));
 
        extensions.push_back("VK_KHR_16bit_storage");
-       requiredFeatures.ext16BitStorage = EXT16BITSTORAGEFEATURES_PUSH_CONSTANT;
+
+       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       requiredFeatures.coreFeatures.fragmentStoresAndAtomics                  = true;
+       requiredFeatures.ext16BitStorage                                                                = EXT16BITSTORAGEFEATURES_PUSH_CONSTANT;
 
        fragments["capability"]                         = "OpCapability StoragePushConstant16\n";
        fragments["extension"]                          = "OpExtension \"SPV_KHR_16bit_storage\"";
@@ -5046,7 +5073,10 @@ void addGraphics16BitStoragePushConstantInt16To32Group (tcu::TestCaseGroup* test
        }
 
        extensions.push_back("VK_KHR_16bit_storage");
-       requiredFeatures.ext16BitStorage = EXT16BITSTORAGEFEATURES_PUSH_CONSTANT;
+
+       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       requiredFeatures.coreFeatures.fragmentStoresAndAtomics                  = true;
+       requiredFeatures.ext16BitStorage                                                                = EXT16BITSTORAGEFEATURES_PUSH_CONSTANT;
 
        fragments["capability"]                         = "OpCapability StoragePushConstant16\n";
        fragments["extension"]                          = "OpExtension \"SPV_KHR_16bit_storage\"";
@@ -5559,6 +5589,8 @@ void addGraphics16BitStorageUniformInt16To32Group (tcu::TestCaseGroup* testGroup
 
                                        GraphicsResources       resources;
                                        vector<deInt16>         inputsPadded;
+                                       VulkanFeatures          features;
+
                                        for (size_t dataIdx = 0; dataIdx < inputs.size() / numElements; ++dataIdx)
                                        {
                                                for (deUint32 elementIdx = 0; elementIdx < numElements; ++elementIdx)
@@ -5589,7 +5621,11 @@ void addGraphics16BitStorageUniformInt16To32Group (tcu::TestCaseGroup* testGroup
                                        else
                                                resources.outputs.push_back(Resource(BufferSp(new Int32Buffer(uOutputs)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
 
-                                       createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get16BitStorageFeatures(CAPABILITIES[capIdx].name));
+                                       features                                                                                                = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
+                                       features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                                       features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                                       createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                                }
 }
 
@@ -5694,6 +5730,7 @@ void addGraphics16BitStorageUniformFloat16To32Group (tcu::TestCaseGroup* testGro
                        {
                                GraphicsResources       resources;
                                map<string, string>     specs;
+                               VulkanFeatures          features;
                                string                          testName        = string(CAPABILITIES[capIdx].name) + "_scalar_float";
                                bool                            useConstIdx     = constantIndices[constIndexIdx].useConstantIndex;
                                deUint32                        constIdx        = constantIndices[constIndexIdx].constantIndex;
@@ -5730,10 +5767,14 @@ void addGraphics16BitStorageUniformFloat16To32Group (tcu::TestCaseGroup* testGro
                                resources.verifyIO = check32BitFloats;
                                resources.inputs.back().setDescriptorType(CAPABILITIES[capIdx].dtype);
 
+                               features                                                                                                = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
+                               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                               features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
                                if (useConstIdx)
                                        testName += string("_const_idx_") + de::toString(constIdx);
 
-                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get16BitStorageFeatures(CAPABILITIES[capIdx].name));
+                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                        }
                }
        }
@@ -5811,6 +5852,7 @@ void addGraphics16BitStorageUniformFloat16To32Group (tcu::TestCaseGroup* testGro
                        {
                                GraphicsResources       resources;
                                map<string, string>     specs;
+                               VulkanFeatures          features;
                                string                          testName        = string(CAPABILITIES[capIdx].name) + "_vector_float";
                                bool                            useConstIdx     = constantIndices[constIndexIdx].useConstantIndex;
                                deUint32                        constIdx        = constantIndices[constIndexIdx].constantIndex;
@@ -5848,10 +5890,14 @@ void addGraphics16BitStorageUniformFloat16To32Group (tcu::TestCaseGroup* testGro
                                resources.verifyIO = check32BitFloats;
                                resources.inputs.back().setDescriptorType(CAPABILITIES[capIdx].dtype);
 
+                               features                                                                                                = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
+                               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                               features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
                                if (constantIndices[constIndexIdx].useConstantIndex)
                                        testName += string("_const_idx_") + de::toString(constantIndices[constIndexIdx].constantIndex);
 
-                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get16BitStorageFeatures(CAPABILITIES[capIdx].name));
+                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                        }
                }
        }
@@ -5944,6 +5990,7 @@ void addGraphics16BitStorageUniformFloat16To32Group (tcu::TestCaseGroup* testGro
                        {
                                GraphicsResources       resources;
                                map<string, string>     specs;
+                               VulkanFeatures          features;
                                string                          testName        = string(CAPABILITIES[capIdx].name) + "_matrix_float";
 
                                specs["cap"]                                    = CAPABILITIES[capIdx].cap;
@@ -5962,7 +6009,11 @@ void addGraphics16BitStorageUniformFloat16To32Group (tcu::TestCaseGroup* testGro
                                resources.verifyIO = check32BitFloats;
                                resources.inputs.back().setDescriptorType(CAPABILITIES[capIdx].dtype);
 
-                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get16BitStorageFeatures(CAPABILITIES[capIdx].name));
+                               features                                                                                                = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
+                               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                               features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                }
        }
 }
@@ -6179,6 +6230,7 @@ void addGraphics16BitStorageUniformStructFloat16To32Group (tcu::TestCaseGroup* t
                        vector<deFloat16>       float16Data     = (VK_DESCRIPTOR_TYPE_STORAGE_BUFFER == CAPABILITIES[capIdx].dtype) ? data16bitStd430(rnd) :  data16bitStd140(rnd);
                        GraphicsResources       resources;
                        map<string, string>     specs;
+                       VulkanFeatures          features;
                        string                          testName        = string(CAPABILITIES[capIdx].name);
 
                        specs["cap"]                                    = CAPABILITIES[capIdx].cap;
@@ -6195,7 +6247,11 @@ void addGraphics16BitStorageUniformStructFloat16To32Group (tcu::TestCaseGroup* t
                        resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(float32Data)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                        resources.verifyIO = (VK_DESCRIPTOR_TYPE_STORAGE_BUFFER == CAPABILITIES[capIdx].dtype) ? graphicsCheckStruct<deFloat16, float, SHADERTEMPLATE_STRIDE16BIT_STD430, SHADERTEMPLATE_STRIDE32BIT_STD430> : graphicsCheckStruct<deFloat16, float, SHADERTEMPLATE_STRIDE16BIT_STD140, SHADERTEMPLATE_STRIDE32BIT_STD430>;
 
-                       createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get16BitStorageFeatures(CAPABILITIES[capIdx].name));
+                       features                                                                                                = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
+                       features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                       features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                       createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                }
 }
 
@@ -6430,7 +6486,10 @@ void addGraphics16BitStorageUniformStructFloat32To16Group (tcu::TestCaseGroup* t
                resources.verifyIO                              =  (VK_DESCRIPTOR_TYPE_STORAGE_BUFFER == CAPABILITIES[capIdx].dtype) ? graphicsCheckStruct<float, deFloat16, SHADERTEMPLATE_STRIDE32BIT_STD430, SHADERTEMPLATE_STRIDE16BIT_STD430> : graphicsCheckStruct<float, deFloat16, SHADERTEMPLATE_STRIDE32BIT_STD140, SHADERTEMPLATE_STRIDE16BIT_STD430>;
 
                VulkanFeatures features;
-               features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+
+               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+               features.coreFeatures.fragmentStoresAndAtomics                  = true;
+               features.ext16BitStorage                                                                = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
 
                createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
        }
@@ -6615,6 +6674,7 @@ void addGraphics16bitStructMixedTypesGroup (tcu::TestCaseGroup* group)
                map<string, string>             specsLoop;
                map<string, string>             specsOffset;
                map<string, string>             specs;
+               VulkanFeatures                  features;
                string                                  testName        = string(CAPABILITIES[capIdx].name);
 
                specsLoop["exeCount"]   = "c_i32_7";
@@ -6649,7 +6709,11 @@ void addGraphics16bitStructMixedTypesGroup (tcu::TestCaseGroup* group)
                resources.inputs.push_back(Resource(BufferSp(new Int16Buffer(inData)), CAPABILITIES[capIdx].dtype));
                resources.outputs.push_back(Resource(BufferSp(new Int16Buffer(outData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
 
-               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, group, get16BitStorageFeatures(CAPABILITIES[capIdx].name));
+               features                                                                                                = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
+               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+               features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, group, features);
        }
 }
 
index b47792f..6c625d5 100644 (file)
@@ -2854,6 +2854,7 @@ void addGraphics8BitStorageUniformInt32To8Group (tcu::TestCaseGroup* testGroup)
                for (deUint32 factIdx = 0; factIdx < DE_LENGTH_OF_ARRAY(intFacts); ++factIdx)
                {
                        map<string, string>     specs;
+                       VulkanFeatures          features;
                        string                          name            = string(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name) + "_" + categories[catIdx].name + "_" + intFacts[factIdx].name;
 
                        specs["cap"]                                    = CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].cap;
@@ -2868,7 +2869,11 @@ void addGraphics8BitStorageUniformInt32To8Group (tcu::TestCaseGroup* testGroup)
                        fragments["capability"]                 = capabilities.specialize(specs);
                        fragments["decoration"]                 = categories[catIdx].decoration.specialize(specs);
 
-                       createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get8BitStorageFeatures(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name));
+                       features                                                                                                = get8BitStorageFeatures(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name);
+                       features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                       features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                       createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                }
        }
 }
@@ -3069,6 +3074,7 @@ void addGraphics8BitStorageUniformInt8To32Group (tcu::TestCaseGroup* testGroup)
                                bool                            useConstIdx     = constantIndices[constIndexIdx].useConstantIndex;
                                deUint32                        constIdx        = constantIndices[constIndexIdx].constantIndex;
                                map<string, string>     specs;
+                               VulkanFeatures          features;
                                string                          name            = string(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name) + "_" + categories[catIdx].name + "_" + intFacts[factIdx].name;
 
                                specs["cap"]                                    = CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].cap;
@@ -3137,7 +3143,11 @@ void addGraphics8BitStorageUniformInt8To32Group (tcu::TestCaseGroup* testGroup)
                                                resources.verifyIO = checkUniformsArray<deInt8, deInt32, 1>;
                                }
 
-                               createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get8BitStorageFeatures(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name));
+                               features                                                                                                = get8BitStorageFeatures(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name);
+                               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                               features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                               createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                }
        }
 }
@@ -3185,7 +3195,10 @@ void addGraphics8BitStoragePushConstantInt8To32Group (tcu::TestCaseGroup* testGr
        }
 
        extensions.push_back("VK_KHR_8bit_storage");
-       requiredFeatures.ext8BitStorage = EXT8BITSTORAGEFEATURES_PUSH_CONSTANT;
+
+       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       requiredFeatures.coreFeatures.fragmentStoresAndAtomics                  = true;
+       requiredFeatures.ext8BitStorage                                                                 = EXT8BITSTORAGEFEATURES_PUSH_CONSTANT;
 
        fragments["capability"]                         = "OpCapability StoragePushConstant8\n";
        fragments["extension"]                          = "OpExtension \"SPV_KHR_storage_buffer_storage_class\"\n"
@@ -3664,6 +3677,7 @@ void addGraphics8BitStorageUniformInt16To8Group (tcu::TestCaseGroup* testGroup)
                for (deUint32 factIdx = 0; factIdx < DE_LENGTH_OF_ARRAY(intFacts); ++factIdx)
                {
                        map<string, string>     specs;
+                       VulkanFeatures          features;
                        string                          name            = string(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name) + "_" + categories[catIdx].name + "_" + intFacts[factIdx].name;
 
                        specs["cap"]                                    = CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].cap;
@@ -3678,7 +3692,11 @@ void addGraphics8BitStorageUniformInt16To8Group (tcu::TestCaseGroup* testGroup)
                        fragments["capability"]                 = capabilities.specialize(specs);
                        fragments["decoration"]                 = categories[catIdx].decoration.specialize(specs);
 
-                       createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get8BitStorageFeatures(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name));
+                       features                                                                                                = get8BitStorageFeatures(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name);
+                       features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                       features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                       createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                }
        }
 }
@@ -3885,6 +3903,7 @@ void addGraphics8BitStorageUniformInt8To16Group (tcu::TestCaseGroup* testGroup)
                                bool                            useConstIdx     = constantIndices[constIndexIdx].useConstantIndex;
                                deUint32                        constIdx        = constantIndices[constIndexIdx].constantIndex;
                                map<string, string>     specs;
+                               VulkanFeatures          features;
                                string                          name            = string(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name) + "_" + categories[catIdx].name + "_" + intFacts[factIdx].name;
 
                                specs["cap"]                                    = CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].cap;
@@ -3953,7 +3972,11 @@ void addGraphics8BitStorageUniformInt8To16Group (tcu::TestCaseGroup* testGroup)
                                                resources.verifyIO = checkUniformsArray<deInt8, deInt16, 1>;
                                }
 
-                               createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get8BitStorageFeatures(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name));
+                               features                                                                                                = get8BitStorageFeatures(CAPABILITIES[UNIFORM_AND_STORAGEBUFFER_TEST].name);
+                               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                               features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                               createTestsForAllStages(name, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                }
        }
 }
@@ -4002,7 +4025,10 @@ void addGraphics8BitStoragePushConstantInt8To16Group (tcu::TestCaseGroup* testGr
 
        extensions.push_back("VK_KHR_8bit_storage");
        extensions.push_back("VK_KHR_16bit_storage");
-       requiredFeatures.ext8BitStorage = EXT8BITSTORAGEFEATURES_PUSH_CONSTANT;
+
+       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       requiredFeatures.coreFeatures.fragmentStoresAndAtomics                  = true;
+       requiredFeatures.ext8BitStorage                                                                 = EXT8BITSTORAGEFEATURES_PUSH_CONSTANT;
 
        fragments["capability"]                         = "OpCapability StoragePushConstant8\n"
                                                                                  "OpCapability StorageUniform16\n";
@@ -4527,6 +4553,7 @@ void addGraphics8BitStorageUniformStruct8To32Group (tcu::TestCaseGroup* testGrou
                        vector<deInt8>                  i8Data          = isUniform ? data8bit(SHADERTEMPLATE_STRIDE8BIT_STD140, rnd) : data8bit(SHADERTEMPLATE_STRIDE8BIT_STD430, rnd);
                        GraphicsResources               resources;
                        map<string, string>             specs;
+                       VulkanFeatures                  features;
                        const string                    testName        = string(CAPABILITIES[capIdx].name) + "_" + intFacts[intFactsNdx].name;
 
                        specs["cap"]                                            = CAPABILITIES[capIdx].cap;
@@ -4550,7 +4577,11 @@ void addGraphics8BitStorageUniformStruct8To32Group (tcu::TestCaseGroup* testGrou
                        else
                                resources.verifyIO = checkStruct<deInt8, deInt32, SHADERTEMPLATE_STRIDE8BIT_STD430, SHADERTEMPLATE_STRIDE32BIT_STD430>;
 
-                       createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get8BitStorageFeatures(CAPABILITIES[capIdx].name));
+                       features                                                                                                = get8BitStorageFeatures(CAPABILITIES[capIdx].name);
+                       features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                       features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                       createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                }
 }
 
@@ -4798,6 +4829,7 @@ void addGraphics8BitStorageUniformStruct32To8Group (tcu::TestCaseGroup* testGrou
                        string                          testName        = string(CAPABILITIES[capIdx].name) + "_" + intFacts[intFactsNdx].name;
                        vector<deInt32>         i32Data         = isUniform ? data32bit(SHADERTEMPLATE_STRIDE32BIT_STD140, rnd) : data32bit(SHADERTEMPLATE_STRIDE32BIT_STD430, rnd);
                        GraphicsResources       resources;
+                       VulkanFeatures          features;
 
                        specs["cap"]                                    = CAPABILITIES[STORAGE_BUFFER_TEST].cap;
                        specs["stridei8"]                               = getStructShaderComponet(SHADERTEMPLATE_STRIDE8BIT_STD430);
@@ -4820,7 +4852,11 @@ void addGraphics8BitStorageUniformStruct32To8Group (tcu::TestCaseGroup* testGrou
                        else
                                resources.verifyIO = checkStruct<deInt32, deInt8, SHADERTEMPLATE_STRIDE32BIT_STD430, SHADERTEMPLATE_STRIDE8BIT_STD430>;
 
-                       createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, get8BitStorageFeatures(CAPABILITIES[STORAGE_BUFFER_TEST].name));
+                       features                                                                                                = get8BitStorageFeatures(CAPABILITIES[STORAGE_BUFFER_TEST].name);
+                       features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+                       features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+                       createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup, features);
                }
 }
 
@@ -5005,6 +5041,7 @@ void addGraphics8bitStorage8bitStructMixedTypesGroup (tcu::TestCaseGroup* group)
                map<string, string>             specsLoop;
                map<string, string>             specsOffset;
                map<string, string>             specs;
+               VulkanFeatures                  features;
                string                                  testName        = string(CAPABILITIES[capIdx].name);
 
                specsLoop["exeCount"]   = "c_i32_7";
@@ -5040,16 +5077,20 @@ void addGraphics8bitStorage8bitStructMixedTypesGroup (tcu::TestCaseGroup* group)
                specsOffset["InOut"]    = "Out";
                specs["OutOffsets"]             = StringTemplate(getStructShaderComponet(SHADERTEMPLATE_STRIDEMIX_STD430)).specialize(specsOffset);
 
-               fragments["capability"]                 = capabilities.specialize(specs);
-               fragments["decoration"]                 = decoration.specialize(specs);
-               fragments["pre_main"]                   = preMain.specialize(specs);
-               fragments["testfun"]                    = testFun.specialize(specs);
+               fragments["capability"] = capabilities.specialize(specs);
+               fragments["decoration"] = decoration.specialize(specs);
+               fragments["pre_main"]   = preMain.specialize(specs);
+               fragments["testfun"]    = testFun.specialize(specs);
 
-               resources.verifyIO                              = isUniform ? checkStruct<deInt8, deInt8, SHADERTEMPLATE_STRIDEMIX_STD140, SHADERTEMPLATE_STRIDEMIX_STD430> : checkStruct<deInt8, deInt8, SHADERTEMPLATE_STRIDEMIX_STD430, SHADERTEMPLATE_STRIDEMIX_STD430>;
+               resources.verifyIO              = isUniform ? checkStruct<deInt8, deInt8, SHADERTEMPLATE_STRIDEMIX_STD140, SHADERTEMPLATE_STRIDEMIX_STD430> : checkStruct<deInt8, deInt8, SHADERTEMPLATE_STRIDEMIX_STD430, SHADERTEMPLATE_STRIDEMIX_STD430>;
                resources.inputs.push_back(Resource(BufferSp(new Int8Buffer(inData)), CAPABILITIES[capIdx].dtype));
                resources.outputs.push_back(Resource(BufferSp(new Int8Buffer(outData)), CAPABILITIES[STORAGE_BUFFER_TEST].dtype));
 
-               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, group, get8BitStorageFeatures(CAPABILITIES[capIdx].name));
+               features                                                                                                = get8BitStorageFeatures(CAPABILITIES[capIdx].name);
+               features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+               features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
+               createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, group, features);
        }
 }
 
index 8f08eda..8b4ac87 100644 (file)
@@ -131,6 +131,7 @@ void addGraphicsSameLabelsTest (tcu::TestCaseGroup* group)
        RGBA                                    defaultColors[4];
        GraphicsResources               resources;
        vector<deUint32>                outputData;
+       VulkanFeatures                  features;
 
        outputData.reserve(numItems);
        for (deUint32 numIdx = 0; numIdx < numItems; ++numIdx)
@@ -138,6 +139,9 @@ void addGraphicsSameLabelsTest (tcu::TestCaseGroup* group)
 
        resources.outputs.push_back(Resource(BufferSp(new Buffer<deUint32>(outputData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
 
+       features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
        getDefaultColors(defaultColors);
 
        for (int conditionIdx = 0; conditionIdx < DE_LENGTH_OF_ARRAY(conditions); ++conditionIdx)
@@ -209,7 +213,7 @@ void addGraphicsSameLabelsTest (tcu::TestCaseGroup* group)
                specs["condition"]              = conditions[conditionIdx];
                fragments["testfun"]    = testFun.specialize(specs);
 
-               createTestsForAllStages(testName.c_str(), defaultColors, defaultColors, fragments, resources, vector<string>(), group);
+               createTestsForAllStages(testName.c_str(), defaultColors, defaultColors, fragments, resources, vector<string>(), group, features);
        }
 }
 
index c543d96..eba2e23 100644 (file)
@@ -486,6 +486,9 @@ void addGraphicsIndexingStructTests (tcu::TestCaseGroup* group)
 
                                resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(outputData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
 
+                               vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics      = true;
+                               vulkanFeatures.coreFeatures.fragmentStoresAndAtomics            = true;
+
                                fragments["pre_main"]   = preMain.specialize(specs);
                                fragments["decoration"] = decoration.specialize(specs);
                                fragments["testfun"]    = testFun.specialize(specs);
index 096243b..055d21c 100644 (file)
@@ -9678,6 +9678,9 @@ tcu::TestCaseGroup* createConvertGraphicsTests (tcu::TestContext& testCtx, const
 
                getVulkanFeaturesAndExtensions(test->m_fromType, test->m_toType, vulkanFeatures, extensions);
 
+               vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics      = true;
+               vulkanFeatures.coreFeatures.fragmentStoresAndAtomics            = true;
+
                createTestsForAllStages(
                        test->m_name, defaultColors, defaultColors, fragments, noSpecConstants,
                        noPushConstants, resources, noInterfaces, extensions, vulkanFeatures, group.get());
@@ -18164,6 +18167,9 @@ void createSparseIdsAbuseTest (tcu::TestContext& testCtx, de::MovePtr<tcu::TestC
        specResource.inputs.push_back(Resource(BufferSp(new Uint32Buffer(inData2)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
        specResource.outputs.push_back(Resource(BufferSp(new Uint32Buffer(outData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
 
+       features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
        finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions, IVec3(1, 1, 1));
 }
 
@@ -18306,6 +18312,9 @@ void createLotsIdsAbuseTest (tcu::TestContext& testCtx, de::MovePtr<tcu::TestCas
        specResource.inputs.push_back(Resource(BufferSp(new Uint32Buffer(inData2)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
        specResource.outputs.push_back(Resource(BufferSp(new Uint32Buffer(outData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
 
+       features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
        finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions, IVec3(1, 1, 1));
 }
 
index 07b81cf..0fb3458 100644 (file)
@@ -759,7 +759,8 @@ void addGraphicsPointerParamToParamTest (tcu::TestCaseGroup* group)
 
        getDefaultColors(defaultColors);
        expectedOutput.push_back(7.0f);
-       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_TRUE;
+       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       requiredFeatures.coreFeatures.fragmentStoresAndAtomics                  = true;
        resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
 
        createTestsForAllStages("global_to_param", defaultColors, defaultColors, fragments, resources, extensions, group, requiredFeatures);
@@ -854,7 +855,8 @@ void addGraphicsPointerParamToGlobalTest (tcu::TestCaseGroup* group)
 
        getDefaultColors(defaultColors);
        expectedOutput.push_back(7.0f);
-       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_TRUE;
+       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       requiredFeatures.coreFeatures.fragmentStoresAndAtomics                  = true;
        resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
 
        createTestsForAllStages("param_to_global", defaultColors, defaultColors, fragments, resources, extensions, group, requiredFeatures);
@@ -967,8 +969,9 @@ void addGraphicsPointerBufferMemoryTest (tcu::TestCaseGroup* group)
                expectedOutput.push_back(2.0f);
 
        extensions.push_back("VK_KHR_variable_pointers");
-       requiredFeatures.extVariablePointers = EXTVARIABLEPOINTERSFEATURES_VARIABLE_POINTERS_STORAGEBUFFER;
-       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_TRUE;
+       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       requiredFeatures.coreFeatures.fragmentStoresAndAtomics                  = true;
+       requiredFeatures.extVariablePointers                                                    = EXTVARIABLEPOINTERSFEATURES_VARIABLE_POINTERS_STORAGEBUFFER;
        resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
 
        createTestsForAllStages("buffer_memory", defaultColors, defaultColors, fragments, resources, extensions, group, requiredFeatures);
@@ -1077,7 +1080,8 @@ void addGraphicsPointerBufferMemoryVariablePointersTest (tcu::TestCaseGroup* gro
                expectedOutput.push_back(2.0f);
 
        extensions.push_back("VK_KHR_variable_pointers");
-       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_TRUE;
+       requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       requiredFeatures.coreFeatures.fragmentStoresAndAtomics                  = true;
        resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
 
        createTestsForAllStages("buffer_memory_variable_pointers", defaultColors, defaultColors, fragments, resources, extensions, group, requiredFeatures);
index c756229..5185fe8 100644 (file)
@@ -187,6 +187,7 @@ void addGraphicsVariableInitPrivateTest (tcu::TestCaseGroup* group)
        RGBA                                    defaultColors[4];
        GraphicsResources               resources;
        vector<string>                  extensions;
+       VulkanFeatures                  features;
        tcu::TestCaseGroup*             privateGroup            = new tcu::TestCaseGroup(testCtx, "private", "Tests OpVariable initialization in private storage class.");
        const int                               numFloats                       = 128;
        vector<float>                   expectedOutput;
@@ -226,7 +227,6 @@ void addGraphicsVariableInitPrivateTest (tcu::TestCaseGroup* group)
                "                         OpReturnValue %param\n"
                "                         OpFunctionEnd\n");
 
-
        group->addChild(privateGroup);
 
        getDefaultColors(defaultColors);
@@ -238,6 +238,9 @@ void addGraphicsVariableInitPrivateTest (tcu::TestCaseGroup* group)
        resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
        extensions.push_back("VK_KHR_storage_buffer_storage_class");
 
+       features.coreFeatures.vertexPipelineStoresAndAtomics    = true;
+       features.coreFeatures.fragmentStoresAndAtomics                  = true;
+
        for (int paramIdx = 0; paramIdx < DE_LENGTH_OF_ARRAY(params); paramIdx++)
        {
                map<string, string> shaderSpec;
@@ -261,7 +264,7 @@ void addGraphicsVariableInitPrivateTest (tcu::TestCaseGroup* group)
                fragments["decoration"]         = decoration.specialize(shaderSpec);
                fragments["testfun"]            = testFun.specialize(shaderSpec);
 
-               createTestsForAllStages(params[paramIdx].name, defaultColors, defaultColors, fragments, resources, extensions, privateGroup);
+               createTestsForAllStages(params[paramIdx].name, defaultColors, defaultColors, fragments, resources, extensions, privateGroup, features);
        }
 }