Refactor: Compatible compute and graphics VerifyIO
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / modules / vulkan / spirv_assembly / vktSpvAsmVariablePointersTests.cpp
index a3ddc81..51d7a32 100644 (file)
@@ -328,16 +328,13 @@ void addVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                        specs["ExtraSetupComputations"] = "";
                        specs["VarPtrName"]                             = "%mux_output_var_ptr";
                        specs["ResultStrategy"]                 = "%mux_output_var_ptr  = OpSelect %sb_f32ptr %is_neg" + muxInput1 + muxInput2 + "\n";
-                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                        spec.assembly                                   = shaderTemplate.specialize(specs);
                        spec.numWorkGroups                              = IVec3(numMuxes, 1, 1);
                        spec.requestedVulkanFeatures    = requiredFeatures;
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputAFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputBFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputSFloats)));
-                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                        spec.extensions.push_back("VK_KHR_variable_pointers");
                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                }
@@ -352,16 +349,13 @@ void addVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                        specs["ExtraSetupComputations"] = "";
                        specs["VarPtrName"]                             = "%mux_output_var_ptr";
                        specs["ResultStrategy"]                 = "%mux_output_var_ptr = OpFunctionCall %sb_f32ptr %choose_input_func %is_neg" + muxInput1 + muxInput2 + "\n";
-                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                        spec.assembly                                   = shaderTemplate.specialize(specs);
                        spec.numWorkGroups                              = IVec3(numMuxes, 1, 1);
                        spec.requestedVulkanFeatures    = requiredFeatures;
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputAFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputBFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputSFloats)));
-                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                        spec.extensions.push_back("VK_KHR_variable_pointers");
                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                }
@@ -384,16 +378,13 @@ void addVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                "                                                     OpBranch %end_label\n"
                                "%end_label                                     = OpLabel\n"
                                "%mux_output_var_ptr            = OpPhi %sb_f32ptr" + muxInput1 + "%take_mux_input_1" + muxInput2 + "%take_mux_input_2\n";
-                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                        spec.assembly                                   = shaderTemplate.specialize(specs);
                        spec.numWorkGroups                              = IVec3(numMuxes, 1, 1);
                        spec.requestedVulkanFeatures    = requiredFeatures;
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputAFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputBFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputSFloats)));
-                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                        spec.extensions.push_back("VK_KHR_variable_pointers");
                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                }
@@ -411,16 +402,13 @@ void addVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                "%mux_input_1_copy                      = OpCopyObject %sb_f32ptr" + muxInput1 + "\n"
                                "%mux_input_2_copy                      = OpCopyObject %sb_f32ptr" + muxInput2 + "\n"
                                "%mux_output_var_ptr            = OpSelect %sb_f32ptr %is_neg %mux_input_1_copy %mux_input_2_copy\n";
-                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                        spec.assembly                                   = shaderTemplate.specialize(specs);
                        spec.numWorkGroups                              = IVec3(numMuxes, 1, 1);
                        spec.requestedVulkanFeatures    = requiredFeatures;
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputAFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputBFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputSFloats)));
-                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                        spec.extensions.push_back("VK_KHR_variable_pointers");
                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                }
@@ -444,16 +432,13 @@ void addVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                        "%opselect_result                       = OpSelect %sb_f32ptr %is_neg" + muxInput1 + muxInput2 + "\n"
                                        "                                                         OpStore %mux_output_copy %opselect_result\n"
                                        "%mux_output_var_ptr            = OpLoad %sb_f32ptr %mux_output_copy\n";
-                               spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                               spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                               spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                                spec.assembly                                   = shaderTemplate.specialize(specs);
                                spec.numWorkGroups                              = IVec3(numMuxes, 1, 1);
                                spec.requestedVulkanFeatures    = requiredFeatures;
-                               spec.inputs.push_back(BufferSp(new Float32Buffer(inputAFloats)));
-                               spec.inputs.push_back(BufferSp(new Float32Buffer(inputBFloats)));
-                               spec.inputs.push_back(BufferSp(new Float32Buffer(inputSFloats)));
-                               spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                               spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                               spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                               spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                               spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                                spec.extensions.push_back("VK_KHR_variable_pointers");
                                group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), description.c_str(), spec));
                        }
@@ -481,16 +466,13 @@ void addVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                        "%a_2i_ptr              = OpPtrAccessChain %sb_f32ptr %a_ptr %two_i\n"
                                        "%a_2i_plus_1_ptr       = OpPtrAccessChain %sb_f32ptr %a_ptr %two_i_plus_1\n"
                                        "%mux_output_var_ptr    = OpSelect %sb_f32ptr %is_neg " + in_1 + in_2 + "\n";
-                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                        spec.assembly                                   = shaderTemplate.specialize(specs);
                        spec.numWorkGroups                              = IVec3(numMuxes, 1, 1);
                        spec.requestedVulkanFeatures    = requiredFeatures;
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputAFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputBFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputSFloats)));
-                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                        spec.extensions.push_back("VK_KHR_variable_pointers");
                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                }
@@ -508,16 +490,13 @@ void addVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                                                                          "               %val = OpLoad %f32 %mux_output_var_ptr\n"
                                                                                          "        %val_plus_1 = OpFAdd %f32 %val %fone\n"
                                                                                          "                                              OpStore %mux_output_var_ptr %val_plus_1\n";
-                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                        spec.assembly                                   = shaderTemplate.specialize(specs);
                        spec.numWorkGroups                              = IVec3(numMuxes, 1, 1);
                        spec.requestedVulkanFeatures    = requiredFeatures;
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputAFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputBFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputSFloats)));
-                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedIncrOutput)));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedIncrOutput))));
                        spec.extensions.push_back("VK_KHR_variable_pointers");
                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                }
@@ -552,16 +531,13 @@ void addVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                        "                                                 OpStore %loc_AW_i %inval_a_i\n"
                                        "                                                 OpStore %loc_BW_i %inval_b_i\n"
                                        "%output_var_ptr                = OpSelect %f32_wrkgrp_ptr %is_neg %loc_AW_i %loc_BW_i\n";
-                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                        spec.assembly                                   = shaderTemplate.specialize(specs);
                        spec.numWorkGroups                              = IVec3(numMuxes, 1, 1);
                        spec.requestedVulkanFeatures    = requiredFeatures;
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputAFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputBFloats)));
-                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputSFloats)));
-                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                       spec.inputs.push_back (Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back (Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.inputs.push_back (Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                        spec.extensions.push_back("VK_KHR_variable_pointers");
                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                }
@@ -918,16 +894,13 @@ void addComplexTypesVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                                                                                                + baseANameAtLevel[indexLevel] + " "
                                                                                                                + baseBNameAtLevel[indexLevel] + "\n";
                                        expectedOutput[0]                               = selectedInput[baseOffset];
-                                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                                        spec.assembly                                   = shaderTemplate.specialize(specs);
                                        spec.numWorkGroups                              = IVec3(1, 1, 1);
                                        spec.requestedVulkanFeatures    = requiredFeatures;
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputA)));
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputB)));
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputC)));
-                                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputA)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputB)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputC)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                                        spec.extensions.push_back("VK_KHR_variable_pointers");
                                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                                }
@@ -951,16 +924,13 @@ void addComplexTypesVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                                                                                                + baseANameAtLevel[indexLevel] + " "
                                                                                                                + baseBNameAtLevel[indexLevel] + "\n";
                                        expectedOutput[0]                               = selectedInput[baseOffset];
-                                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                                        spec.assembly                                   = shaderTemplate.specialize(specs);
                                        spec.numWorkGroups                              = IVec3(1, 1, 1);
                                        spec.requestedVulkanFeatures    = requiredFeatures;
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputA)));
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputB)));
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputC)));
-                                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputA)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputB)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputC)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                                        spec.extensions.push_back("VK_KHR_variable_pointers");
                                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                                }
@@ -993,16 +963,13 @@ void addComplexTypesVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                                                                                                + baseBNameAtLevel[indexLevel]
                                                                                                                + " %take_input_b\n";
                                        expectedOutput[0]                               = selectedInput[baseOffset];
-                                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                                        spec.assembly                                   = shaderTemplate.specialize(specs);
                                        spec.numWorkGroups                              = IVec3(1, 1, 1);
                                        spec.requestedVulkanFeatures    = requiredFeatures;
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputA)));
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputB)));
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputC)));
-                                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputA)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputB)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputC)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                                        spec.extensions.push_back("VK_KHR_variable_pointers");
                                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                                }
@@ -1024,16 +991,13 @@ void addComplexTypesVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                                                                "%in_b_copy = OpCopyObject " + pointerTypeAtLevel[indexLevel] + " " + baseBNameAtLevel[indexLevel] + "\n"
                                                                                "%var_ptr       = OpSelect " + pointerTypeAtLevel[indexLevel] + " " + spirvSelectInputA + " %in_a_copy %in_b_copy\n";
                                        expectedOutput[0]                               = selectedInput[baseOffset];
-                                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                                        spec.assembly                                   = shaderTemplate.specialize(specs);
                                        spec.numWorkGroups                              = IVec3(1, 1, 1);
                                        spec.requestedVulkanFeatures    = requiredFeatures;
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputA)));
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputB)));
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputC)));
-                                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputA)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputB)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputC)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                                        spec.extensions.push_back("VK_KHR_variable_pointers");
                                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                                }
@@ -1056,16 +1020,13 @@ void addComplexTypesVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                                                                                                + baseANameAtLevel[indexLevel] + " "
                                                                                                                + baseBNameAtLevel[indexLevel] + "\n";
                                        expectedOutput[0]                               = selectedInput[baseOffset];
-                                       spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                                       spec.inputTypes[1]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
-                                       spec.inputTypes[2]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                                        spec.assembly                                   = shaderTemplate.specialize(specs);
                                        spec.numWorkGroups                              = IVec3(1, 1, 1);
                                        spec.requestedVulkanFeatures    = requiredFeatures;
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputA)));
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputB)));
-                                       spec.inputs.push_back(BufferSp(new Float32Buffer(inputC)));
-                                       spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputA)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputB)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputC)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                                       spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                                        spec.extensions.push_back("VK_KHR_variable_pointers");
                                        group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
                                }
@@ -1179,12 +1140,11 @@ void addNullptrVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                                        "%loaded_f32     = OpLoad  %f32         %loaded_f32_ptr \n"
                                                        "                  OpStore %output_loc  %loaded_f32     \n";
 
-               spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                spec.assembly                                   = shaderTemplate.specialize(specs);
                spec.numWorkGroups                              = IVec3(1, 1, 1);
                spec.requestedVulkanFeatures    = requiredFeatures;
-               spec.inputs.push_back(BufferSp(new Float32Buffer(input)));
-               spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+               spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(input)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+               spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                spec.extensions.push_back("VK_KHR_variable_pointers");
                group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
        }
@@ -1199,12 +1159,11 @@ void addNullptrVariablePointersComputeGroup (tcu::TestCaseGroup* group)
                                                        "%loaded_var = OpLoad %f32 %selected_ptr\n"
                                                        "OpStore %output_loc %loaded_var\n";
 
-               spec.inputTypes[0]                              = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
                spec.assembly                                   = shaderTemplate.specialize(specs);
                spec.numWorkGroups                              = IVec3(1, 1, 1);
                spec.requestedVulkanFeatures    = requiredFeatures;
-               spec.inputs.push_back(BufferSp(new Float32Buffer(input)));
-               spec.outputs.push_back(BufferSp(new Float32Buffer(expectedOutput)));
+               spec.inputs.push_back(Resource(BufferSp(new Float32Buffer(input)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+               spec.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput))));
                spec.extensions.push_back("VK_KHR_variable_pointers");
                group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
        }
@@ -1397,10 +1356,10 @@ void addVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
                        fragments["pre_main"]                   = preMain.specialize(specs);
                        fragments["testfun"]                    = testFunction.specialize(specs);
 
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputAFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputSFloats))));
-                       resources.outputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(expectedOutput))));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                        createTestsForAllStages(name.c_str(), defaultColors, defaultColors, fragments, resources, extensions, testGroup, requiredFeatures);
                }
                { // Variable Pointer Reads (using OpFunctionCall)
@@ -1419,10 +1378,10 @@ void addVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
                        fragments["pre_main"]                   = preMain.specialize(specs);
                        fragments["testfun"]                    = testFunction.specialize(specs);
 
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputAFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputSFloats))));
-                       resources.outputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(expectedOutput))));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                        createTestsForAllStages(name.c_str(), defaultColors, defaultColors, fragments, resources, extensions, testGroup, requiredFeatures);
                }
                { // Variable Pointer Reads (using OpPhi)
@@ -1449,10 +1408,10 @@ void addVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
                        fragments["pre_main"]                   = preMain.specialize(specs);
                        fragments["testfun"]                    = testFunction.specialize(specs);
 
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputAFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputSFloats))));
-                       resources.outputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(expectedOutput))));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                        createTestsForAllStages(name.c_str(), defaultColors, defaultColors, fragments, resources, extensions, testGroup, requiredFeatures);
                }
                { // Variable Pointer Reads (using OpCopyObject)
@@ -1474,10 +1433,10 @@ void addVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
                        fragments["pre_main"]                   = preMain.specialize(specs);
                        fragments["testfun"]                    = testFunction.specialize(specs);
 
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputAFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputSFloats))));
-                       resources.outputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(expectedOutput))));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                        createTestsForAllStages(name.c_str(), defaultColors, defaultColors, fragments, resources, extensions, testGroup, requiredFeatures);
                }
                { // Test storing into Private variables.
@@ -1504,10 +1463,10 @@ void addVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
                                fragments["pre_main"]                   = preMain.specialize(specs);
                                fragments["testfun"]                    = testFunction.specialize(specs);
 
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputAFloats))));
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBFloats))));
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputSFloats))));
-                               resources.outputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(expectedOutput))));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                               resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                createTestsForAllStages(name.c_str(), defaultColors, defaultColors, fragments, resources, extensions, testGroup, requiredFeatures);
                        }
                }
@@ -1539,10 +1498,10 @@ void addVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
                        fragments["testfun"]                    = testFunction.specialize(specs);
                        fragments["capability"]                 = cap;
 
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputAFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputSFloats))));
-                       resources.outputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(expectedOutput))));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                        createTestsForAllStages(name.c_str(), defaultColors, defaultColors, fragments, resources, extensions, testGroup, requiredFeatures);
                }
                {   // Variable Pointer Writes
@@ -1564,10 +1523,10 @@ void addVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
                        fragments["pre_main"]                   = preMain.specialize(specs);
                        fragments["testfun"]                    = testFunction.specialize(specs);
 
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputAFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBFloats))));
-                       resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputSFloats))));
-                       resources.outputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(expectedIncrOutput))));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputAFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputSFloats)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                       resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedIncrOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                        createTestsForAllStages(name.c_str(), defaultColors, defaultColors, fragments, resources, extensions, testGroup, requiredFeatures);
                }
        }
@@ -1873,8 +1832,8 @@ void addTwoInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGroup*
                                fragments["decoration"]                 = decoration.specialize(specs);
                                fragments["pre_main"]                   = preMain.specialize(specs);
                                fragments["testfun"]                    = testFunction.specialize(specs);
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputA))));
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputB))));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputA)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputB)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                getExpectedOutputColor(defaultColors, expectedColors, selectedInput[baseOffset]);
                                createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
                        }
@@ -1896,8 +1855,8 @@ void addTwoInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGroup*
                                fragments["decoration"]                 = decoration.specialize(specs);
                                fragments["pre_main"]                   = preMain.specialize(specs);
                                fragments["testfun"]                    = testFunction.specialize(specs);
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputA))));
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputB))));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputA)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputB)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                getExpectedOutputColor(defaultColors, expectedColors, selectedInput[baseOffset]);
                                createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
                        }
@@ -1929,8 +1888,8 @@ void addTwoInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGroup*
                                fragments["decoration"]                 = decoration.specialize(specs);
                                fragments["pre_main"]                   = preMain.specialize(specs);
                                fragments["testfun"]                    = testFunction.specialize(specs);
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputA))));
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputB))));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputA)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputB)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                getExpectedOutputColor(defaultColors, expectedColors, selectedInput[baseOffset]);
                                createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
                        }
@@ -1956,8 +1915,8 @@ void addTwoInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGroup*
                                fragments["decoration"]                 = decoration.specialize(specs);
                                fragments["pre_main"]                   = preMain.specialize(specs);
                                fragments["testfun"]                    = testFunction.specialize(specs);
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputA))));
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputB))));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputA)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputB)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                getExpectedOutputColor(defaultColors, expectedColors, selectedInput[baseOffset]);
                                createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
                        }
@@ -1980,8 +1939,8 @@ void addTwoInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGroup*
                                fragments["decoration"]                 = decoration.specialize(specs);
                                fragments["pre_main"]                   = preMain.specialize(specs);
                                fragments["testfun"]                    = testFunction.specialize(specs);
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputA))));
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputB))));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputA)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputB)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                getExpectedOutputColor(defaultColors, expectedColors, selectedInput[baseOffset]);
                                createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
                        }
@@ -2280,7 +2239,7 @@ void addSingleInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGro
                                fragments["decoration"]                 = decoration.specialize(specs);
                                fragments["pre_main"]                   = preMain.specialize(specs);
                                fragments["testfun"]                    = testFunction.specialize(specs);
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBuffer))));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBuffer)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                getExpectedOutputColor(defaultColors, expectedColors, inputBuffer[baseOffset]);
                                createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
                        }
@@ -2308,7 +2267,7 @@ void addSingleInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGro
                                fragments["decoration"]                 = decoration.specialize(specs);
                                fragments["pre_main"]                   = preMain.specialize(specs);
                                fragments["testfun"]                    = testFunction.specialize(specs);
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBuffer))));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBuffer)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                getExpectedOutputColor(defaultColors, expectedColors, inputBuffer[baseOffset]);
                                createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
                        }
@@ -2346,7 +2305,7 @@ void addSingleInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGro
                                fragments["decoration"]                 = decoration.specialize(specs);
                                fragments["pre_main"]                   = preMain.specialize(specs);
                                fragments["testfun"]                    = testFunction.specialize(specs);
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBuffer))));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBuffer)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                getExpectedOutputColor(defaultColors, expectedColors, inputBuffer[baseOffset]);
                                createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
                        }
@@ -2379,7 +2338,7 @@ void addSingleInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGro
                                fragments["decoration"]                 = decoration.specialize(specs);
                                fragments["pre_main"]                   = preMain.specialize(specs);
                                fragments["testfun"]                    = testFunction.specialize(specs);
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBuffer))));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBuffer)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                getExpectedOutputColor(defaultColors, expectedColors, inputBuffer[baseOffset]);
                                createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
                        }
@@ -2408,7 +2367,7 @@ void addSingleInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGro
                                fragments["decoration"]                 = decoration.specialize(specs);
                                fragments["pre_main"]                   = preMain.specialize(specs);
                                fragments["testfun"]                    = testFunction.specialize(specs);
-                               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(inputBuffer))));
+                               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(inputBuffer)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                                getExpectedOutputColor(defaultColors, expectedColors, inputBuffer[baseOffset]);
                                createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
                        }
@@ -2501,7 +2460,7 @@ void addNullptrVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
                fragments["decoration"]                 = decoration.specialize(specs);
                fragments["pre_main"]                   = preMain.specialize(specs);
                fragments["testfun"]                    = testFunction.specialize(specs);
-               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(input))));
+               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(input)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                createTestsForAllStages("opvariable_initialized_null", defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
        }
        // Use OpSelect to choose between nullptr and a valid pointer. Since we can't dereference nullptr,
@@ -2514,7 +2473,7 @@ void addNullptrVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
                fragments["decoration"]                 = decoration.specialize(specs);
                fragments["pre_main"]                   = preMain.specialize(specs);
                fragments["testfun"]                    = testFunction.specialize(specs);
-               resources.inputs.push_back(std::make_pair(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, BufferSp(new Float32Buffer(input))));
+               resources.inputs.push_back(Resource(BufferSp(new Float32Buffer(input)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
                createTestsForAllStages("opselect_null_or_valid_ptr", defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
        }
 }