Add OpVariable initialization tests
authorAri Suonpaa <ari.suonpaa@siru.fi>
Fri, 12 Jan 2018 12:42:31 +0000 (14:42 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 22 Feb 2018 08:51:46 +0000 (03:51 -0500)
Added tests for OpVariable initialization. Tests are for private and
output storage classes.

New tests:
dEQP-VK.spirv_assembly.instruction.*.variable_init.*

Components: Vulkan

VK-GL-CTS issue: 873

Change-Id: I7cb29648642d617409719cd0cfa40ee7acfb3548

AndroidGen.mk
android/cts/master/vk-master.txt
external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.hpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariableInitTests.cpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariableInitTests.hpp [new file with mode: 0644]
external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt
external/vulkancts/mustpass/1.1.2/vk-default.txt

index 2d74f55..4628bab 100644 (file)
@@ -255,6 +255,7 @@ LOCAL_SRC_FILES := \
        external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmTests.cpp \
        external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUboMatrixPaddingTests.cpp \
        external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUtils.cpp \
+       external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariableInitTests.cpp \
        external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariablePointersTests.cpp \
        external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp \
        external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutTests.cpp \
index d7f69da..b5ce2b4 100755 (executable)
@@ -199903,6 +199903,11 @@ dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.
 dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.vector_uint
 dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.uniform_16_to_16.stress_test
 dEQP-VK.spirv_assembly.instruction.compute.ubo_padding.mat2x2
+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
+dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.floatarray
+dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.struct
 dEQP-VK.spirv_assembly.instruction.compute.conditional_branch.same_labels_true
 dEQP-VK.spirv_assembly.instruction.compute.conditional_branch.same_labels_false
 dEQP-VK.spirv_assembly.instruction.compute.indexing.opaccesschain_u16
@@ -202302,6 +202307,36 @@ 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.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
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.float
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.vec4
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.matrix
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.floatarray
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.struct
 dEQP-VK.spirv_assembly.instruction.graphics.conditional_branch.same_labels_true_vert
 dEQP-VK.spirv_assembly.instruction.graphics.conditional_branch.same_labels_true_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.conditional_branch.same_labels_true_tesse
index 745a005..49dc2e5 100644 (file)
@@ -27,6 +27,8 @@ set(DEQP_VK_SPIRV_ASSEMBLY_SRCS
        vktSpvAsmTests.hpp
        vktSpvAsmUtils.cpp
        vktSpvAsmUtils.hpp
+       vktSpvAsmVariableInitTests.cpp
+       vktSpvAsmVariableInitTests.hpp
        vktSpvAsmVariablePointersTests.cpp
        vktSpvAsmVariablePointersTests.hpp
        vktSpvAsmSpirvVersionTests.cpp
index 78eee8d..4597232 100644 (file)
@@ -2437,6 +2437,11 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan
                                if (features.shaderFloat64 != VK_TRUE)
                                        TCU_THROW(NotSupportedError, "Device feature not supported: shaderFloat64");
                        }
+                       else if (feature == "fragmentStoresAndAtomics")
+                       {
+                               if (features.fragmentStoresAndAtomics != VK_TRUE)
+                                       TCU_THROW(NotSupportedError, "Device feature not supported: fragmentStoresAndAtomics");
+                       }
                        else
                        {
                                TCU_THROW(InternalError, (std::string("Unimplemented physical device feature: ") + feature).c_str());
index 249e527..0c7dc1c 100644 (file)
@@ -409,7 +409,6 @@ InstanceContext createInstanceContext (const ShaderElement                                                  (&elements)[N],
        return createInstanceContext(elements, defaultColors, defaultColors, testCodeFragments);
 }
 
-
 void addShaderCodeCustomVertex(vk::SourceCollections& dst, InstanceContext& context, const SpirVAsmBuildOptions* spirVAsmBuildOptions);
 void addShaderCodeCustomTessControl(vk::SourceCollections& dst, InstanceContext& context, const SpirVAsmBuildOptions* spirVAsmBuildOptions);
 void addShaderCodeCustomTessEval(vk::SourceCollections& dst, InstanceContext& context, const SpirVAsmBuildOptions* spirVAsmBuildOptions);
index ef6b7c4..1498f0b 100644 (file)
@@ -59,6 +59,7 @@
 #include "vktSpvAsmComputeShaderTestUtil.hpp"
 #include "vktSpvAsmGraphicsShaderTestUtil.hpp"
 #include "vktSpvAsmVariablePointersTests.hpp"
+#include "vktSpvAsmVariableInitTests.hpp"
 #include "vktSpvAsmSpirvVersionTests.hpp"
 #include "vktTestCaseUtil.hpp"
 #include "vktSpvAsmLoopDepLenTests.hpp"
@@ -9001,6 +9002,7 @@ tcu::TestCaseGroup* createInstructionTests (tcu::TestContext& testCtx)
        }
        computeTests->addChild(create16BitStorageComputeGroup(testCtx));
        computeTests->addChild(createUboMatrixPaddingComputeGroup(testCtx));
+       computeTests->addChild(createVariableInitComputeGroup(testCtx));
        computeTests->addChild(createConditionalBranchComputeGroup(testCtx));
        computeTests->addChild(createIndexingComputeGroup(testCtx));
        computeTests->addChild(createVariablePointersComputeGroup(testCtx));
@@ -9043,6 +9045,7 @@ tcu::TestCaseGroup* createInstructionTests (tcu::TestContext& testCtx)
 
        graphicsTests->addChild(create16BitStorageGraphicsGroup(testCtx));
        graphicsTests->addChild(createUboMatrixPaddingGraphicsGroup(testCtx));
+       graphicsTests->addChild(createVariableInitGraphicsGroup(testCtx));
        graphicsTests->addChild(createConditionalBranchGraphicsGroup(testCtx));
        graphicsTests->addChild(createIndexingGraphicsGroup(testCtx));
        graphicsTests->addChild(createVariablePointersGraphicsGroup(testCtx));
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariableInitTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariableInitTests.cpp
new file mode 100644 (file)
index 0000000..b5ac224
--- /dev/null
@@ -0,0 +1,636 @@
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2018 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief SPIR-V Assembly Tests for OpVariable initializer
+ *//*--------------------------------------------------------------------*/
+
+#include "vktSpvAsmVariableInitTests.hpp"
+#include "vktSpvAsmComputeShaderCase.hpp"
+#include "vktSpvAsmComputeShaderTestUtil.hpp"
+#include "vktSpvAsmGraphicsShaderTestUtil.hpp"
+#include "tcuStringTemplate.hpp"
+
+namespace vkt
+{
+namespace SpirVAssembly
+{
+
+using namespace vk;
+using std::map;
+using std::string;
+using std::vector;
+using tcu::IVec3;
+using tcu::Vec4;
+using tcu::RGBA;
+using tcu::StringTemplate;
+
+namespace
+{
+
+void addShaderCodeOutputFloat          (vk::SourceCollections& dst, InstanceContext context);
+void addShaderCodeOutputVector         (vk::SourceCollections& dst, InstanceContext context);
+void addShaderCodeOutputMatrix         (vk::SourceCollections& dst, InstanceContext context);
+void addShaderCodeOutputFloatArray     (vk::SourceCollections& dst, InstanceContext context);
+void addShaderCodeOutputStruct         (vk::SourceCollections& dst, InstanceContext context);
+
+struct TestParams
+{
+       string                                                                                  name;
+       string                                                                                  type;
+       int                                                                                             numComponents;
+       FunctionPrograms1<InstanceContext>::Function    shaderInit;
+};
+
+const TestParams       params[]        =
+{
+       { "float",              "f32",                  1                               , addShaderCodeOutputFloat              },
+       { "vec4",               "v4f32",                4                               , addShaderCodeOutputVector             },
+       { "matrix",             "matrix",               2 * 4                   , addShaderCodeOutputMatrix             },
+       { "floatarray", "floatArray",   8                               , addShaderCodeOutputFloatArray },
+       { "struct",             "struct",               2 * 4 + 4 + 4   , addShaderCodeOutputStruct             }
+};
+
+const string           common          =
+       "                %f32_1 = OpConstant %f32 1\n"
+       "              %v4f32_1 = OpConstantComposite %v4f32 %f32_1 %f32_1 %f32_1 %f32_1\n"
+       "               %matrix = OpTypeMatrix %v4f32 2\n"
+       "             %matrix_1 = OpConstantComposite %matrix %v4f32_1 %v4f32_1\n"
+       "               %struct = OpTypeStruct %matrix %v4f32 %f32 %f32 %f32 %f32\n"
+       "             %struct_1 = OpConstantComposite %struct %matrix_1 %v4f32_1 %f32_1 %f32_1 %f32_1 %f32_1\n"
+       "              %c_u32_8 = OpConstant %u32 8\n"
+       "           %floatArray = OpTypeArray %f32 %c_u32_8\n"
+       "         %floatArray_1 = OpConstantComposite %floatArray %f32_1 %f32_1 %f32_1 %f32_1 %f32_1 %f32_1 %f32_1 %f32_1\n"
+       "          %numElements = OpConstant %u32 ${count}\n"
+       "          %outputArray = OpTypeArray %${type} %numElements\n"
+       "               %Output = OpTypeStruct %outputArray\n"
+       "          %_ptr_Output = OpTypePointer StorageBuffer %Output\n"
+       "                %sbPtr = OpTypePointer StorageBuffer %${type}\n"
+       "           %dataOutput = OpVariable %_ptr_Output StorageBuffer\n";
+
+const string           decorations     =
+       "                         OpDecorate %outputArray ArrayStride ${arrayStride}\n"
+       "                         OpMemberDecorate %Output 0 Offset 0\n"
+       "                         OpDecorate %Output Block\n"
+       "                         OpDecorate %dataOutput DescriptorSet 0\n"
+       "                         OpDecorate %dataOutput Binding 0\n"
+       "                         OpDecorate %floatArray ArrayStride 4\n"
+       "                         OpMemberDecorate %struct 0 ColMajor\n"
+       "                         OpMemberDecorate %struct 0 Offset 0\n"
+       "                         OpMemberDecorate %struct 0 MatrixStride 16\n"
+       "                         OpMemberDecorate %struct 1 Offset 32\n"
+       "                         OpMemberDecorate %struct 2 Offset 48\n"
+       "                         OpMemberDecorate %struct 3 Offset 52\n"
+       "                         OpMemberDecorate %struct 4 Offset 56\n"
+       "                         OpMemberDecorate %struct 5 Offset 60\n"
+       "${extraDecorations:opt}";
+
+void addComputeVariableInitPrivateTest (tcu::TestCaseGroup* group)
+{
+       tcu::TestContext&       testCtx                 = group->getTestContext();
+       const int                       numFloats               = 128;
+       tcu::TestCaseGroup*     privateGroup    = new tcu::TestCaseGroup(testCtx, "private", "Tests OpVariable initialization in private storage class.");
+       ComputeShaderSpec       spec;
+       vector<float>           expectedOutput;
+
+       const StringTemplate shaderSourceTemplate (
+               string(
+               "                         OpCapability Shader\n"
+               "                         OpExtension \"SPV_KHR_storage_buffer_storage_class\"\n"
+               "                    %1 = OpExtInstImport \"GLSL.std.450\"\n"
+               "                         OpMemoryModel Logical GLSL450\n"
+               "                         OpEntryPoint GLCompute %main \"main\" %gl_GlobalInvocationID\n"
+               "                         OpExecutionMode %main LocalSize 1 1 1\n"
+               "                         OpSource GLSL 430\n"
+               "                         OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId\n")
+               + decorations + string(
+               "                 %void = OpTypeVoid\n"
+               "             %voidFunc = OpTypeFunction %void\n"
+               "                  %f32 = OpTypeFloat 32\n"
+               "                  %u32 = OpTypeInt 32 0\n"
+               "              %c_u32_0 = OpConstant %u32 0\n"
+               "                %v4f32 = OpTypeVector %f32 4\n")
+               + common + string(
+               "              %dataPtr = OpTypePointer Private %${type}\n"
+               "   %_ptr_Function_uint = OpTypePointer Function %u32\n"
+               "               %v3uint = OpTypeVector %u32 3\n"
+               "    %_ptr_Input_v3uint = OpTypePointer Input %v3uint\n"
+               "%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input\n"
+               "      %_ptr_Input_uint = OpTypePointer Input %u32\n"
+               "                  %int = OpTypeInt 32 1\n"
+               "                %int_0 = OpConstant %int 0\n"
+               "                   %f1 = OpVariable %dataPtr Private %${constData}\n"
+               "                 %main = OpFunction %void None %voidFunc\n"
+               "                %entry = OpLabel\n"
+               "        %invocationPtr = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %c_u32_0\n"
+               "           %invocation = OpLoad %u32 %invocationPtr\n"
+               "           %outputData = OpLoad %${type} %f1\n"
+               "            %outputPtr = OpAccessChain %sbPtr %dataOutput %int_0 %invocation\n"
+               "                         OpStore %outputPtr %outputData\n"
+               "                         OpReturn\n"
+               "                         OpFunctionEnd\n"));
+
+       group->addChild(privateGroup);
+
+       expectedOutput.reserve(numFloats);
+       for (deUint32 numIdx = 0; numIdx < numFloats; ++numIdx)
+               expectedOutput.push_back(1.0f);
+
+       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+
+       for (int paramIdx = 0; paramIdx < DE_LENGTH_OF_ARRAY(params); paramIdx++)
+       {
+               map<string, string> shaderSpec;
+               const int                       numComponents   = params[paramIdx].numComponents;
+               const int                       numElements             = numFloats / numComponents;
+
+               shaderSpec["type"]                      = params[paramIdx].type;
+               shaderSpec["arrayStride"]       = de::toString(numComponents * 4);
+               shaderSpec["count"]                     = de::toString(numElements);
+               shaderSpec["constData"]         = params[paramIdx].type + "_1";
+
+               if (params[paramIdx].type == "matrix")
+               {
+                       shaderSpec["extraDecorations"] =
+                               "                         OpMemberDecorate %Output 0 ColMajor\n"
+                               "                         OpMemberDecorate %Output 0 MatrixStride 16\n";
+               }
+
+               spec.assembly                           = shaderSourceTemplate.specialize(shaderSpec);
+               spec.numWorkGroups                      = IVec3(numElements, 1, 1);
+               spec.extensions.push_back("VK_KHR_storage_buffer_storage_class");
+
+               privateGroup->addChild(new SpvAsmComputeShaderCase(testCtx, params[paramIdx].name.c_str(), "", spec));
+       }
+}
+
+void addGraphicsVariableInitPrivateTest (tcu::TestCaseGroup* group)
+{
+       tcu::TestContext&               testCtx                         = group->getTestContext();
+       map<string, string>             fragments;
+       RGBA                                    defaultColors[4];
+       GraphicsResources               resources;
+       vector<string>                  extensions;
+       tcu::TestCaseGroup*             privateGroup            = new tcu::TestCaseGroup(testCtx, "private", "Tests OpVariable initialization in private storage class.");
+       const int                               numFloats                       = 128;
+       vector<float>                   expectedOutput;
+
+       StringTemplate                  preMain                         (
+               common +
+               "              %dataPtr = OpTypePointer Private %${type}\n"
+               "                   %f1 = OpVariable %dataPtr Private %${constData}\n"
+               );
+
+       StringTemplate                  decoration                      (decorations);
+
+       StringTemplate                  testFun                         (
+               "            %test_code = OpFunction %v4f32 None %v4f32_function\n"
+               "                %param = OpFunctionParameter %v4f32\n"
+               "                %entry = OpLabel\n"
+               "           %outputData = OpLoad %${type} %f1\n"
+               "                    %i = OpVariable %fp_i32 Function\n"
+               "                         OpStore %i %c_i32_0\n"
+               "                         OpBranch %loop\n"
+               "                 %loop = OpLabel\n"
+               "                   %15 = OpLoad %i32 %i\n"
+               "                   %lt = OpSLessThan %bool %15 %numElements\n"
+               "                         OpLoopMerge %merge %inc None\n"
+               "                         OpBranchConditional %lt %write %merge\n"
+               "                %write = OpLabel\n"
+               "                   %30 = OpLoad %i32 %i\n"
+               "            %outputPtr = OpAccessChain %sbPtr %dataOutput %c_i32_0 %30\n"
+               "                         OpStore %outputPtr %outputData\n"
+               "                         OpBranch %inc\n"
+               "                  %inc = OpLabel\n"
+               "                   %37 = OpLoad %i32 %i\n"
+               "                   %39 = OpIAdd %i32 %37 %c_i32_1\n"
+               "                         OpStore %i %39\n"
+               "                         OpBranch %loop\n"
+               "                %merge = OpLabel\n"
+               "                         OpReturnValue %param\n"
+               "                         OpFunctionEnd\n");
+
+
+       group->addChild(privateGroup);
+
+       getDefaultColors(defaultColors);
+
+       expectedOutput.reserve(numFloats);
+       for (deUint32 numIdx = 0; numIdx < numFloats; ++numIdx)
+               expectedOutput.push_back(1.0f);
+
+       resources.outputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(expectedOutput))));
+       extensions.push_back("VK_KHR_storage_buffer_storage_class");
+
+       for (int paramIdx = 0; paramIdx < DE_LENGTH_OF_ARRAY(params); paramIdx++)
+       {
+               map<string, string> shaderSpec;
+               const int                       numComponents   = params[paramIdx].numComponents;
+               const int                       numElements             = numFloats / numComponents;
+
+               shaderSpec["type"]                      = params[paramIdx].type;
+               shaderSpec["arrayStride"]       = de::toString(numComponents * 4);
+               shaderSpec["count"]                     = de::toString(numElements);
+               shaderSpec["constData"]         = params[paramIdx].type + "_1";
+
+               if (params[paramIdx].type == "matrix")
+               {
+                       shaderSpec["extraDecorations"] =
+                               "                         OpMemberDecorate %Output 0 ColMajor\n"
+                               "                         OpMemberDecorate %Output 0 MatrixStride 16\n";
+               }
+
+               fragments["extension"]          = "OpExtension \"SPV_KHR_storage_buffer_storage_class\"\n";
+               fragments["pre_main"]           = preMain.specialize(shaderSpec);
+               fragments["decoration"]         = decoration.specialize(shaderSpec);
+               fragments["testfun"]            = testFun.specialize(shaderSpec);
+
+               createTestsForAllStages(params[paramIdx].name, defaultColors, defaultColors, fragments, resources, extensions, privateGroup);
+       }
+}
+
+void addShaderCodeOutput(vk::SourceCollections& dst, InstanceContext& context, string type)
+{
+       SpirvVersion                    targetSpirvVersion      = context.resources.spirvVersion;
+       map<string, string>             spec;
+
+       // Needed for preventing duplicate pointer declarations.
+       if (type == "v4f32")
+       {
+               spec["vec4ptrDeclOutput"]       = "";
+               spec["vec4ptrOutput"]           = "outputPtr";
+               spec["vec4ptrDeclInput"]        = "";
+               spec["vec4ptrInput"]            = "inputPtr";
+       }
+       else
+       {
+               spec["vec4ptrDeclOutput"]       = "     %_ptr_Output_v4f32 = OpTypePointer Output %v4f32\n";
+               spec["vec4ptrOutput"]           = "_ptr_Output_v4f32";
+               spec["vec4ptrDeclInput"]        = "     %_ptr_Input_v4f32 = OpTypePointer Input %v4f32\n";
+               spec["vec4ptrInput"]            = "_ptr_Input_v4f32";
+       }
+
+       const string                    types                           =
+               "                     %u32 = OpTypeInt 32 0\n"
+               "                     %f32 = OpTypeFloat 32\n"
+               "                   %v4f32 = OpTypeVector %f32 4\n"
+               "                  %matrix = OpTypeMatrix %v4f32 2\n"
+               "                 %c_u32_0 = OpConstant %u32 0\n"
+               "                 %c_u32_8 = OpConstant %u32 8\n"
+               "              %floatArray = OpTypeArray %f32 %c_u32_8\n";
+
+       string                                  outputDecoration        = "                       OpDecorate %Output Block\n";
+
+       if (type == "matrix")
+       {
+               spec["extraDecorations"] =
+                       "                       OpMemberDecorate %Output 0 ColMajor\n"
+                       "                       OpMemberDecorate %Output 0 MatrixStride 16\n";
+       }
+
+       // Output selected data type with all components having value one.
+       const StringTemplate    vertexShader            (
+               string(
+               "                            OpCapability Shader\n"
+               "                       %1 = OpExtInstImport \"GLSL.std.450\"\n"
+               "                            OpMemoryModel Logical GLSL450\n"
+               "                            OpEntryPoint Vertex %main \"main\" %_ %position %vtxColor %color %outData\n"
+               "                            OpSource GLSL 430\n"
+               "                            OpMemberDecorate %gl_PerVertex 0 BuiltIn Position\n"
+               "                            OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize\n"
+               "                            OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance\n"
+               "                            OpDecorate %gl_PerVertex Block\n"
+               "                            OpDecorate %position Location 0\n"
+               "                            OpDecorate %vtxColor Location 1\n"
+               "                            OpDecorate %color Location 1\n"
+               "                            OpDecorate %outData Location 2\n"
+               "                            OpDecorate %floatArray ArrayStride 4\n"
+               "                    %void = OpTypeVoid\n"
+               "                       %3 = OpTypeFunction %void\n")
+               + types + string(
+               "                   %f32_1 = OpConstant %f32 1\n"
+               "                 %v4f32_1 = OpConstantComposite %v4f32 %f32_1 %f32_1 %f32_1 %f32_1\n"
+               "                %matrix_1 = OpConstantComposite %matrix %v4f32_1 %v4f32_1\n"
+               "            %floatArray_1 = OpConstantComposite %floatArray %f32_1 %f32_1 %f32_1 %f32_1 %f32_1 %f32_1 %f32_1 %f32_1\n"
+               "                 %c_u32_1 = OpConstant %u32 1\n"
+               "          %_arr_f32_u32_1 = OpTypeArray %f32 %c_u32_1\n"
+               "            %gl_PerVertex = OpTypeStruct %v4f32 %f32 %_arr_f32_u32_1\n"
+               "%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex\n"
+               "                       %_ = OpVariable %_ptr_Output_gl_PerVertex Output\n"
+               "               %outputPtr = OpTypePointer Output %${type}\n"
+               "                 %outData = OpVariable %outputPtr Output %${type}_1\n"
+               "        %_ptr_Input_v4f32 = OpTypePointer Input %v4f32\n"
+               "                %position = OpVariable %_ptr_Input_v4f32 Input\n"
+               "${vec4ptrDeclOutput}"
+               "                %vtxColor = OpVariable %${vec4ptrOutput} Output\n"
+               "                   %color = OpVariable %_ptr_Input_v4f32 Input\n"
+               "                    %main = OpFunction %void None %3\n"
+               "                   %entry = OpLabel\n"
+               "                 %posData = OpLoad %v4f32 %position\n"
+               "            %posOutputPtr = OpAccessChain %${vec4ptrOutput} %_ %c_u32_0\n"
+               "                            OpStore %posOutputPtr %posData\n"
+               "               %colorData = OpLoad %v4f32 %color\n"
+               "                            OpStore %vtxColor %colorData\n"
+               "                            OpReturn\n"
+               "                            OpFunctionEnd\n"));
+
+       // Pass incoming data into buffer
+       const StringTemplate    fragmentShader          (
+               string(
+               "                       OpCapability Shader\n"
+               "                       OpExtension \"SPV_KHR_storage_buffer_storage_class\"\n"
+               "                  %1 = OpExtInstImport \"GLSL.std.450\"\n"
+               "                       OpMemoryModel Logical GLSL450\n"
+               "                       OpEntryPoint Fragment %main \"main\" %fragColor %vtxColor %inData\n"
+               "                       OpExecutionMode %main OriginUpperLeft\n"
+               "                       OpSource GLSL 430\n"
+               "                       OpDecorate %fragColor Location 0\n"
+               "                       OpDecorate %vtxColor Location 1\n"
+               "                       OpMemberDecorate %Output 0 Offset 0\n"
+               "                       OpDecorate %Output Block\n"
+               "                       OpDecorate %dataOutput DescriptorSet 0\n"
+               "                       OpDecorate %dataOutput Binding 0\n"
+               "                       OpDecorate %inData Location 2\n"
+               "                       OpDecorate %floatArray ArrayStride 4\n"
+               "${extraDecorations:opt}"
+               "               %void = OpTypeVoid\n"
+               "                  %3 = OpTypeFunction %void\n")
+               + types + string(
+               "           %inputPtr = OpTypePointer Input %${type}\n"
+               "             %inData = OpVariable %inputPtr Input\n"
+               "  %_ptr_Output_v4f32 = OpTypePointer Output %v4f32\n"
+               "          %fragColor = OpVariable %_ptr_Output_v4f32 Output\n"
+               "${vec4ptrDeclInput}"
+               "           %vtxColor = OpVariable %${vec4ptrInput} Input\n"
+               "             %Output = OpTypeStruct %${type}\n"
+               "        %_ptr_Output = OpTypePointer StorageBuffer %Output\n"
+               "         %dataOutput = OpVariable %_ptr_Output StorageBuffer\n"
+               "          %outputPtr = OpTypePointer StorageBuffer %${type}\n"
+               "               %main = OpFunction %void None %3\n"
+               "              %entry = OpLabel\n"
+               "          %colorData = OpLoad %v4f32 %vtxColor\n"
+               "                       OpStore %fragColor %colorData\n"
+               "          %inputData = OpLoad %${type} %inData\n"
+               "      %outputDataPtr = OpAccessChain %outputPtr %dataOutput %c_u32_0\n"
+               "                       OpStore %outputDataPtr %inputData\n"
+               "                       OpReturn\n"
+               "                       OpFunctionEnd\n"));
+
+       spec["type"] = type;
+
+       dst.spirvAsmSources.add("vert", DE_NULL) << vertexShader.specialize(spec) << SpirVAsmBuildOptions(targetSpirvVersion);
+       dst.spirvAsmSources.add("frag", DE_NULL) << fragmentShader.specialize(spec) << SpirVAsmBuildOptions(targetSpirvVersion);
+}
+
+void addShaderCodeOutputFloat (vk::SourceCollections& dst, InstanceContext context)
+{
+       addShaderCodeOutput(dst, context, "f32");
+}
+
+void addShaderCodeOutputVector (vk::SourceCollections& dst, InstanceContext context)
+{
+       addShaderCodeOutput(dst, context, "v4f32");
+}
+
+void addShaderCodeOutputMatrix (vk::SourceCollections& dst, InstanceContext context)
+{
+       addShaderCodeOutput(dst, context, "matrix");
+}
+
+void addShaderCodeOutputFloatArray (vk::SourceCollections& dst, InstanceContext context)
+{
+       addShaderCodeOutput(dst, context, "floatArray");
+}
+
+void addShaderCodeOutputStruct (vk::SourceCollections& dst, InstanceContext context)
+{
+       SpirvVersion            targetSpirvVersion      = context.resources.spirvVersion;
+
+       // Output structure of matrix, vec4, and four floats all having values of 1.
+       const string    vertexShader    =
+               "                            OpCapability Shader\n"
+               "                       %1 = OpExtInstImport \"GLSL.std.450\"\n"
+               "                            OpMemoryModel Logical GLSL450\n"
+               "                            OpEntryPoint Vertex %main \"main\" %_ %position %vtxColor %color %outData\n"
+               "                            OpSource GLSL 430\n"
+               "                            OpMemberDecorate %gl_PerVertex 0 BuiltIn Position\n"
+               "                            OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize\n"
+               "                            OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance\n"
+               "                            OpDecorate %gl_PerVertex Block\n"
+               "                            OpDecorate %position Location 0\n"
+               "                            OpDecorate %vtxColor Location 1\n"
+               "                            OpDecorate %color Location 1\n"
+               "                            OpDecorate %outData Location 2\n"
+               "                            OpMemberDecorate %Data 0 ColMajor\n"
+               "                            OpMemberDecorate %Data 0 Offset 0\n"
+               "                            OpMemberDecorate %Data 0 MatrixStride 16\n"
+               "                            OpMemberDecorate %Data 1 Offset 32\n"
+               "                            OpMemberDecorate %Data 2 Offset 48\n"
+               "                            OpMemberDecorate %Data 3 Offset 52\n"
+               "                            OpMemberDecorate %Data 4 Offset 56\n"
+               "                            OpMemberDecorate %Data 5 Offset 60\n"
+               "                            OpMemberDecorate %DataOutput 0 Offset 0\n"
+               "                    %void = OpTypeVoid\n"
+               "                %voidFunc = OpTypeFunction %void\n"
+               "                   %float = OpTypeFloat 32\n"
+               "                 %v4float = OpTypeVector %float 4\n"
+               "                    %uint = OpTypeInt 32 0\n"
+               "                  %uint_1 = OpConstant %uint 1\n"
+               "       %_arr_float_uint_1 = OpTypeArray %float %uint_1\n"
+               "            %gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1\n"
+               "%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex\n"
+               "                       %_ = OpVariable %_ptr_Output_gl_PerVertex Output\n"
+               "                     %int = OpTypeInt 32 1\n"
+               "                   %int_0 = OpConstant %int 0\n"
+               "      %_ptr_Input_v4float = OpTypePointer Input %v4float\n"
+               "                %position = OpVariable %_ptr_Input_v4float Input\n"
+               "     %_ptr_Output_v4float = OpTypePointer Output %v4float\n"
+               "                %vtxColor = OpVariable %_ptr_Output_v4float Output\n"
+               "                   %color = OpVariable %_ptr_Input_v4float Input\n"
+               "             %mat2v4float = OpTypeMatrix %v4float 2\n"
+               "                    %Data = OpTypeStruct %mat2v4float %v4float %float %float %float %float\n"
+               "              %DataOutput = OpTypeStruct %Data\n"
+               "  %_ptr_Output_DataOutput = OpTypePointer Output %DataOutput\n"
+               "                 %float_1 = OpConstant %float 1\n"
+               "                  %vec4_1 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1\n"
+               "                %matrix_1 = OpConstantComposite %mat2v4float %vec4_1 %vec4_1\n"
+               " %_ptr_Output_mat2v4float = OpTypePointer Output %mat2v4float\n"
+               "       %_ptr_Output_float = OpTypePointer Output %float\n"
+               "                  %data_1 = OpConstantComposite %Data %matrix_1 %vec4_1 %float_1 %float_1 %float_1 %float_1\n"
+               "            %dataOutput_1 = OpConstantComposite %DataOutput %data_1\n"
+               "                 %outData = OpVariable %_ptr_Output_DataOutput Output %dataOutput_1\n"
+               "                    %main = OpFunction %void None %voidFunc\n"
+               "                   %entry = OpLabel\n"
+               "                 %posData = OpLoad %v4float %position\n"
+               "                  %posPtr = OpAccessChain %_ptr_Output_v4float %_ %int_0\n"
+               "                            OpStore %posPtr %posData\n"
+               "               %colorData = OpLoad %v4float %color\n"
+               "                            OpStore %vtxColor %colorData\n"
+               "                            OpReturn\n"
+               "                            OpFunctionEnd\n";
+
+       // Pass the incoming input struct into buffer.
+       const string    fragmentShader  =
+               "                            OpCapability Shader\n"
+               "                            OpExtension \"SPV_KHR_storage_buffer_storage_class\"\n"
+               "                       %1 = OpExtInstImport \"GLSL.std.450\"\n"
+               "                            OpMemoryModel Logical GLSL450\n"
+               "                            OpEntryPoint Fragment %main \"main\" %fragColor %vtxColor %inData\n"
+               "                            OpExecutionMode %main OriginUpperLeft\n"
+               "                            OpSource GLSL 430\n"
+               "                            OpDecorate %fragColor Location 0\n"
+               "                            OpDecorate %vtxColor Location 1\n"
+               "                            OpMemberDecorate %Data 0 ColMajor\n"
+               "                            OpMemberDecorate %Data 0 Offset 0\n"
+               "                            OpMemberDecorate %Data 0 MatrixStride 16\n"
+               "                            OpMemberDecorate %Data 1 Offset 32\n"
+               "                            OpMemberDecorate %Data 2 Offset 48\n"
+               "                            OpMemberDecorate %Data 3 Offset 52\n"
+               "                            OpMemberDecorate %Data 4 Offset 56\n"
+               "                            OpMemberDecorate %Data 5 Offset 60\n"
+               "                            OpMemberDecorate %Output 0 Offset 0\n"
+               "                            OpDecorate %Output Block\n"
+               "                            OpDecorate %dataOutput DescriptorSet 0\n"
+               "                            OpDecorate %dataOutput Binding 0\n"
+               "                            OpDecorate %inData Location 2\n"
+               "                    %void = OpTypeVoid\n"
+               "                %voidFunc = OpTypeFunction %void\n"
+               "                   %float = OpTypeFloat 32\n"
+               "                 %v4float = OpTypeVector %float 4\n"
+               "     %_ptr_Output_v4float = OpTypePointer Output %v4float\n"
+               "               %fragColor = OpVariable %_ptr_Output_v4float Output\n"
+               "      %_ptr_Input_v4float = OpTypePointer Input %v4float\n"
+               "                %vtxColor = OpVariable %_ptr_Input_v4float Input\n"
+               "             %mat2v4float = OpTypeMatrix %v4float 2\n"
+               "                    %Data = OpTypeStruct %mat2v4float %v4float %float %float %float %float\n"
+               "                  %Output = OpTypeStruct %Data\n"
+               "             %_ptr_Output = OpTypePointer StorageBuffer %Output\n"
+               "              %dataOutput = OpVariable %_ptr_Output StorageBuffer\n"
+               "                     %int = OpTypeInt 32 1\n"
+               "                   %int_0 = OpConstant %int 0\n"
+               "               %DataInput = OpTypeStruct %Data\n"
+               "    %_ptr_Input_DataInput = OpTypePointer Input %DataInput\n"
+               "                  %inData = OpVariable %_ptr_Input_DataInput Input\n"
+               "         %_ptr_Input_Data = OpTypePointer Input %Data\n"
+               "               %_ptr_Data = OpTypePointer StorageBuffer %Data\n"
+               "                    %main = OpFunction %void None %voidFunc\n"
+               "                   %entry = OpLabel\n"
+               "               %colorData = OpLoad %v4float %vtxColor\n"
+               "                            OpStore %fragColor %colorData\n"
+               "            %inputDataPtr = OpAccessChain %_ptr_Input_Data %inData %int_0\n"
+               "               %inputData = OpLoad %Data %inputDataPtr\n"
+               "           %outputDataPtr = OpAccessChain %_ptr_Data %dataOutput %int_0\n"
+               "                            OpStore %outputDataPtr %inputData\n"
+               "                            OpReturn\n"
+               "                            OpFunctionEnd\n";
+
+       dst.spirvAsmSources.add("vert", DE_NULL) << vertexShader << SpirVAsmBuildOptions(targetSpirvVersion);
+       dst.spirvAsmSources.add("frag", DE_NULL) << fragmentShader << SpirVAsmBuildOptions(targetSpirvVersion);
+}
+
+void addGraphicsVariableInitOutputTest (tcu::TestCaseGroup* group)
+{
+       tcu::TestContext&               testCtx                         = group->getTestContext();
+       map<string, string>             fragments;
+       RGBA                                    defaultColors[4];
+       tcu::TestCaseGroup*             outputGroup                     = new tcu::TestCaseGroup(testCtx, "output", "Tests OpVariable initialization in output storage class.");
+       vector<deInt32>                 noSpecConstants;
+       PushConstants                   noPushConstants;
+       GraphicsInterfaces              noInterfaces;
+       vector<string>                  extensions;
+       vector<string>                  features;
+       map<string, string>             noFragments;
+       StageToSpecConstantMap  specConstantMap;
+
+       const ShaderElement             pipelineStages[]        =
+       {
+               ShaderElement("vert", "main", VK_SHADER_STAGE_VERTEX_BIT),
+               ShaderElement("frag", "main", VK_SHADER_STAGE_FRAGMENT_BIT),
+       };
+
+       specConstantMap[VK_SHADER_STAGE_VERTEX_BIT]             = noSpecConstants;
+       specConstantMap[VK_SHADER_STAGE_FRAGMENT_BIT]   = noSpecConstants;
+
+       getDefaultColors(defaultColors);
+
+       group->addChild(outputGroup);
+
+       features.push_back("fragmentStoresAndAtomics");
+       extensions.push_back("VK_KHR_storage_buffer_storage_class");
+
+       for (int paramIdx = 0; paramIdx < DE_LENGTH_OF_ARRAY(params); paramIdx++)
+       {
+               const deUint32          numComponents   = params[paramIdx].numComponents;
+               GraphicsResources       resources;
+               vector<float>           expectedOutput;
+
+               expectedOutput.reserve(numComponents);
+               for (deUint32 numIdx = 0; numIdx < numComponents; ++numIdx)
+                       expectedOutput.push_back(1.0f);
+
+               resources.outputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(expectedOutput))));
+
+               {
+                       const InstanceContext& instanceContext = createInstanceContext(pipelineStages,
+                                                                                                                                                  defaultColors,
+                                                                                                                                                  defaultColors,
+                                                                                                                                                  noFragments,
+                                                                                                                                                  specConstantMap,
+                                                                                                                                                  noPushConstants,
+                                                                                                                                                  resources,
+                                                                                                                                                  noInterfaces,
+                                                                                                                                                  extensions,
+                                                                                                                                                  features,
+                                                                                                                                                  VulkanFeatures(),
+                                                                                                                                                  VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,
+                                                                                                                                                  QP_TEST_RESULT_FAIL,
+                                                                                                                                                  string());
+
+
+                       addFunctionCaseWithPrograms<InstanceContext>(outputGroup,
+                                                                                                                params[paramIdx].name.c_str(),
+                                                                                                                "",
+                                                                                                                params[paramIdx].shaderInit,
+                                                                                                                runAndVerifyDefaultPipeline,
+                                                                                                                instanceContext);
+               }
+       }
+}
+
+} // anonymous
+
+tcu::TestCaseGroup* createVariableInitComputeGroup (tcu::TestContext& testCtx)
+{
+       de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, "variable_init", "Compute tests for OpVariable initialization."));
+       addComputeVariableInitPrivateTest(group.get());
+
+       return group.release();
+}
+
+tcu::TestCaseGroup* createVariableInitGraphicsGroup (tcu::TestContext& testCtx)
+{
+       de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, "variable_init", "Graphics tests for OpVariable initialization."));
+       addGraphicsVariableInitPrivateTest(group.get());
+       addGraphicsVariableInitOutputTest(group.get());
+
+       return group.release();
+}
+
+} // SpirVAssembly
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariableInitTests.hpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariableInitTests.hpp
new file mode 100644 (file)
index 0000000..5c9ccdb
--- /dev/null
@@ -0,0 +1,40 @@
+#ifndef _VKTSPVASMVARIABLEINITTESTS_HPP
+#define _VKTSPVASMVARIABLEINITTESTS_HPP
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2018 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief SPIR-V Assembly Tests for OpVariable initializer
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "tcuTestCase.hpp"
+
+namespace vkt
+{
+namespace SpirVAssembly
+{
+
+tcu::TestCaseGroup*    createVariableInitComputeGroup  (tcu::TestContext& testCtx);
+tcu::TestCaseGroup*    createVariableInitGraphicsGroup (tcu::TestContext& testCtx);
+
+} // SpirVAssembly
+} // vkt
+
+#endif // _VKTSPVASMVARIABLEINITTESTS_HPP
index 24e0573..6fc758f 100644 (file)
@@ -199904,6 +199904,11 @@ dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.
 dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.vector_uint
 dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.uniform_16_to_16.stress_test
 dEQP-VK.spirv_assembly.instruction.compute.ubo_padding.mat2x2
+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
+dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.floatarray
+dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.struct
 dEQP-VK.spirv_assembly.instruction.compute.conditional_branch.same_labels_true
 dEQP-VK.spirv_assembly.instruction.compute.conditional_branch.same_labels_false
 dEQP-VK.spirv_assembly.instruction.compute.indexing.opaccesschain_u16
@@ -202283,6 +202288,36 @@ 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.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
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.float
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.vec4
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.matrix
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.floatarray
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.struct
 dEQP-VK.spirv_assembly.instruction.graphics.conditional_branch.same_labels_true_vert
 dEQP-VK.spirv_assembly.instruction.graphics.conditional_branch.same_labels_true_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.conditional_branch.same_labels_true_tesse
index 9ab2199..dd6eef5 100644 (file)
@@ -199904,6 +199904,11 @@ dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.
 dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.push_constant_16_to_32.vector_uint
 dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.uniform_16_to_16.stress_test
 dEQP-VK.spirv_assembly.instruction.compute.ubo_padding.mat2x2
+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
+dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.floatarray
+dEQP-VK.spirv_assembly.instruction.compute.variable_init.private.struct
 dEQP-VK.spirv_assembly.instruction.compute.conditional_branch.same_labels_true
 dEQP-VK.spirv_assembly.instruction.compute.conditional_branch.same_labels_false
 dEQP-VK.spirv_assembly.instruction.compute.indexing.opaccesschain_u16
@@ -202283,6 +202288,36 @@ 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.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
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.float_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.vec4_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.matrix_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.floatarray_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.private.struct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.float
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.vec4
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.matrix
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.floatarray
+dEQP-VK.spirv_assembly.instruction.graphics.variable_init.output.struct
 dEQP-VK.spirv_assembly.instruction.graphics.conditional_branch.same_labels_true_vert
 dEQP-VK.spirv_assembly.instruction.graphics.conditional_branch.same_labels_true_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.conditional_branch.same_labels_true_tesse