Extend OpCompositeInsert test
authorAri Suonpaa <ari.suonpaa@siru.fi>
Mon, 19 Nov 2018 12:39:41 +0000 (14:39 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 6 Dec 2018 09:04:09 +0000 (04:04 -0500)
Extended OpCompositeInsert test with vector and nested
struct cases.

Affects:

dEQP-VK.spirv_assembly.instruction.*.composite_insert.*

Components: Vulkan

VK-GL-CTS issue: 1458

Change-Id: Icef6dd3161581ddb8b7413190b77833aa02461f1

android/cts/master/vk-master.txt
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmCompositeInsertTests.cpp
external/vulkancts/mustpass/1.1.3/vk-default-no-waivers.txt
external/vulkancts/mustpass/1.1.3/vk-default.txt

index db0d289bb11b9164f6f5a9d9b6aed16471dd4c5d..cab9f4d27b12cc44dda9afe08752ef16786c3bd5 100755 (executable)
@@ -224519,6 +224519,9 @@ dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp64.generated_args.co
 dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp64.generated_args.conv_from_fp32_inf_preserve
 dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp64.generated_args.conv_from_fp32_nan_preserve
 dEQP-VK.spirv_assembly.instruction.compute.ubo_padding.mat2x2
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.vec2
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.vec3
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.vec4
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat2x2
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat3x2
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat4x2
@@ -224528,6 +224531,7 @@ dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat4x3
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat2x4
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat3x4
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat4x4
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.nested_struct
 dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.float
 dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.vec4
 dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.matrix
@@ -232877,6 +232881,21 @@ dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_tesse
 dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_geom
 dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_frag
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat2x2_vert
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat2x2_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat2x2_tesse
@@ -232922,6 +232941,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_tesse
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_geom
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_frag
 dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_vert
 dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_tesse
index 738938b6d5cb43dbffa95f72f36cfcdad6ab0a0e..6b5370029f8fb58b8fdda391e77cd5a1743f47a3 100644 (file)
@@ -82,7 +82,17 @@ string getIdentityVectors (deUint32 cols, deUint32 rows)
        return ret;
 }
 
-string getCompositeInserts (deUint32 cols, deUint32 rows)
+string getVectorCompositeInserts (deUint32 elements)
+{
+       string  ret             = "                 %tmp0 = OpLoad %v" + de::toString(elements) + "f32 %vec\n";
+
+       for (deUint32 e = 0; e < elements; e++)
+               ret += "                 %tmp" + de::toString(e + 1) + " = OpCompositeInsert %v" + de::toString(elements) + "f32 %c_f32_" + de::toString(e) + " %tmp" + de::toString(e) + " " + de::toString(e) + "\n";
+
+       return ret;
+}
+
+string getMatrixCompositeInserts (deUint32 cols, deUint32 rows)
 {
        string  matType = getMatrixType(cols, rows);
        string  ret             = "                 %tmp0 = OpLoad " + matType + " %mat\n";
@@ -118,6 +128,154 @@ bool verifyMatrixOutput (const std::vector<Resource>& inputs, const vector<Alloc
        return ret;
 }
 
+string getNestedStructCompositeInserts (deUint32 arraySize)
+{
+       string  ret;
+
+       for (deUint32 arrayIdx = 0; arrayIdx < arraySize; arrayIdx++)
+               for (deUint32 vectorIdx = 0; vectorIdx < 4; vectorIdx++)
+                       ret += string("%tmp") + de::toString(arrayIdx * 4 + vectorIdx + 1) + " = OpCompositeInsert %Output %identity" + de::toString(vectorIdx) + " %tmp" + de::toString(arrayIdx * 4 + vectorIdx) + " 0 0 " + de::toString(arrayIdx) + " " + de::toString(vectorIdx) + "\n";
+
+       return ret;
+}
+
+void addComputeVectorCompositeInsertTests (tcu::TestCaseGroup* group)
+{
+       tcu::TestContext& testCtx = group->getTestContext();
+
+       for (deUint32 elements = 2; elements <= 4; elements++)
+       {
+               ComputeShaderSpec       spec;
+               vector<float>           refData;
+               const string            vecType                 = string("%v") + de::toString(elements) + "f32";
+
+               // Generate a vector using OpCompositeInsert
+               const string            shaderSource    =
+                       "                         OpCapability Shader\n"
+                       "                    %1 = OpExtInstImport \"GLSL.std.450\"\n"
+                       "                         OpMemoryModel Logical GLSL450\n"
+                       "                         OpEntryPoint GLCompute %main \"main\"\n"
+                       "                         OpExecutionMode %main LocalSize 1 1 1\n"
+                       "                         OpSource GLSL 430\n"
+                       "                         OpMemberDecorate %Output 0 Offset 0\n"
+                       "                         OpDecorate %Output BufferBlock\n"
+                       "                         OpDecorate %dataOutput DescriptorSet 0\n"
+                       "                         OpDecorate %dataOutput Binding 0\n"
+                       "                  %f32 = OpTypeFloat 32\n"
+                       "                %v2f32 = OpTypeVector %f32 2\n"
+                       "                %v3f32 = OpTypeVector %f32 3\n"
+                       "                %v4f32 = OpTypeVector %f32 4\n"
+                       "               %Output = OpTypeStruct " + vecType + "\n"
+                       "  %_ptr_Uniform_Output = OpTypePointer Uniform %Output\n"
+                       "           %dataOutput = OpVariable %_ptr_Uniform_Output Uniform\n"
+                       "    %_ptr_Function_vec = OpTypePointer Function " + vecType + "\n"
+                       "     %_ptr_Uniform_vec = OpTypePointer Uniform " + vecType + "\n"
+                       "              %c_f32_0 = OpConstant %f32 0\n"
+                       "              %c_f32_1 = OpConstant %f32 1\n"
+                       "              %c_f32_2 = OpConstant %f32 2\n"
+                       "              %c_f32_3 = OpConstant %f32 3\n"
+                       "                  %i32 = OpTypeInt 32 1\n"
+                       "              %c_i32_0 = OpConstant %i32 0\n"
+                       "                 %void = OpTypeVoid\n"
+                       "                    %3 = OpTypeFunction %void\n"
+                       "                 %main = OpFunction %void None %3\n"
+                       "                %entry = OpLabel\n"
+                       "                  %vec = OpVariable %_ptr_Function_vec Function\n"
+                       + getVectorCompositeInserts(elements) +
+                       "            %vecOutPtr = OpAccessChain %_ptr_Uniform_vec %dataOutput %c_i32_0\n"
+                       "                         OpStore %vecOutPtr %tmp" + de::toString(elements) + "\n"
+                       "                         OpReturn\n"
+                       "                         OpFunctionEnd\n";
+
+               spec.assembly           = shaderSource;
+               spec.numWorkGroups      = IVec3(1, 1, 1);
+
+               // Expect running counter
+               for (deUint32 e = 0; e < elements; e++)
+                       refData.push_back((float)e);
+
+               spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(refData))));
+
+               string testName = string("vec") + de::toString(elements);
+
+               group->addChild(new SpvAsmComputeShaderCase(testCtx, testName.c_str(), "Tests vector composite insert.", spec));
+       }
+}
+
+void addGraphicsVectorCompositeInsertTests (tcu::TestCaseGroup* group)
+{
+       for (deUint32 elements = 2; elements <= 4; elements++)
+       {
+               map<string, string>     fragments;
+               RGBA                            defaultColors[4];
+               GraphicsResources       resources;
+
+               SpecConstants           noSpecConstants;
+               PushConstants           noPushConstants;
+               GraphicsInterfaces      noInterfaces;
+               vector<string>          noFeatures;
+               vector<string>          noExtensions;
+               VulkanFeatures          vulkanFeatures  = VulkanFeatures();
+               vector<float>           refData;
+               const string            testName                = string("vec") + de::toString(elements);
+               const string            vecType                 = string("%v") + de::toString(elements) + "f32";
+
+               // Expect running counter
+               for (deUint32 e = 0; e < elements; e++)
+                       refData.push_back((float)e);
+               resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(refData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+
+               getDefaultColors(defaultColors);
+
+               // Generate a vector using OpCompositeInsert
+               fragments["pre_main"]   =
+                       "               %Output = OpTypeStruct " + vecType + "\n"
+                       "  %_ptr_Uniform_Output = OpTypePointer Uniform %Output\n"
+                       "           %dataOutput = OpVariable %_ptr_Uniform_Output Uniform\n"
+                       "             %fp_v2f32 = OpTypePointer Function %v2f32\n"
+                       "             %fp_v3f32 = OpTypePointer Function %v3f32\n"
+                       "     %_ptr_Uniform_vec = OpTypePointer Uniform " + vecType + "\n"
+                       "              %c_f32_2 = OpConstant %f32 2\n"
+                       "              %c_f32_3 = OpConstant %f32 3\n";
+
+               fragments["decoration"] =
+                       "                         OpMemberDecorate %Output 0 Offset 0\n"
+                       "                         OpDecorate %Output BufferBlock\n"
+                       "                         OpDecorate %dataOutput DescriptorSet 0\n"
+                       "                         OpDecorate %dataOutput Binding 0\n";
+
+               fragments["testfun"]    =
+                       "            %test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+                       "                %param = OpFunctionParameter %v4f32\n"
+                       "                %entry = OpLabel\n"
+                       "                  %vec = OpVariable %fp_v" + de::toString(elements) + "f32 Function\n"
+                       + getVectorCompositeInserts(elements) +
+                       "            %vecOutPtr = OpAccessChain %_ptr_Uniform_vec %dataOutput %c_i32_0\n"
+                       "                         OpStore %vecOutPtr %tmp" + de::toString(elements) + "\n"
+                       "                         OpReturnValue %param\n"
+                       "                         OpFunctionEnd\n";
+
+               vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_TRUE;
+               vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_FALSE;
+               createTestForStage(VK_SHADER_STAGE_VERTEX_BIT, (testName + "_vert").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
+                               noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+
+               createTestForStage(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, (testName + "_tessc").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
+                               noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+
+               createTestForStage(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, (testName + "_tesse").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
+                               noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+
+               createTestForStage(VK_SHADER_STAGE_GEOMETRY_BIT, (testName + "_geom").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
+                               noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+
+               vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_FALSE;
+               vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_TRUE;
+               createTestForStage(VK_SHADER_STAGE_FRAGMENT_BIT, (testName + "_frag").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
+                               noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+       }
+}
+
 void addComputeMatrixCompositeInsertTests (tcu::TestCaseGroup* group)
 {
        tcu::TestContext&               testCtx                 = group->getTestContext();
@@ -163,7 +321,7 @@ void addComputeMatrixCompositeInsertTests (tcu::TestCaseGroup* group)
                                "                 %main = OpFunction %void None %3\n"
                                "                %entry = OpLabel\n"
                                "                  %mat = OpVariable %_ptr_Function_mat Function\n"
-                               + getCompositeInserts(cols, rows) +
+                               + getMatrixCompositeInserts(cols, rows) +
                                "            %matOutPtr = OpAccessChain %_ptr_Uniform_mat %dataOutput %c_i32_0\n"
                                "                         OpStore %matOutPtr %tmp" + de::toString(cols) + "\n"
                                "                         OpReturn\n"
@@ -249,7 +407,7 @@ void addGraphicsMatrixCompositeInsertTests (tcu::TestCaseGroup* group)
                                "                %param = OpFunctionParameter %v4f32\n"
                                "                %entry = OpLabel\n"
                                "                  %mat = OpVariable %_ptr_Function_mat Function\n"
-                               + getCompositeInserts(cols, rows) +
+                               + getMatrixCompositeInserts(cols, rows) +
                                "            %matOutPtr = OpAccessChain %_ptr_Uniform_mat %dataOutput %c_i32_0\n"
                                "                         OpStore %matOutPtr %tmp" + de::toString(cols) + "\n"
                                "                         OpReturnValue %param\n"
@@ -277,12 +435,155 @@ void addGraphicsMatrixCompositeInsertTests (tcu::TestCaseGroup* group)
        }
 }
 
+void addComputeNestedStructCompositeInsertTests (tcu::TestCaseGroup* group)
+{
+       tcu::TestContext&       testCtx                 = group->getTestContext();
+
+       ComputeShaderSpec       spec;
+       vector<float>           identityData;
+       const deUint32          arraySize               = 8u;
+
+       const string            shaderSource    =
+               "                         OpCapability Shader\n"
+               "                    %1 = OpExtInstImport \"GLSL.std.450\"\n"
+               "                         OpMemoryModel Logical GLSL450\n"
+               "                         OpEntryPoint GLCompute %main \"main\"\n"
+               "                         OpExecutionMode %main LocalSize 1 1 1\n"
+               "                         OpSource GLSL 430\n"
+               "                         OpDecorate %_arr_mat4v4f32_uint_8 ArrayStride 64\n"
+               "                         OpMemberDecorate %S 0 ColMajor\n"
+               "                         OpMemberDecorate %S 0 Offset 0\n"
+               "                         OpMemberDecorate %S 0 MatrixStride 16\n"
+               "                         OpMemberDecorate %Output 0 Offset 0\n"
+               "                         OpDecorate %Output BufferBlock\n"
+               "                         OpDecorate %dataOutput DescriptorSet 0\n"
+               "                         OpDecorate %dataOutput Binding 0\n"
+               "                  %f32 = OpTypeFloat 32\n"
+               "                %v4f32 = OpTypeVector %f32 4\n"
+               "            %mat4v4f32 = OpTypeMatrix %v4f32 4\n"
+               "                 %uint = OpTypeInt 32 0\n"
+               "               %uint_8 = OpConstant %uint 8\n"
+               "%_arr_mat4v4f32_uint_8 = OpTypeArray %mat4v4f32 %uint_8\n"
+               "                    %S = OpTypeStruct %_arr_mat4v4f32_uint_8\n"
+               "               %Output = OpTypeStruct %S\n"
+               "  %_ptr_Uniform_Output = OpTypePointer Uniform %Output\n"
+               " %_ptr_Function_Output = OpTypePointer Function %Output\n"
+               "           %dataOutput = OpVariable %_ptr_Uniform_Output Uniform\n"
+               "              %c_f32_0 = OpConstant %f32 0\n"
+               "              %c_f32_1 = OpConstant %f32 1\n"
+               "                  %i32 = OpTypeInt 32 1\n"
+               "              %c_i32_0 = OpConstant %i32 0\n"
+               + getIdentityVectors(4, 4) +
+               "                 %void = OpTypeVoid\n"
+               "                    %3 = OpTypeFunction %void\n"
+               "                 %main = OpFunction %void None %3\n"
+               "                %entry = OpLabel\n"
+               "         %nestedstruct = OpVariable %_ptr_Function_Output Function\n"
+               "                 %tmp0 = OpLoad %Output %nestedstruct\n"
+               + getNestedStructCompositeInserts(arraySize) +
+               "                         OpStore %dataOutput %tmp" + de::toString(arraySize * 4) + "\n"
+               "                         OpReturn\n"
+               "                         OpFunctionEnd\n";
+
+       spec.assembly           = shaderSource;
+       spec.numWorkGroups      = IVec3(1, 1, 1);
+
+       // Expect an array of identity matrix as output
+       for (deUint32 a = 0; a < arraySize; a++)
+               for (deUint32 c = 0; c < 4; c++)
+                       for (deUint32 r = 0; r < 4; r++)
+                               identityData.push_back(c == r ? 1.0f : 0.0f);
+
+       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(identityData))));
+
+       group->addChild(new SpvAsmComputeShaderCase(testCtx, "nested_struct", "Tests nested struct composite insert.", spec));
+}
+
+void addGraphicsNestedStructCompositeInsertTests (tcu::TestCaseGroup* group)
+{
+       map<string, string>     fragments;
+       RGBA                            defaultColors[4];
+       GraphicsResources       resources;
+
+       SpecConstants           noSpecConstants;
+       PushConstants           noPushConstants;
+       GraphicsInterfaces      noInterfaces;
+       vector<string>          noFeatures;
+       vector<string>          noExtensions;
+       VulkanFeatures          vulkanFeatures  = VulkanFeatures();
+       vector<float>           identityData;
+       const deUint32          arraySize               = 8u;
+       const string            testName                = "nested_struct";
+
+       // Expect an array of identity matrix as output
+       for (deUint32 a = 0; a < arraySize; a++)
+               for (deUint32 c = 0; c < 4; c++)
+                       for (deUint32 r = 0; r < 4; r++)
+                               identityData.push_back(c == r ? 1.0f : 0.0f);
+       resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(identityData)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+
+       getDefaultColors(defaultColors);
+
+       fragments["pre_main"]   =
+               "               %uint_8 = OpConstant %u32 8\n"
+               "            %mat4v4f32 = OpTypeMatrix %v4f32 4\n"
+               "%_arr_mat4v4f32_uint_8 = OpTypeArray %mat4v4f32 %uint_8\n"
+               "                    %S = OpTypeStruct %_arr_mat4v4f32_uint_8\n"
+               "               %Output = OpTypeStruct %S\n"
+               "  %_ptr_Uniform_Output = OpTypePointer Uniform %Output\n"
+               " %_ptr_Function_Output = OpTypePointer Function %Output\n"
+               "           %dataOutput = OpVariable %_ptr_Uniform_Output Uniform\n"
+               + getIdentityVectors(4, 4);
+
+       fragments["decoration"] =
+               "                         OpDecorate %_arr_mat4v4f32_uint_8 ArrayStride 64\n"
+               "                         OpMemberDecorate %S 0 ColMajor\n"
+               "                         OpMemberDecorate %S 0 Offset 0\n"
+               "                         OpMemberDecorate %S 0 MatrixStride 16\n"
+               "                         OpMemberDecorate %Output 0 Offset 0\n"
+               "                         OpDecorate %Output BufferBlock\n"
+               "                         OpDecorate %dataOutput DescriptorSet 0\n"
+               "                         OpDecorate %dataOutput Binding 0\n";
+
+       fragments["testfun"]    =
+               "            %test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
+               "                %param = OpFunctionParameter %v4f32\n"
+               "                %entry = OpLabel\n"
+               "         %nestedstruct = OpVariable %_ptr_Function_Output Function\n"
+               "                 %tmp0 = OpLoad %Output %nestedstruct\n"
+               + getNestedStructCompositeInserts(arraySize) +
+               "                         OpStore %dataOutput %tmp" + de::toString(arraySize * 4) + "\n"
+               "                         OpReturnValue %param\n"
+               "                         OpFunctionEnd\n";
+
+       vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_TRUE;
+       vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_FALSE;
+       createTestForStage(VK_SHADER_STAGE_VERTEX_BIT, (testName + "_vert").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
+                       noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+
+       createTestForStage(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, (testName + "_tessc").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
+                       noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+
+       createTestForStage(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, (testName + "_tesse").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
+                       noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+
+       createTestForStage(VK_SHADER_STAGE_GEOMETRY_BIT, (testName + "_geom").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
+                       noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+
+       vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_FALSE;
+       vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_TRUE;
+       createTestForStage(VK_SHADER_STAGE_FRAGMENT_BIT, (testName + "_frag").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
+                       noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+}
+
 } // anonymous
 
 tcu::TestCaseGroup* createCompositeInsertComputeGroup (tcu::TestContext& testCtx)
 {
        de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, "composite_insert", "Compute tests for composite insert."));
+       addComputeVectorCompositeInsertTests(group.get());
        addComputeMatrixCompositeInsertTests(group.get());
+       addComputeNestedStructCompositeInsertTests(group.get());
 
        return group.release();
 }
@@ -290,7 +591,9 @@ tcu::TestCaseGroup* createCompositeInsertComputeGroup (tcu::TestContext& testCtx
 tcu::TestCaseGroup* createCompositeInsertGraphicsGroup (tcu::TestContext& testCtx)
 {
        de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, "composite_insert", "Graphics tests for composite insert."));
+       addGraphicsVectorCompositeInsertTests(group.get());
        addGraphicsMatrixCompositeInsertTests(group.get());
+       addGraphicsNestedStructCompositeInsertTests(group.get());
 
        return group.release();
 }
index 00aea620a92515da33c92e72d35bcfb6c4a25274..9fe290afb68ca28f916f64c2f0d76be0b16196c6 100644 (file)
@@ -224521,6 +224521,9 @@ dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp64.generated_args.co
 dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp64.generated_args.conv_from_fp32_inf_preserve
 dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp64.generated_args.conv_from_fp32_nan_preserve
 dEQP-VK.spirv_assembly.instruction.compute.ubo_padding.mat2x2
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.vec2
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.vec3
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.vec4
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat2x2
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat3x2
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat4x2
@@ -224530,6 +224533,7 @@ dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat4x3
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat2x4
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat3x4
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat4x4
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.nested_struct
 dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.float
 dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.vec4
 dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.matrix
@@ -232865,6 +232869,21 @@ dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_tesse
 dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_geom
 dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_frag
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat2x2_vert
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat2x2_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat2x2_tesse
@@ -232910,6 +232929,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_tesse
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_geom
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_frag
 dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_vert
 dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_tesse
index 78304c5de02816243b5e31116634ebcadffa9b81..f63affaa3a699361a42ef8bbfc48cdcfce01d109 100644 (file)
@@ -224521,6 +224521,9 @@ dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp64.generated_args.co
 dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp64.generated_args.conv_from_fp32_inf_preserve
 dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp64.generated_args.conv_from_fp32_nan_preserve
 dEQP-VK.spirv_assembly.instruction.compute.ubo_padding.mat2x2
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.vec2
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.vec3
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.vec4
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat2x2
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat3x2
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat4x2
@@ -224530,6 +224533,7 @@ dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat4x3
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat2x4
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat3x4
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.mat4x4
+dEQP-VK.spirv_assembly.instruction.compute.composite_insert.nested_struct
 dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.float
 dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.vec4
 dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.matrix
@@ -232865,6 +232869,21 @@ dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_tesse
 dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_geom
 dEQP-VK.spirv_assembly.instruction.graphics.ubo_padding.mat2x2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec2_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec3_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.vec4_frag
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat2x2_vert
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat2x2_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat2x2_tesse
@@ -232910,6 +232929,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_tesse
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_geom
 dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.mat4x4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.composite_insert.nested_struct_frag
 dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_vert
 dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_tesse