Test zero-size unused specialization constants
authorRicardo Garcia <rgarcia@igalia.com>
Tue, 20 Jul 2021 14:20:50 +0000 (16:20 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 29 Jul 2021 07:24:54 +0000 (07:24 +0000)
According to the spec for VkSpecializationMapEntry

> If a constantID value is not a specialization constant ID used in the
> shader, that map entry does not affect the behavior of the pipeline.

So it should be legal to use VkSpecializationMapEntry structures
indicating size zero for a given constant as long as the constant is not
used in the shaders.

This commits adds new test variants that verify implementations handle
such cases.

New tests:
dEQP-VK.pipeline.spec_constant.*.basic.*unused_*

Affected tests:
dEQP-VK.pipeline.spec_constant.*

Components: Vulkan
VK-GL-CTS issue: 3011

Change-Id: I2a8439368722e6caaa828fd91e061cfd5e2be61d

android/cts/master/vk-master-2021-03-01/pipeline.txt
android/cts/master/vk-master/pipeline.txt
external/vulkancts/modules/vulkan/pipeline/vktPipelineSpecConstantTests.cpp
external/vulkancts/mustpass/master/vk-default/pipeline.txt

index b21e8d5..18ae91f 100644 (file)
@@ -14985,6 +14985,10 @@ dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.default_value.int8
 dEQP-VK.pipeline.spec_constant.graphics.fragment.default_value.uint8
 dEQP-VK.pipeline.spec_constant.graphics.fragment.default_value.int16
@@ -15047,6 +15051,10 @@ dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.default_value.int8
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.default_value.uint8
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.default_value.int16
@@ -15109,6 +15117,10 @@ dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.default_value.int8
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.default_value.uint8
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.default_value.int16
@@ -15171,6 +15183,10 @@ dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.default_value.int8
 dEQP-VK.pipeline.spec_constant.graphics.geometry.default_value.uint8
 dEQP-VK.pipeline.spec_constant.graphics.geometry.default_value.int16
@@ -15233,6 +15249,10 @@ dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.compute.default_value.int8
 dEQP-VK.pipeline.spec_constant.compute.default_value.uint8
 dEQP-VK.pipeline.spec_constant.compute.default_value.int16
@@ -15295,6 +15315,10 @@ dEQP-VK.pipeline.spec_constant.compute.basic.double_packed
 dEQP-VK.pipeline.spec_constant.compute.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.compute.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.compute.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_single
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_multiple_packed
 dEQP-VK.pipeline.multisample.standardsampleposition.r8g8b8a8_unorm.samples_2
 dEQP-VK.pipeline.multisample.standardsampleposition.r8g8b8a8_unorm.samples_4
 dEQP-VK.pipeline.multisample.standardsampleposition.r8g8b8a8_unorm.samples_8
index fc3dfba..7b67e57 100644 (file)
@@ -137838,6 +137838,10 @@ dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.vertex.builtin.default
 dEQP-VK.pipeline.spec_constant.graphics.vertex.builtin.specialized
 dEQP-VK.pipeline.spec_constant.graphics.vertex.expression.spec_const_expression
@@ -138068,6 +138072,10 @@ dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.builtin.default
 dEQP-VK.pipeline.spec_constant.graphics.fragment.builtin.specialized
 dEQP-VK.pipeline.spec_constant.graphics.fragment.expression.spec_const_expression
@@ -138298,6 +138306,10 @@ dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.builtin.default
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.builtin.specialized
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.expression.spec_const_expression
@@ -138528,6 +138540,10 @@ dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.builtin.default
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.builtin.specialized
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.expression.spec_const_expression
@@ -138758,6 +138774,10 @@ dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.builtin.default
 dEQP-VK.pipeline.spec_constant.graphics.geometry.builtin.specialized
 dEQP-VK.pipeline.spec_constant.graphics.geometry.expression.spec_const_expression
@@ -138988,6 +139008,10 @@ dEQP-VK.pipeline.spec_constant.compute.basic.double_packed
 dEQP-VK.pipeline.spec_constant.compute.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.compute.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.compute.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_single
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.compute.builtin.default
 dEQP-VK.pipeline.spec_constant.compute.builtin.specialized
 dEQP-VK.pipeline.spec_constant.compute.expression.spec_const_expression
index 7cb5511..ea04145 100644 (file)
@@ -101,20 +101,23 @@ struct SpecConstant
        std::string                     declarationCode;        //!< syntax to declare the constant, use ${ID} as an ID placeholder
        deUint32                        size;                           //!< data size on the host, 0 = no specialized value
        GenericValue            specValue;                      //!< specialized value passed by the API
+       bool                            forceUse;                       //!< always include a VkSpecializationMapEntry for this spec constant
 
        SpecConstant (const deUint32 specID_, const std::string declarationCode_)
                : specID                        (specID_)
                , declarationCode       (declarationCode_)
                , size                          (0)
                , specValue                     ()
+               , forceUse                      (false)
        {
        }
 
-       SpecConstant (const deUint32 specID_, const std::string declarationCode_, const deUint32 size_, const GenericValue specValue_)
+       SpecConstant (const deUint32 specID_, const std::string declarationCode_, const deUint32 size_, const GenericValue specValue_, bool forceUse_ = false)
                : specID                        (specID_)
                , declarationCode       (declarationCode_)
                , size                          (size_)
                , specValue                     (specValue_)
+               , forceUse                      (forceUse_)
        {
        }
 };
@@ -221,9 +224,10 @@ Specialization::Specialization (const std::vector<SpecConstant>& specConstants,
        deUint32 offset = 0u;
        for (const auto& sc : specConstants)
        {
-               if (sc.size != 0u)
+               if (sc.size != 0u || sc.forceUse)
                {
-                       deMemcpy(&m_data[offset], &sc.specValue, sc.size);
+                       if (sc.size > 0u)
+                               deMemcpy(&m_data[offset], &sc.specValue, sc.size);
                        m_entries.push_back(makeSpecializationMapEntry(sc.specID, offset, sc.size));
                        offset += (packData ? sc.size : kGenericValueSize);
                }
@@ -1418,6 +1422,70 @@ tcu::TestCaseGroup* createBasicSpecializationTests (tcu::TestContext& testCtx, c
                }
        }
 
+       CaseDefinition defsUnusedCases[] =
+       {
+               {
+                       "unused_single",
+                       makeVector(SpecConstant(0u, "", 0u, GenericValue(), true)),
+                       4,
+                       "    int r0;\n",
+                       "",
+                       "    sb_out.r0 = 77;\n",
+                       makeVector(OffsetValue(4u, 0u, makeValueInt32(77))),
+                       (FeatureFlags)0,
+                       false,
+               },
+               {
+                       "unused_single_packed",
+                       makeVector(SpecConstant(0u, "", 0u, GenericValue(), true),
+                                          SpecConstant(1u, "layout(constant_id = ${ID}) const int sc1 = 0;", 4u, makeValueInt32(100))),
+                       4,
+                       "    int r1;\n",
+                       "",
+                       "    sb_out.r1 = sc1;\n",
+                       makeVector(OffsetValue(4u, 0u, makeValueInt32(100))),
+                       (FeatureFlags)0,
+                       true,
+               },
+               {
+                       "unused_multiple",
+                       makeVector(SpecConstant( 7u, "layout(constant_id = ${ID}) const int sc0 = 0;", 4u, makeValueInt32(-999)),
+                                          SpecConstant( 1u, "", 0u, GenericValue(), true),
+                                          SpecConstant(17u, "layout(constant_id = ${ID}) const int sc1 = 0;", 4u, makeValueInt32( 999)),
+                                          SpecConstant( 3u, "", 0u, GenericValue(), true)),
+                       8,
+                       "    int r0;\n"
+                       "    int r1;\n",
+                       "",
+                       "    sb_out.r0 = sc0;\n"
+                       "    sb_out.r1 = sc1;\n",
+                       makeVector(OffsetValue(4, 0, makeValueInt32(-999)),
+                                          OffsetValue(4, 4, makeValueInt32( 999))),
+                       (FeatureFlags)0,
+                       false,
+               },
+               {
+                       "unused_multiple_packed",
+                       makeVector(SpecConstant( 7u, "layout(constant_id = ${ID}) const int sc0 = 0;", 4u, makeValueInt32(-999)),
+                                          SpecConstant( 1u, "", 0u, GenericValue(), true),
+                                          SpecConstant( 3u, "", 0u, GenericValue(), true),
+                                          SpecConstant(17u, "layout(constant_id = ${ID}) const int sc1 = 0;", 4u, makeValueInt32( 999))),
+                       8,
+                       "    int r0;\n"
+                       "    int r1;\n",
+                       "",
+                       "    sb_out.r0 = sc0;\n"
+                       "    sb_out.r1 = sc1;\n",
+                       makeVector(OffsetValue(4, 0, makeValueInt32(-999)),
+                                          OffsetValue(4, 4, makeValueInt32( 999))),
+                       (FeatureFlags)0,
+                       true,
+               },
+       };
+
+       for (const auto& caseDef : defsUnusedCases)
+               testGroup->addChild(new SpecConstantTest(testCtx, shaderStage, caseDef));
+
        return testGroup.release();
 }
 
index 86703bd..7e6c2d3 100644 (file)
@@ -137849,6 +137849,10 @@ dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.vertex.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.vertex.builtin.default
 dEQP-VK.pipeline.spec_constant.graphics.vertex.builtin.specialized
 dEQP-VK.pipeline.spec_constant.graphics.vertex.expression.spec_const_expression
@@ -138079,6 +138083,10 @@ dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.fragment.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.fragment.builtin.default
 dEQP-VK.pipeline.spec_constant.graphics.fragment.builtin.specialized
 dEQP-VK.pipeline.spec_constant.graphics.fragment.expression.spec_const_expression
@@ -138309,6 +138317,10 @@ dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.tess_control.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.builtin.default
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.builtin.specialized
 dEQP-VK.pipeline.spec_constant.graphics.tess_control.expression.spec_const_expression
@@ -138539,6 +138551,10 @@ dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.tess_eval.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.builtin.default
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.builtin.specialized
 dEQP-VK.pipeline.spec_constant.graphics.tess_eval.expression.spec_const_expression
@@ -138769,6 +138785,10 @@ dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.double_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_single
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.graphics.geometry.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.graphics.geometry.builtin.default
 dEQP-VK.pipeline.spec_constant.graphics.geometry.builtin.specialized
 dEQP-VK.pipeline.spec_constant.graphics.geometry.expression.spec_const_expression
@@ -138999,6 +139019,10 @@ dEQP-VK.pipeline.spec_constant.compute.basic.double_packed
 dEQP-VK.pipeline.spec_constant.compute.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.compute.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.compute.basic.mixed_reversed_packed
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_single
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_single_packed
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_multiple
+dEQP-VK.pipeline.spec_constant.compute.basic.unused_multiple_packed
 dEQP-VK.pipeline.spec_constant.compute.builtin.default
 dEQP-VK.pipeline.spec_constant.compute.builtin.specialized
 dEQP-VK.pipeline.spec_constant.compute.expression.spec_const_expression