Add new VK_KHR_variable_pointers extension tests
authorEhsan Nasiri <ehsann@google.com>
Fri, 26 May 2017 19:06:15 +0000 (15:06 -0400)
committerAlexander Galazin <alexander.galazin@arm.com>
Tue, 27 Jun 2017 13:48:02 +0000 (15:48 +0200)
These tests do not write to SSBOs, and therefore do not require the
vertexPipelineStoresAndAtomics and fragmentStoresAndAtomics device
features.

VK-GL-CTS issue: 123
Components: Vulkan
Affects: dEQP-VK.spirv_assembly.instruction.*.variable_pointers.*

Change-Id: I9a5f524a3a7ae7f0ddb295d983ba39bb0b4bcfa9

android/cts/master/vk-master.txt
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariablePointersTests.cpp
external/vulkancts/mustpass/1.0.2/vk-default.txt

index 0791adf..e8634ea 100644 (file)
@@ -138738,6 +138738,148 @@ dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.stores_func
 dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.reads_opptraccesschain_two_buffers
 dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.writes_two_buffers
 dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.workgroup_two_buffers
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_outer_struct_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_outer_struct_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_outer_struct_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_outer_struct_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_outer_struct_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_matrices_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_matrices_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_matrices_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_matrices_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_matrices_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_arrays_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_arrays_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_arrays_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_arrays_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_arrays_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_inner_structs_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_inner_structs_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_inner_structs_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_inner_structs_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_inner_structs_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4arr_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4arr_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4arr_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4arr_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4arr_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_float_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_float_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_float_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_float_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_float_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_outer_struct_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_outer_struct_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_outer_struct_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_outer_struct_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_outer_struct_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_matrices_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_matrices_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_matrices_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_matrices_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_matrices_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_arrays_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_arrays_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_arrays_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_arrays_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_arrays_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_inner_structs_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_inner_structs_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_inner_structs_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_inner_structs_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_inner_structs_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4arr_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4arr_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4arr_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4arr_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4arr_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_float_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_float_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_float_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_float_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_float_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_outer_struct_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_outer_struct_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_outer_struct_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_outer_struct_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_outer_struct_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_matrices_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_matrices_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_matrices_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_matrices_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_matrices_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_arrays_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_arrays_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_arrays_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_arrays_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_arrays_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_inner_structs_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_inner_structs_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_inner_structs_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_inner_structs_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_inner_structs_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4arr_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4arr_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4arr_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4arr_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4arr_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_float_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_float_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_float_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_float_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_float_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_outer_struct_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_outer_struct_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_outer_struct_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_outer_struct_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_outer_struct_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_matrices_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_matrices_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_matrices_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_matrices_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_matrices_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_arrays_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_arrays_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_arrays_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_arrays_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_arrays_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_inner_structs_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_inner_structs_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_inner_structs_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_inner_structs_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_inner_structs_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4arr_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4arr_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4arr_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4arr_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4arr_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_float_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_float_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_float_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_float_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_float_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.nullptr_compute.opvariable_initialized_null
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.nullptr_compute.opselect_null_or_valid_ptr
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_vert
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_tesse
@@ -140656,6 +140798,716 @@ dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_tw
 dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_tesse
 dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_geom
 dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opvariable_initialized_null_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opvariable_initialized_null_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opvariable_initialized_null_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opvariable_initialized_null_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opvariable_initialized_null_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opselect_null_or_valid_ptr_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opselect_null_or_valid_ptr_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opselect_null_or_valid_ptr_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opselect_null_or_valid_ptr_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opselect_null_or_valid_ptr_frag
 dEQP-VK.glsl.arrays.constructor.float3_vertex
 dEQP-VK.glsl.arrays.constructor.float3_fragment
 dEQP-VK.glsl.arrays.constructor.float4_vertex
index cc6bf0b..4a430fc 100644 (file)
@@ -86,7 +86,100 @@ void fillRandomScalars (de::Random& rnd, T minValue, T maxValue, void* dst, int
                typedPtr[offset + ndx] = randomScalar<T>(rnd, minValue, maxValue);
 }
 
-void addComputeVariablePointersGroup (tcu::TestCaseGroup* group)
+// The following structure (outer_struct) is passed as a vector of 64 32-bit floats into some shaders.
+//
+// struct struct inner_struct {
+//   vec4 x[2];
+//   vec4 y[2];
+// };
+//
+// struct outer_struct {
+//   inner_struct r[2][2];
+// };
+//
+// This method finds the correct offset from the base of a vector<float32> given the indexes into the structure.
+// Returns the index in the inclusive range of 0 and 63. Each unit of the offset represents offset by the size of a 32-bit float.
+deUint32 getBaseOffset(        deUint32 indexOuterStruct,
+                                               deUint32 indexMatrixRow,
+                                               deUint32 indexMatrixCol,
+                                               deUint32 indexInnerStruct,
+                                               deUint32 indexVec4Array,
+                                               deUint32 indexVec4)
+{
+       // index into the outer structure must be zero since the outer structure has only 1 member.
+       if(indexOuterStruct != 0)
+               DE_ASSERT(indexOuterStruct == 0);
+
+       DE_ASSERT(indexMatrixRow < 2);
+       DE_ASSERT(indexMatrixCol < 2);
+       DE_ASSERT(indexInnerStruct < 2);
+       DE_ASSERT(indexVec4Array < 2);
+       DE_ASSERT(indexVec4 < 4);
+
+       deUint32 offset = 0;
+
+       // We have a matrix of 2 rows and 2 columns (total of 4 inner_structs). Each inner_struct contains 16 floats.
+       // So, offset by 1 row means offset by 32 floats, and offset by 1 column means offset by 16 floats.
+       offset += indexMatrixRow * 32;
+       offset += indexMatrixCol * 16;
+
+       // The inner structure contains 2 members, each having 8 floats.
+       // So offset by 1 in the inner struct means offset by 8 floats.
+       offset += indexInnerStruct * 8;
+
+       // Each member (x|y) have 2 vectors of 4 floats. So, offset by 1 int the vec4 array means an offset by 4 floats.
+       offset += indexVec4Array * 4;
+
+       // Each vec4 contains 4 floats, so each offset in the vec4 means offset by 1 float.
+       offset += indexVec4;
+
+       return offset;
+}
+
+// The following structure (input_buffer) is passed as a vector of 128 32-bit floats into some shaders.
+//
+// struct struct inner_struct {
+//   vec4 x[2];
+//   vec4 y[2];
+// };
+//
+// struct outer_struct {
+//   inner_struct r[2][2];
+// };
+//
+// struct input_buffer {
+//   outer_struct a;
+//   outer_struct b;
+// }
+//
+// This method finds the correct offset from the base of a vector<float32> given the indexes into the structure.
+// Returns the index in the inclusive range of 0 and 127.
+deUint32 getBaseOffsetForSingleInputBuffer(    deUint32 indexOuterStruct,
+                                                                                       deUint32 indexMatrixRow,
+                                                                                       deUint32 indexMatrixCol,
+                                                                                       deUint32 indexInnerStruct,
+                                                                                       deUint32 indexVec4Array,
+                                                                                       deUint32 indexVec4)
+{
+       DE_ASSERT(indexOuterStruct < 2);
+       DE_ASSERT(indexMatrixRow < 2);
+       DE_ASSERT(indexMatrixCol < 2);
+       DE_ASSERT(indexInnerStruct < 2);
+       DE_ASSERT(indexVec4Array < 2);
+       DE_ASSERT(indexVec4 < 4);
+
+       // Get the offset assuming you have only one outer_struct. (use index 0 for outer_struct)
+       deUint32 offset = getBaseOffset(0, indexMatrixRow, indexMatrixCol, indexInnerStruct, indexVec4Array, indexVec4);
+
+       // If the second outer structure (b) is chosen in the input_buffer, we need to add an offset of 64 since
+       // each outer_struct contains 64 floats.
+       if (indexOuterStruct == 1)
+               offset += 64;
+
+       return offset;
+}
+
+void addVariablePointersComputeGroup (tcu::TestCaseGroup* group)
 {
        tcu::TestContext&                               testCtx                                 = group->getTestContext();
        de::Random                                              rnd                                             (deStringHash(group->getName()));
@@ -119,7 +212,7 @@ void addComputeVariablePointersGroup (tcu::TestCaseGroup* group)
        {
                AmuxAOutputFloats[i]     = (inputSFloats[i] < 0) ? inputAFloats[2*i]     : inputAFloats[2*i+1];
                AmuxBOutputFloats[i]     = (inputSFloats[i] < 0) ? inputAFloats[i]               : inputBFloats[i];
-               incrAmuxAOutputFloats[i] = (inputSFloats[i] < 0) ? 1 + inputAFloats[2*i] : 1+ inputAFloats[2*i+1];
+               incrAmuxAOutputFloats[i] = (inputSFloats[i] < 0) ? 1 + inputAFloats[2*i] : 1 + inputAFloats[2*i+1];
                incrAmuxBOutputFloats[i] = (inputSFloats[i] < 0) ? 1 + inputAFloats[i]   : 1 + inputBFloats[i];
        }
 
@@ -479,7 +572,647 @@ void addComputeVariablePointersGroup (tcu::TestCaseGroup* group)
        }
 }
 
-void addGraphicsVariablePointersGroup (tcu::TestCaseGroup* testGroup)
+void addComplexTypesVariablePointersComputeGroup (tcu::TestCaseGroup* group)
+{
+       tcu::TestContext&                               testCtx                                 = group->getTestContext();
+       const int                                               numFloats                               = 64;
+       vector<float>                                   inputA                                  (numFloats, 0);
+       vector<float>                                   inputB                                  (numFloats, 0);
+       vector<float>                                   inputC                                  (2*numFloats, 0);
+       vector<float>                                   expectedOutput                  (1, 0);
+       VulkanFeatures                                  requiredFeatures;
+
+       // These tests exercise variable pointers into various levels of the following data-structures.
+       //
+       // struct struct inner_struct {
+       //   vec4 x[2]; // array of 2 vectors. Each vector is 4 floats.
+       //   vec4 y[2]; // array of 2 vectors. Each vector is 4 floats.
+       // };
+       //
+       // struct outer_struct {
+       //   inner_struct r[2][2];
+       // };
+       //
+       // struct input_buffer {
+       //   outer_struct a;
+       //   outer_struct b;
+       // }
+       //
+       // inputA is of type outer_struct.
+       // inputB is of type outer_struct.
+       // inputC is of type input_buffer.
+       //
+       // inputA and inputB are of the same size. When testing variable pointers pointing to
+       // two different input buffers, we use inputA and inputB.
+       //
+       // inputC is twice the size of inputA. When testing the VariablePointersStorageBuffer capability,
+       // the variable pointer must be confined to a single buffer. These tests will use inputC.
+       //
+       // The inner_struct contains 16 floats.
+       // The outer_struct contains 64 floats.
+       // The input_buffer contains 128 floats.
+       // Populate the first input (inputA) to contain:  {0, 4, ... , 252}
+       // Populate the second input (inputB) to contain: {3, 7, ... , 255}
+       // Populate the third input (inputC) to contain:  {0, 4, ... , 252, 3, 7, ... , 255}
+       // Note that the first half of inputC is the same as inputA and the second half is the same as inputB.
+       for (size_t i = 0; i < numFloats; ++i)
+       {
+               inputA[i] = 4*float(i) / 255;
+               inputB[i] = ((4*float(i)) + 3) / 255;
+               inputC[i] = inputA[i];
+               inputC[i + numFloats] = inputB[i];
+       }
+
+       // In the following tests we use variable pointers to point to different types:
+       // nested structures, matrices of structures, arrays of structures, arrays of vectors, vectors of scalars, and scalars.
+       // outer_structure.inner_structure[?][?].x[?][?];
+       //   ^                    ^        ^  ^  ^ ^  ^
+       //
+       // For tests with 2 input buffers:
+       // 1. inputA                                            or      inputB                                                  = nested structure
+       // 2. inputA.r                                          or      inputB.r                                                = matrices of structures
+       // 3. inputA.r[?]                                       or      inputB.r[?]                                             = arrays of structures
+       // 4. inputA.r[?][?]                            or      inputB.r[?][?]                                  = structures
+       // 5. inputA.r[?][?].(x|y)                      or      inputB.r[?][?].(x|y)                    = arrays of vectors
+       // 6. inputA.r[?][?].(x|y)[?]           or      inputB.r[?][?].(x|y)[?]                 = vectors of scalars
+       // 7. inputA.r[?][?].(x|y)[?][?]        or      inputB.r[?][?].(x|y)[?][?]              = scalars
+       // For tests with 1 input buffer:
+       // 1. inputC.a                                          or      inputC.b                                                = nested structure
+       // 2. inputC.a.r                                        or      inputC.b.r                                              = matrices of structures
+       // 3. inputC.a.r[?]                                     or      inputC.b.r[?]                                   = arrays of structures
+       // 4. inputC.a.r[?][?]                          or      inputC.b.r[?][?]                                = structures
+       // 5. inputC.a.r[?][?].(x|y)            or      inputC.b.r[?][?].(x|y)                  = arrays of vectors
+       // 6. inputC.a.r[?][?].(x|y)[?]         or      inputC.b.r[?][?].(x|y)[?]               = vectors of scalars
+       // 7. inputC.a.r[?][?].(x|y)[?][?]      or      inputC.b.r[?][?].(x|y)[?][?]    = scalars
+       const int numLevels = 7;
+
+       const string decorations (
+               // Decorations
+               "OpDecorate %id BuiltIn GlobalInvocationId              \n"
+               "OpDecorate %inputA DescriptorSet 0                             \n"
+               "OpDecorate %inputB DescriptorSet 0                             \n"
+               "OpDecorate %inputC DescriptorSet 0                             \n"
+               "OpDecorate %outdata DescriptorSet 0                    \n"
+               "OpDecorate %inputA Binding 0                                   \n"
+               "OpDecorate %inputB Binding 1                                   \n"
+               "OpDecorate %inputC Binding 2                                   \n"
+               "OpDecorate %outdata Binding 3                                  \n"
+
+               // Set the Block decoration
+               "OpDecorate %outer_struct       Block                           \n"
+               "OpDecorate %input_buffer       Block                           \n"
+               "OpDecorate %output_buffer      Block                           \n"
+
+               // Set the Offsets
+               "OpMemberDecorate %output_buffer 0 Offset 0             \n"
+               "OpMemberDecorate %input_buffer  0 Offset 0             \n"
+               "OpMemberDecorate %input_buffer  1 Offset 256   \n"
+               "OpMemberDecorate %outer_struct  0 Offset 0             \n"
+               "OpMemberDecorate %inner_struct  0 Offset 0             \n"
+               "OpMemberDecorate %inner_struct  1 Offset 32    \n"
+
+               // Set the ArrayStrides
+               "OpDecorate %arr2_v4float        ArrayStride 16         \n"
+               "OpDecorate %arr2_inner_struct   ArrayStride 64         \n"
+               "OpDecorate %mat2x2_inner_struct ArrayStride 128        \n"
+       );
+
+       const string types (
+               ///////////////
+               // CONSTANTS //
+               ///////////////
+               "%c_bool_true                   = OpConstantTrue        %bool                                                   \n"
+               "%c_bool_false                  = OpConstantFalse       %bool                                                   \n"
+               "%c_i32_0                               = OpConstant            %i32            0                                       \n"
+               "%c_i32_1                               = OpConstant            %i32            1                                       \n"
+               "%c_i32_2                               = OpConstant            %i32            2                                       \n"
+               "%c_i32_3                               = OpConstant            %i32            3                                       \n"
+               "%c_u32_2                               = OpConstant            %u32            2                                       \n"
+
+               ///////////
+               // TYPES //
+               ///////////
+               "%v4f32                 = OpTypeVector %f32 4                               \n"
+
+               // struct struct inner_struct {
+               //   vec4 x[2]; // array of 2 vectors
+               //   vec4 y[2]; // array of 2 vectors
+               // };
+               "%arr2_v4float                  = OpTypeArray %v4f32 %c_u32_2                                           \n"
+               "%inner_struct                  = OpTypeStruct %arr2_v4float %arr2_v4float                      \n"
+
+               // struct outer_struct {
+               //   inner_struct r[2][2];
+               // };
+               "%arr2_inner_struct             = OpTypeArray %inner_struct %c_u32_2                            \n"
+               "%mat2x2_inner_struct   = OpTypeArray %arr2_inner_struct %c_u32_2                       \n"
+               "%outer_struct                  = OpTypeStruct %mat2x2_inner_struct                                     \n"
+
+               // struct input_buffer {
+               //   outer_struct a;
+               //   outer_struct b;
+               // }
+               "%input_buffer                  = OpTypeStruct %outer_struct %outer_struct                      \n"
+
+               // struct output_struct {
+               //   float out;
+               // }
+               "%output_buffer                 = OpTypeStruct %f32                                                                     \n"
+
+               ///////////////////
+               // POINTER TYPES //
+               ///////////////////
+               "%output_buffer_ptr             = OpTypePointer StorageBuffer %output_buffer            \n"
+               "%input_buffer_ptr              = OpTypePointer StorageBuffer %input_buffer                     \n"
+               "%outer_struct_ptr              = OpTypePointer StorageBuffer %outer_struct                     \n"
+               "%mat2x2_ptr                    = OpTypePointer StorageBuffer %mat2x2_inner_struct      \n"
+               "%arr2_ptr                              = OpTypePointer StorageBuffer %arr2_inner_struct        \n"
+               "%inner_struct_ptr              = OpTypePointer StorageBuffer %inner_struct                     \n"
+               "%arr_v4f32_ptr                 = OpTypePointer StorageBuffer %arr2_v4float                     \n"
+               "%v4f32_ptr                             = OpTypePointer StorageBuffer %v4f32                            \n"
+               "%sb_f32ptr                             = OpTypePointer StorageBuffer %f32                                      \n"
+
+               ///////////////
+               // VARIABLES //
+               ///////////////
+               "%id                                    = OpVariable %uvec3ptr                  Input                           \n"
+               "%inputA                                = OpVariable %outer_struct_ptr  StorageBuffer           \n"
+               "%inputB                                = OpVariable %outer_struct_ptr  StorageBuffer           \n"
+               "%inputC                                = OpVariable %input_buffer_ptr  StorageBuffer           \n"
+               "%outdata                               = OpVariable %output_buffer_ptr StorageBuffer           \n"
+       );
+
+       const StringTemplate shaderTemplate (
+               "OpCapability Shader\n"
+
+               "${extra_capability}\n"
+
+               "OpExtension \"SPV_KHR_variable_pointers\"\n"
+               "OpExtension \"SPV_KHR_storage_buffer_storage_class\"\n"
+               "OpMemoryModel Logical GLSL450\n"
+               "OpEntryPoint GLCompute %main \"main\" %id\n"
+               "OpExecutionMode %main LocalSize 1 1 1\n"
+
+               "OpSource GLSL 430\n"
+               "OpName %main           \"main\"\n"
+               "OpName %id             \"gl_GlobalInvocationID\"\n"
+
+               + decorations
+
+               + string(getComputeAsmCommonTypes())
+
+               + types +
+
+               // These selector functions return variable pointers.
+               // These functions are used by tests that use OpFunctionCall to obtain the variable pointer
+               "%selector_func_type    = OpTypeFunction ${selected_type} %bool ${selected_type} ${selected_type}\n"
+               "%choose_input_func             = OpFunction ${selected_type} None %selector_func_type\n"
+               "%choose_first_param    = OpFunctionParameter %bool\n"
+               "%first_param                   = OpFunctionParameter ${selected_type}\n"
+               "%second_param                  = OpFunctionParameter ${selected_type}\n"
+               "%selector_func_begin   = OpLabel\n"
+               "%result_ptr                    = OpSelect ${selected_type} %choose_first_param %first_param %second_param\n"
+               "OpReturnValue %result_ptr\n"
+               "OpFunctionEnd\n"
+
+               // main function is the entry_point
+               "%main                                  = OpFunction %void None %voidf\n"
+               "%label                                 = OpLabel\n"
+
+               // Here are the 2 nested structures within InputC.
+               "%inputC_a                              = OpAccessChain %outer_struct_ptr %inputC %c_i32_0\n"
+               "%inputC_b                              = OpAccessChain %outer_struct_ptr %inputC %c_i32_1\n"
+
+               // Define the 2 pointers from which we're going to choose one.
+               "${a_loc} \n"
+               "${b_loc} \n"
+
+               // Choose between the 2 pointers / variable pointers.
+               "${selection_strategy} \n"
+
+               // OpAccessChain into the variable pointer until you get to the float.
+               "%result_loc                    = OpAccessChain %sb_f32ptr %var_ptr  ${remaining_indexes} \n"
+
+               // Now load from the result_loc
+               "%result_val                    = OpLoad %f32 %result_loc \n"
+
+               // Store the chosen value to the output buffer.
+               "%outdata_loc                   = OpAccessChain %sb_f32ptr %outdata %c_i32_0\n"
+               "                                                 OpStore %outdata_loc %result_val\n"
+               "                                                 OpReturn\n"
+               "                                                 OpFunctionEnd\n");
+
+       for (int isSingleInputBuffer = 0 ; isSingleInputBuffer < 2; ++isSingleInputBuffer)
+       {
+               // Set the proper extension features required for the test
+               if (isSingleInputBuffer)
+                       requiredFeatures.extVariablePointers    = EXTVARIABLEPOINTERSFEATURES_VARIABLE_POINTERS_STORAGEBUFFER;
+               else
+                       requiredFeatures.extVariablePointers    = EXTVARIABLEPOINTERSFEATURES_VARIABLE_POINTERS;
+
+               for (int selectInputA = 0; selectInputA < 2; ++selectInputA)
+               {
+                       const string extraCap                                   = isSingleInputBuffer   ? "OpCapability VariablePointersStorageBuffer\n" : "OpCapability VariablePointers\n";
+                       const vector<float>& selectedInput              = isSingleInputBuffer   ? inputC                                                                                 : (selectInputA ? inputA : inputB);
+                       const string bufferType                                 = isSingleInputBuffer   ? "single_buffer_"                                                               : "two_buffers_";
+                       const string baseA                                              = isSingleInputBuffer   ? "%inputC_a"                                                                    : "%inputA";
+                       const string baseB                                              = isSingleInputBuffer   ? "%inputC_b"                                                                    : "%inputB";
+                       const string selectedInputStr                   = selectInputA                  ? "first_input"                                                                  : "second_input";
+                       const string spirvSelectInputA                  = selectInputA                  ? "%c_bool_true"                                                                 : "%c_bool_false";
+                       const int outerStructIndex                              = isSingleInputBuffer   ? (selectInputA ? 0 : 1)                                                 : 0;
+
+                       // The indexes chosen at each level. At any level, any given offset is exercised.
+                       // outerStructIndex is 0 for inputA and inputB (because outer_struct has only 1 member).
+                       // outerStructIndex is 0 for member <a> of inputC and 1 for member <b>.
+                       const int indexesForLevel[numLevels][6]= {{outerStructIndex, 0, 0, 0, 0, 1},
+                                                                                                         {outerStructIndex, 1, 0, 1, 0, 2},
+                                                                                                         {outerStructIndex, 0, 1, 0, 1, 3},
+                                                                                                         {outerStructIndex, 1, 1, 1, 0, 0},
+                                                                                                         {outerStructIndex, 0, 0, 1, 1, 1},
+                                                                                                         {outerStructIndex, 1, 0, 0, 0, 2},
+                                                                                                         {outerStructIndex, 1, 1, 1, 1, 3}};
+
+                       const string indexLevelNames[]          = {"_outer_struct_", "_matrices_", "_arrays_", "_inner_structs_", "_vec4arr_", "_vec4_", "_float_"};
+                       const string inputALocations[]          = {     "",
+                                                                                               "%a_loc = OpAccessChain %mat2x2_ptr       " + baseA + " %c_i32_0",
+                                                                                               "%a_loc = OpAccessChain %arr2_ptr         " + baseA + " %c_i32_0 %c_i32_0",
+                                                                                               "%a_loc = OpAccessChain %inner_struct_ptr " + baseA + " %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                               "%a_loc = OpAccessChain %arr_v4f32_ptr    " + baseA + " %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                               "%a_loc = OpAccessChain %v4f32_ptr        " + baseA + " %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                               "%a_loc = OpAccessChain %sb_f32ptr        " + baseA + " %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3"};
+
+                       const string inputBLocations[]          = {     "",
+                                                                                               "%b_loc = OpAccessChain %mat2x2_ptr       " + baseB + " %c_i32_0",
+                                                                                               "%b_loc = OpAccessChain %arr2_ptr         " + baseB + " %c_i32_0 %c_i32_0",
+                                                                                               "%b_loc = OpAccessChain %inner_struct_ptr " + baseB + " %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                               "%b_loc = OpAccessChain %arr_v4f32_ptr    " + baseB + " %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                               "%b_loc = OpAccessChain %v4f32_ptr        " + baseB + " %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                               "%b_loc = OpAccessChain %sb_f32ptr        " + baseB + " %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3"};
+
+                       const string inputAPtrAccessChain[]     = {     "",
+                                                                                               "%a_loc = OpPtrAccessChain %mat2x2_ptr       " + baseA + " %c_i32_0 %c_i32_0",
+                                                                                               "%a_loc = OpPtrAccessChain %arr2_ptr         " + baseA + " %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                               "%a_loc = OpPtrAccessChain %inner_struct_ptr " + baseA + " %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                               "%a_loc = OpPtrAccessChain %arr_v4f32_ptr    " + baseA + " %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                               "%a_loc = OpPtrAccessChain %v4f32_ptr        " + baseA + " %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                               // Next case emulates:
+                                                                                               // %a_loc = OpPtrAccessChain %sb_f32ptr          baseA     %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3
+                                                                                               // But rewrite it to exercise OpPtrAccessChain with a non-zero first index:
+                                                                                               //    %a_loc_arr is a pointer to an array that we want to index with 1.
+                                                                                               // But instead of just using OpAccessChain with first index 1, use OpAccessChain with index 0 to
+                                                                                               // get a pointer to the first element, then send that into OpPtrAccessChain with index 1.
+                                                                                               "%a_loc_arr = OpPtrAccessChain %arr_v4f32_ptr " + baseA + " %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 "
+                                                                                               "%a_loc_first_elem = OpAccessChain %v4f32_ptr %a_loc_arr %c_i32_0 "
+                                                                                               "%a_loc = OpPtrAccessChain %sb_f32ptr %a_loc_first_elem %c_i32_1 %c_i32_3"};
+
+                       const string inputBPtrAccessChain[]     = {     "",
+                                                                                               "%b_loc = OpPtrAccessChain %mat2x2_ptr       " + baseB + " %c_i32_0 %c_i32_0",
+                                                                                               "%b_loc = OpPtrAccessChain %arr2_ptr         " + baseB + " %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                               "%b_loc = OpPtrAccessChain %inner_struct_ptr " + baseB + " %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                               "%b_loc = OpPtrAccessChain %arr_v4f32_ptr    " + baseB + " %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                               "%b_loc = OpPtrAccessChain %v4f32_ptr        " + baseB + " %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                               // Next case emulates:
+                                                                                               // %b_loc = OpPtrAccessChain %sb_f32ptr          basseB     %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3
+                                                                                               // But rewrite it to exercise OpPtrAccessChain with a non-zero first index:
+                                                                                               //    %b_loc_arr is a pointer to an array that we want to index with 1.
+                                                                                               // But instead of just using OpAccessChain with first index 1, use OpAccessChain with index 0 to
+                                                                                               // get a pointer to the first element, then send that into OpPtrAccessChain with index 1.
+                                                                                               "%b_loc_arr = OpPtrAccessChain %arr_v4f32_ptr " + baseB + " %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 "
+                                                                                               "%b_loc_first_elem = OpAccessChain %v4f32_ptr %b_loc_arr %c_i32_0 "
+                                                                                               "%b_loc = OpPtrAccessChain %sb_f32ptr %b_loc_first_elem %c_i32_1 %c_i32_3"};
+
+
+                       const string remainingIndexesAtLevel[]= {"%c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                                        "%c_i32_1 %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_2",
+                                                                                                        "%c_i32_1 %c_i32_0 %c_i32_1 %c_i32_3",
+                                                                                                        "%c_i32_1 %c_i32_0 %c_i32_0",
+                                                                                                        "%c_i32_1 %c_i32_1",
+                                                                                                        "%c_i32_2",
+                                                                                                        ""};
+
+                       const string pointerTypeAtLevel[] = {"%outer_struct_ptr", "%mat2x2_ptr", "%arr2_ptr", "%inner_struct_ptr", "%arr_v4f32_ptr", "%v4f32_ptr", "%sb_f32ptr"};
+                       const string baseANameAtLevel[]   = {baseA, "%a_loc", "%a_loc", "%a_loc", "%a_loc", "%a_loc", "%a_loc"};
+                       const string baseBNameAtLevel[]   = {baseB, "%b_loc", "%b_loc", "%b_loc", "%b_loc", "%b_loc", "%b_loc"};
+
+                       for (int indexLevel = 0; indexLevel < numLevels; ++indexLevel)
+                       {
+                               const int baseOffset    = getBaseOffsetForSingleInputBuffer(indexesForLevel[indexLevel][0],
+                                                                                                                                                       indexesForLevel[indexLevel][1],
+                                                                                                                                                       indexesForLevel[indexLevel][2],
+                                                                                                                                                       indexesForLevel[indexLevel][3],
+                                                                                                                                                       indexesForLevel[indexLevel][4],
+                                                                                                                                                       indexesForLevel[indexLevel][5]);
+                               // Use OpSelect to choose between 2 pointers
+                               {
+                                       ComputeShaderSpec                               spec;
+                                       map<string, string>                             specs;
+                                       string opCodeForTests                   = "opselect";
+                                       string name                                             = opCodeForTests + indexLevelNames[indexLevel] + bufferType + selectedInputStr;
+                                       specs["extra_capability"]               = extraCap;
+                                       specs["selected_type"]                  = pointerTypeAtLevel[indexLevel];
+                                       specs["select_inputA"]                  = spirvSelectInputA;
+                                       specs["a_loc"]                                  = inputALocations[indexLevel];
+                                       specs["b_loc"]                                  = inputBLocations[indexLevel];
+                                       specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                                       specs["selection_strategy"]             = "%var_ptr     = OpSelect "
+                                                                                                               + pointerTypeAtLevel[indexLevel] + " "
+                                                                                                               + spirvSelectInputA + " "
+                                                                                                               + 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.extensions.push_back("VK_KHR_variable_pointers");
+                                       group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
+                               }
+
+                               // Use OpFunctionCall to choose between 2 pointers
+                               {
+                                       ComputeShaderSpec                               spec;
+                                       map<string, string>                             specs;
+                                       string opCodeForTests                   = "opfunctioncall";
+                                       string name                                             = opCodeForTests + indexLevelNames[indexLevel] + bufferType + selectedInputStr;
+                                       specs["extra_capability"]               = extraCap;
+                                       specs["selected_type"]                  = pointerTypeAtLevel[indexLevel];
+                                       specs["select_inputA"]                  = spirvSelectInputA;
+                                       specs["a_loc"]                                  = inputALocations[indexLevel];
+                                       specs["b_loc"]                                  = inputBLocations[indexLevel];
+                                       specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                                       specs["selection_strategy"]             = "%var_ptr     = OpFunctionCall "
+                                                                                                               + pointerTypeAtLevel[indexLevel]
+                                                                                                               + " %choose_input_func "
+                                                                                                               + spirvSelectInputA + " "
+                                                                                                               + 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.extensions.push_back("VK_KHR_variable_pointers");
+                                       group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
+                               }
+
+                               // Use OpPhi to choose between 2 pointers
+                               {
+
+                                       ComputeShaderSpec                               spec;
+                                       map<string, string>                             specs;
+                                       string opCodeForTests                   = "opphi";
+                                       string name                                             = opCodeForTests + indexLevelNames[indexLevel] + bufferType + selectedInputStr;
+                                       specs["extra_capability"]               = extraCap;
+                                       specs["selected_type"]                  = pointerTypeAtLevel[indexLevel];
+                                       specs["select_inputA"]                  = spirvSelectInputA;
+                                       specs["a_loc"]                                  = inputALocations[indexLevel];
+                                       specs["b_loc"]                                  = inputBLocations[indexLevel];
+                                       specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                                       specs["selection_strategy"]             =
+                                                                       "                                 OpSelectionMerge %end_label None\n"
+                                                                       "                                 OpBranchConditional " + spirvSelectInputA + " %take_input_a %take_input_b\n"
+                                                                       "%take_input_a  = OpLabel\n"
+                                                                       "                                 OpBranch %end_label\n"
+                                                                       "%take_input_b  = OpLabel\n"
+                                                                       "                             OpBranch %end_label\n"
+                                                                       "%end_label             = OpLabel\n"
+                                                                       "%var_ptr               = OpPhi "
+                                                                                                               + pointerTypeAtLevel[indexLevel] + " "
+                                                                                                               + baseANameAtLevel[indexLevel]
+                                                                                                               + " %take_input_a "
+                                                                                                               + 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.extensions.push_back("VK_KHR_variable_pointers");
+                                       group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
+                               }
+
+                               // Use OpCopyObject to get variable pointers
+                               {
+                                       ComputeShaderSpec                               spec;
+                                       map<string, string>                             specs;
+                                       string opCodeForTests                   = "opcopyobject";
+                                       string name                                             = opCodeForTests + indexLevelNames[indexLevel] + bufferType + selectedInputStr;
+                                       specs["extra_capability"]               = extraCap;
+                                       specs["selected_type"]                  = pointerTypeAtLevel[indexLevel];
+                                       specs["select_inputA"]                  = spirvSelectInputA;
+                                       specs["a_loc"]                                  = inputALocations[indexLevel];
+                                       specs["b_loc"]                                  = inputBLocations[indexLevel];
+                                       specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                                       specs["selection_strategy"]             =
+                                                                               "%in_a_copy = OpCopyObject " + pointerTypeAtLevel[indexLevel] + " " + baseANameAtLevel[indexLevel] + "\n"
+                                                                               "%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.extensions.push_back("VK_KHR_variable_pointers");
+                                       group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
+                               }
+
+                               // Use OpPtrAccessChain to get variable pointers
+                               {
+                                       ComputeShaderSpec                               spec;
+                                       map<string, string>                             specs;
+                                       string opCodeForTests                   = "opptraccesschain";
+                                       string name                                             = opCodeForTests + indexLevelNames[indexLevel] + bufferType + selectedInputStr;
+                                       specs["extra_capability"]               = extraCap;
+                                       specs["selected_type"]                  = pointerTypeAtLevel[indexLevel];
+                                       specs["select_inputA"]                  = spirvSelectInputA;
+                                       specs["a_loc"]                                  = inputAPtrAccessChain[indexLevel];
+                                       specs["b_loc"]                                  = inputBPtrAccessChain[indexLevel];
+                                       specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                                       specs["selection_strategy"]             = "%var_ptr     = OpSelect "
+                                                                                                               + pointerTypeAtLevel[indexLevel] + " "
+                                                                                                               + spirvSelectInputA + " "
+                                                                                                               + 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.extensions.push_back("VK_KHR_variable_pointers");
+                                       group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
+                               }
+                       }
+               }
+       }
+}
+
+void addNullptrVariablePointersComputeGroup (tcu::TestCaseGroup* group)
+{
+       tcu::TestContext&                               testCtx                                 = group->getTestContext();
+       float                                                   someFloat                               = 78;
+       vector<float>                                   input                                   (1, someFloat);
+       vector<float>                                   expectedOutput                  (1, someFloat);
+       VulkanFeatures                                  requiredFeatures;
+
+       // Requires the variable pointers feature.
+       requiredFeatures.extVariablePointers    = EXTVARIABLEPOINTERSFEATURES_VARIABLE_POINTERS;
+
+       const string decorations (
+               // Decorations
+               "OpDecorate %id BuiltIn GlobalInvocationId              \n"
+               "OpDecorate %input DescriptorSet 0                              \n"
+               "OpDecorate %outdata DescriptorSet 0                    \n"
+               "OpDecorate %input Binding 0                                    \n"
+               "OpDecorate %outdata Binding 1                                  \n"
+
+               // Set the Block decoration
+               "OpDecorate %float_struct       Block                           \n"
+
+               // Set the Offsets
+               "OpMemberDecorate %float_struct 0 Offset 0              \n"
+       );
+
+       const string types (
+               ///////////
+               // TYPES //
+               ///////////
+               // struct float_struct {
+               //   float x;
+               // };
+               "%float_struct          = OpTypeStruct %f32                                                                                     \n"
+
+               ///////////////////
+               // POINTER TYPES //
+               ///////////////////
+               "%float_struct_ptr      = OpTypePointer StorageBuffer %float_struct                                     \n"
+               "%sb_f32ptr                     = OpTypePointer StorageBuffer %f32                                                      \n"
+               "%func_f32ptrptr        = OpTypePointer Function %sb_f32ptr                                                     \n"
+
+               ///////////////
+               // CONSTANTS //
+               ///////////////
+               "%c_bool_true           = OpConstantTrue        %bool                                                                   \n"
+               "%c_i32_0                       = OpConstant            %i32            0                                                       \n"
+               "%c_null_ptr            = OpConstantNull        %sb_f32ptr                                                              \n"
+
+               ///////////////
+               // VARIABLES //
+               ///////////////
+               "%id                            = OpVariable %uvec3ptr                  Input                                           \n"
+               "%input                         = OpVariable %float_struct_ptr  StorageBuffer                           \n"
+               "%outdata                       = OpVariable %float_struct_ptr  StorageBuffer                           \n"
+       );
+
+       const StringTemplate shaderTemplate (
+               "OpCapability Shader\n"
+               "OpCapability VariablePointers\n"
+
+               "OpExtension \"SPV_KHR_variable_pointers\"\n"
+               "OpExtension \"SPV_KHR_storage_buffer_storage_class\"\n"
+               "OpMemoryModel Logical GLSL450\n"
+               "OpEntryPoint GLCompute %main \"main\" %id\n"
+               "OpExecutionMode %main LocalSize 1 1 1\n"
+
+               "OpSource GLSL 430\n"
+               "OpName %main           \"main\"\n"
+               "OpName %id             \"gl_GlobalInvocationID\"\n"
+
+               + decorations
+
+               + string(getComputeAsmCommonTypes())
+
+               + types +
+
+               // main function is the entry_point
+               "%main                                  = OpFunction %void None %voidf\n"
+               "%label                                 = OpLabel\n"
+
+               // Note that the Variable Pointers extension allows creation
+               // of a pointer variable with storage class of Private or Function.
+               "%f32_ptr_var               = OpVariable %func_f32ptrptr Function %c_null_ptr\n"
+
+               "%input_loc                             = OpAccessChain %sb_f32ptr %input %c_i32_0\n"
+               "%output_loc                    = OpAccessChain %sb_f32ptr %outdata %c_i32_0\n"
+
+               "${NullptrTestingStrategy}\n"
+
+               "                                                 OpReturn\n"
+               "                                                 OpFunctionEnd\n");
+
+       // f32_ptr_var has been inintialized to NULL.
+       // Now set it to point to the float variable that holds the input value
+       {
+               ComputeShaderSpec                               spec;
+               map<string, string>                             specs;
+               string name                                             = "opvariable_initialized_null";
+               specs["NullptrTestingStrategy"] =
+                                                       "                  OpStore %f32_ptr_var %input_loc       \n"
+                                                       "%loaded_f32_ptr = OpLoad  %sb_f32ptr   %f32_ptr_var    \n"
+                                                       "%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.extensions.push_back("VK_KHR_variable_pointers");
+               group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
+       }
+       // Use OpSelect to choose between nullptr and valid pointer. Since we can't dereference nullptr,
+       // it is forced to always choose the valid pointer.
+       {
+               ComputeShaderSpec                               spec;
+               map<string, string>                             specs;
+               string name                                             = "opselect_null_or_valid_ptr";
+               specs["NullptrTestingStrategy"] =
+                                                       "%selected_ptr = OpSelect %sb_f32ptr %c_bool_true %input_loc %c_null_ptr\n"
+                                                       "%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.extensions.push_back("VK_KHR_variable_pointers");
+               group->addChild(new SpvAsmComputeShaderCase(testCtx, name.c_str(), name.c_str(), spec));
+       }
+}
+
+void addVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
 {
        tcu::TestContext&                               testCtx                                 = testGroup->getTestContext();
        de::Random                                              rnd                                             (deStringHash(testGroup->getName()));
@@ -841,25 +1574,978 @@ void addGraphicsVariablePointersGroup (tcu::TestCaseGroup* testGroup)
        }
 }
 
+// Modifies the 'red channel' of the input color to the given float value.
+// Returns the modified color.
+void getExpectedOutputColor(RGBA (&inputColors)[4], RGBA (&expectedOutputColors)[4], float val)
+{
+       Vec4 inColor0 = inputColors[0].toVec();
+       Vec4 inColor1 = inputColors[1].toVec();
+       Vec4 inColor2 = inputColors[2].toVec();
+       Vec4 inColor3 = inputColors[3].toVec();
+       inColor0[0] = val;
+       inColor1[0] = val;
+       inColor2[0] = val;
+       inColor3[0] = val;
+       expectedOutputColors[0] = RGBA(inColor0);
+       expectedOutputColors[1] = RGBA(inColor1);
+       expectedOutputColors[2] = RGBA(inColor2);
+       expectedOutputColors[3] = RGBA(inColor3);
+}
+
+void addTwoInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
+{
+       const int                                               numFloatsPerInput               = 64;
+       vector<float>                                   inputA                                  (numFloatsPerInput, 0);
+       vector<float>                                   inputB                                  (numFloatsPerInput, 0);
+       deUint32                                                baseOffset                              = -1;
+       VulkanFeatures                                  requiredFeatures;
+       map<string, string>                             fragments;
+       RGBA                                                    defaultColors[4];
+       RGBA                                                    expectedColors[4];
+       vector<string>                                  extensions;
+
+       getDefaultColors(defaultColors);
+
+       // Set the proper extension features required for the tests.
+       requiredFeatures.extVariablePointers = EXTVARIABLEPOINTERSFEATURES_VARIABLE_POINTERS;
+
+       // Set the required extension.
+       extensions.push_back("VK_KHR_variable_pointers");
+
+       // These tests exercise variable pointers into various levels of the following data-structure:
+       // struct struct inner_struct {
+       //   vec4 x[2]; // array of 2 vectors. Each vector is 4 floats.
+       //   vec4 y[2]; // array of 2 vectors. Each vector is 4 floats.
+       // };
+       //
+       // struct outer_struct {
+       //   inner_struct r[2][2];
+       // };
+       //
+       // The inner_struct contains 16 floats, and the outer_struct contains 64 floats.
+       // Therefore the input can be an array of 64 floats.
+
+       // Populate the first input (inputA) to contain:  {0, 4, ... , 252} / 255.f
+       // Populate the second input (inputB) to contain: {3, 7, ... , 255} / 255.f
+       for (size_t i = 0; i < numFloatsPerInput; ++i)
+       {
+               inputA[i] = 4*float(i) / 255;
+               inputB[i] = ((4*float(i)) + 3) / 255;
+       }
+
+       // In the following tests we use variable pointers to point to different types:
+       // nested structures, matrices of structures, arrays of structures, arrays of vectors, vectors of scalars, and scalars.
+       // outer_structure.inner_structure[?][?].x[?][?];
+       //   ^                    ^        ^  ^  ^ ^  ^
+       //
+       // 1. inputA                                            or      inputB                                          = nested structure
+       // 2. inputA.r                                          or      inputB.r                                        = matrices of structures
+       // 3. inputA.r[?]                                       or      inputB.r[?]                                     = arrays of structures
+       // 4. inputA.r[?][?]                            or      inputB.r[?][?]                          = structures
+       // 5. inputA.r[?][?].(x|y)                      or      inputB.r[?][?].(x|y)            = arrays of vectors
+       // 6. inputA.r[?][?].(x|y)[?]           or      inputB.r[?][?].(x|y)[?]         = vectors of scalars
+       // 7. inputA.r[?][?].(x|y)[?][?]        or      inputB.r[?][?].(x|y)[?][?]      = scalars
+       const int numLevels     = 7;
+
+       fragments["capability"]         =       "OpCapability VariablePointers                                                  \n";
+       fragments["extension"]          =       "OpExtension \"SPV_KHR_variable_pointers\"                              \n"
+                                                                       "OpExtension \"SPV_KHR_storage_buffer_storage_class\"   \n";
+
+       const StringTemplate decoration         (
+               // Set the Offsets
+               "OpMemberDecorate                       %outer_struct 0 Offset 0        \n"
+               "OpMemberDecorate                       %inner_struct 0 Offset 0        \n"
+               "OpMemberDecorate                       %inner_struct 1 Offset 32       \n"
+
+               // Set the ArrayStrides
+               "OpDecorate %arr2_v4float        ArrayStride 16                 \n"
+               "OpDecorate %arr2_inner_struct   ArrayStride 64                 \n"
+               "OpDecorate %mat2x2_inner_struct ArrayStride 128                \n"
+
+               "OpDecorate                                     %outer_struct Block                     \n"
+
+               "OpDecorate %in_a                       DescriptorSet 0                         \n"
+               "OpDecorate %in_b                       DescriptorSet 0                         \n"
+               "OpDecorate %in_a                       Binding 0                                       \n"
+               "OpDecorate %in_b                       Binding 1                                       \n"
+       );
+
+       const StringTemplate preMain            (
+               ///////////
+               // TYPES //
+               ///////////
+
+               // struct struct inner_struct {
+               //   vec4 x[2]; // array of 2 vectors
+               //   vec4 y[2]; // array of 2 vectors
+               // };
+               "%arr2_v4float                  = OpTypeArray %v4f32 %c_u32_2                                           \n"
+               "%inner_struct                  = OpTypeStruct %arr2_v4float %arr2_v4float                      \n"
+
+               // struct outer_struct {
+               //   inner_struct r[2][2];
+               // };
+               "%arr2_inner_struct             = OpTypeArray %inner_struct %c_u32_2                            \n"
+               "%mat2x2_inner_struct   = OpTypeArray %arr2_inner_struct %c_u32_2                       \n"
+               "%outer_struct                  = OpTypeStruct %mat2x2_inner_struct                                     \n"
+
+               ///////////////////
+               // POINTER TYPES //
+               ///////////////////
+               "%sb_buf                                = OpTypePointer StorageBuffer %outer_struct                     \n"
+               "%mat2x2_ptr                    = OpTypePointer StorageBuffer %mat2x2_inner_struct      \n"
+               "%arr2_ptr                              = OpTypePointer StorageBuffer %arr2_inner_struct        \n"
+               "%inner_struct_ptr              = OpTypePointer StorageBuffer %inner_struct                     \n"
+               "%arr_v4f32_ptr                 = OpTypePointer StorageBuffer %arr2_v4float                     \n"
+               "%v4f32_ptr                             = OpTypePointer StorageBuffer %v4f32                            \n"
+               "%sb_f32ptr                             = OpTypePointer StorageBuffer %f32                                      \n"
+
+               ///////////////
+               // VARIABLES //
+               ///////////////
+               "%in_a                                  = OpVariable %sb_buf StorageBuffer                                      \n"
+               "%in_b                                  = OpVariable %sb_buf StorageBuffer                                      \n"
+
+               ///////////////
+               // CONSTANTS //
+               ///////////////
+               "%c_bool_true                   = OpConstantTrue %bool                                                          \n"
+               "%c_bool_false                  = OpConstantFalse %bool                                                         \n"
+
+               //////////////////////
+               // HELPER FUNCTIONS //
+               //////////////////////
+               "${helper_functions} \n"
+       );
+
+       const StringTemplate selectorFunctions  (
+               // This selector function returns a variable pointer.
+               // These functions are used by tests that use OpFunctionCall to obtain the variable pointer.
+               "%selector_func_type    = OpTypeFunction ${selected_type} %bool ${selected_type} ${selected_type}\n"
+               "%choose_input_func             = OpFunction ${selected_type} None %selector_func_type\n"
+               "%choose_first_param    = OpFunctionParameter %bool\n"
+               "%first_param                   = OpFunctionParameter ${selected_type}\n"
+               "%second_param                  = OpFunctionParameter ${selected_type}\n"
+               "%selector_func_begin   = OpLabel\n"
+               "%result_ptr                    = OpSelect ${selected_type} %choose_first_param %first_param %second_param\n"
+               "                                                 OpReturnValue %result_ptr\n"
+               "                                                 OpFunctionEnd\n"
+       );
+
+       const StringTemplate testFunction       (
+               "%test_code             = OpFunction %v4f32 None %v4f32_function\n"
+               "%param                 = OpFunctionParameter %v4f32\n"
+               "%entry                 = OpLabel\n"
+
+               // Define the 2 pointers from which we're going to choose one.
+               "${a_loc} \n"
+               "${b_loc} \n"
+
+               // Choose between the 2 pointers / variable pointers
+               "${selection_strategy} \n"
+
+               // OpAccessChain into the variable pointer until you get to the float.
+               "%result_loc    = OpAccessChain %sb_f32ptr %var_ptr  ${remaining_indexes} \n"
+
+               // Now load from the result_loc
+               "%result_val    = OpLoad %f32 %result_loc\n"
+
+               // Modify the 'RED channel' of the output color to the chosen value
+               "%output_color  = OpCompositeInsert %v4f32 %result_val %param 0 \n"
+
+               // Return and FunctionEnd
+               "OpReturnValue %output_color\n"
+               "OpFunctionEnd\n");
+
+       // When select is 0, the variable pointer should point to a value in the first input (inputA).
+       // When select is 1, the variable pointer should point to a value in the second input (inputB).
+       for (int selectInputA = 0; selectInputA < 2; ++selectInputA)
+       {
+               const string selectedInputStr           = selectInputA ? "first_input"  : "second_input";
+               const string spirvSelectInputA          = selectInputA ? "%c_bool_true" : "%c_bool_false";
+               vector<float>& selectedInput            = selectInputA ? inputA                 : inputB;
+
+               // The indexes chosen at each level. At any level, any given offset is exercised.
+               // The first index is always zero as the outer structure has only 1 member.
+               const int indexesForLevel[numLevels][6]= {{0, 0, 0, 0, 0, 1},
+                                                                                                 {0, 1, 0, 1, 0, 2},
+                                                                                                 {0, 0, 1, 0, 1, 3},
+                                                                                                 {0, 1, 1, 1, 0, 0},
+                                                                                                 {0, 0, 0, 1, 1, 1},
+                                                                                                 {0, 1, 0, 0, 0, 2},
+                                                                                                 {0, 1, 1, 1, 1, 3}};
+
+               const string indexLevelNames[]          = {"_outer_struct_", "_matrices_", "_arrays_", "_inner_structs_", "_vec4arr_", "_vec4_", "_float_"};
+               const string inputALocations[]          = {     "",
+                                                                                       "%a_loc = OpAccessChain %mat2x2_ptr       %in_a %c_i32_0",
+                                                                                       "%a_loc = OpAccessChain %arr2_ptr         %in_a %c_i32_0 %c_i32_0",
+                                                                                       "%a_loc = OpAccessChain %inner_struct_ptr %in_a %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                       "%a_loc = OpAccessChain %arr_v4f32_ptr    %in_a %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                       "%a_loc = OpAccessChain %v4f32_ptr        %in_a %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       "%a_loc = OpAccessChain %sb_f32ptr        %in_a %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3"};
+
+               const string inputBLocations[]          = {     "",
+                                                                                       "%b_loc = OpAccessChain %mat2x2_ptr       %in_b %c_i32_0",
+                                                                                       "%b_loc = OpAccessChain %arr2_ptr         %in_b %c_i32_0 %c_i32_0",
+                                                                                       "%b_loc = OpAccessChain %inner_struct_ptr %in_b %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                       "%b_loc = OpAccessChain %arr_v4f32_ptr    %in_b %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                       "%b_loc = OpAccessChain %v4f32_ptr        %in_b %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       "%b_loc = OpAccessChain %sb_f32ptr        %in_b %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3"};
+
+               const string inputAPtrAccessChain[]     = {     "",
+                                                                                       "%a_loc = OpPtrAccessChain %mat2x2_ptr       %in_a %c_i32_0 %c_i32_0",
+                                                                                       "%a_loc = OpPtrAccessChain %arr2_ptr         %in_a %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       "%a_loc = OpPtrAccessChain %inner_struct_ptr %in_a %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                       "%a_loc = OpPtrAccessChain %arr_v4f32_ptr    %in_a %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                       "%a_loc = OpPtrAccessChain %v4f32_ptr        %in_a %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       // Next case emulates:
+                                                                                       // %a_loc = OpPtrAccessChain %sb_f32ptr      %in_a %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3
+                                                                                       // But rewrite it to exercise OpPtrAccessChain with a non-zero first index:
+                                                                                       //    %a_loc_arr is a pointer to an array that we want to index with 1.
+                                                                                       // But instead of just using OpAccessChain with first index 1, use OpAccessChain with index 0 to
+                                                                                       // get a pointer to the first element, then send that into OpPtrAccessChain with index 1.
+                                                                                       "%a_loc_arr = OpPtrAccessChain %arr_v4f32_ptr %in_a %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 "
+                                                                                       "%a_loc_first_elem = OpAccessChain %v4f32_ptr %a_loc_arr %c_i32_0 "
+                                                                                       "%a_loc = OpPtrAccessChain %sb_f32ptr %a_loc_first_elem %c_i32_1 %c_i32_3"};
+
+               const string inputBPtrAccessChain[]     = {     "",
+                                                                                       "%b_loc = OpPtrAccessChain %mat2x2_ptr       %in_b %c_i32_0 %c_i32_0",
+                                                                                       "%b_loc = OpPtrAccessChain %arr2_ptr         %in_b %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       "%b_loc = OpPtrAccessChain %inner_struct_ptr %in_b %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                       "%b_loc = OpPtrAccessChain %arr_v4f32_ptr    %in_b %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                       "%b_loc = OpPtrAccessChain %v4f32_ptr        %in_b %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       // Next case emulates:
+                                                                                       // %b_loc = OpPtrAccessChain %sb_f32ptr      %in_b %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3
+                                                                                       // But rewrite it to exercise OpPtrAccessChain with a non-zero first index:
+                                                                                       //    %b_loc_arr is a pointer to an array that we want to index with 1.
+                                                                                       // But instead of just using OpAccessChain with first index 1, use OpAccessChain with index 0 to
+                                                                                       // get a pointer to the first element, then send that into OpPtrAccessChain with index 1.
+                                                                                       "%b_loc_arr = OpPtrAccessChain %arr_v4f32_ptr %in_b %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 "
+                                                                                       "%b_loc_first_elem = OpAccessChain %v4f32_ptr %b_loc_arr %c_i32_0 "
+                                                                                       "%b_loc = OpPtrAccessChain %sb_f32ptr %b_loc_first_elem %c_i32_1 %c_i32_3"};
+
+
+               const string remainingIndexesAtLevel[]= {"%c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                                "%c_i32_1 %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_2",
+                                                                                                "%c_i32_1 %c_i32_0 %c_i32_1 %c_i32_3",
+                                                                                                "%c_i32_1 %c_i32_0 %c_i32_0",
+                                                                                                "%c_i32_1 %c_i32_1",
+                                                                                                "%c_i32_2",
+                                                                                                ""};
+
+               const string pointerTypeAtLevel[]       = {"%sb_buf", "%mat2x2_ptr", "%arr2_ptr", "%inner_struct_ptr", "%arr_v4f32_ptr", "%v4f32_ptr", "%sb_f32ptr"};
+               const string baseANameAtLevel[]         = {"%in_a", "%a_loc", "%a_loc", "%a_loc", "%a_loc", "%a_loc", "%a_loc"};
+               const string baseBNameAtLevel[]                 = {"%in_b", "%b_loc", "%b_loc", "%b_loc", "%b_loc", "%b_loc", "%b_loc"};
+
+               for (int indexLevel = 0; indexLevel < numLevels; ++indexLevel)
+               {
+                       baseOffset                                              = getBaseOffset(indexesForLevel[indexLevel][0],
+                                                                                                                       indexesForLevel[indexLevel][1],
+                                                                                                                       indexesForLevel[indexLevel][2],
+                                                                                                                       indexesForLevel[indexLevel][3],
+                                                                                                                       indexesForLevel[indexLevel][4],
+                                                                                                                       indexesForLevel[indexLevel][5]);
+
+                       // Use OpSelect to choose between 2 pointers
+                       {
+                               GraphicsResources                               resources;
+                               map<string, string>                             specs;
+                               string opCodeForTests                   = "opselect";
+                               string name                                             = opCodeForTests + indexLevelNames[indexLevel] + selectedInputStr;
+                               specs["select_inputA"]                  = spirvSelectInputA;
+                               specs["helper_functions"]               = "";
+                               specs["a_loc"]                                  = inputALocations[indexLevel];
+                               specs["b_loc"]                                  = inputBLocations[indexLevel];
+                               specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                               specs["selection_strategy"]             = "%var_ptr     = OpSelect " +
+                                                                                                       pointerTypeAtLevel[indexLevel] + " " +
+                                                                                                       spirvSelectInputA + " " +
+                                                                                                       baseANameAtLevel[indexLevel] + " " +
+                                                                                                       baseBNameAtLevel[indexLevel] + "\n";
+                               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))));
+                               getExpectedOutputColor(defaultColors, expectedColors, selectedInput[baseOffset]);
+                               createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
+                       }
+                       // Use OpCopyObject to get variable pointers
+                       {
+                               GraphicsResources                               resources;
+                               map<string, string>                             specs;
+                               string opCodeForTests                   = "opcopyobject";
+                               string name                                             = opCodeForTests + indexLevelNames[indexLevel] + selectedInputStr;
+                               specs["select_inputA"]                  = spirvSelectInputA;
+                               specs["helper_functions"]               = "";
+                               specs["a_loc"]                                  = inputALocations[indexLevel];
+                               specs["b_loc"]                                  = inputBLocations[indexLevel];
+                               specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                               specs["selection_strategy"]             =
+                                                                       "%in_a_copy = OpCopyObject " + pointerTypeAtLevel[indexLevel] + " " + baseANameAtLevel[indexLevel] + "\n"
+                                                                       "%in_b_copy = OpCopyObject " + pointerTypeAtLevel[indexLevel] + " " + baseBNameAtLevel[indexLevel] + "\n"
+                                                                       "%var_ptr       = OpSelect " + pointerTypeAtLevel[indexLevel] + " " + spirvSelectInputA + " %in_a_copy %in_b_copy\n";
+                               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))));
+                               getExpectedOutputColor(defaultColors, expectedColors, selectedInput[baseOffset]);
+                               createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
+                       }
+                       // Use OpPhi to choose between 2 pointers
+                       {
+                               GraphicsResources                               resources;
+                               map<string, string>                             specs;
+                               string opCodeForTests                   = "opphi";
+                               string name                                             = opCodeForTests + indexLevelNames[indexLevel] + selectedInputStr;
+                               specs["select_inputA"]                  = spirvSelectInputA;
+                               specs["helper_functions"]               = "";
+                               specs["a_loc"]                                  = inputALocations[indexLevel];
+                               specs["b_loc"]                                  = inputBLocations[indexLevel];
+                               specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                               specs["selection_strategy"]             =
+                                                               "                                 OpSelectionMerge %end_label None\n"
+                                                               "                                 OpBranchConditional " + spirvSelectInputA + " %take_input_a %take_input_b\n"
+                                                               "%take_input_a  = OpLabel\n"
+                                                               "                                 OpBranch %end_label\n"
+                                                               "%take_input_b  = OpLabel\n"
+                                                               "                             OpBranch %end_label\n"
+                                                               "%end_label             = OpLabel\n"
+                                                               "%var_ptr               = OpPhi "
+                                                                                                       + pointerTypeAtLevel[indexLevel] + " "
+                                                                                                       + baseANameAtLevel[indexLevel]
+                                                                                                       + " %take_input_a "
+                                                                                                       + baseBNameAtLevel[indexLevel]
+                                                                                                       + " %take_input_b\n";
+                               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))));
+                               getExpectedOutputColor(defaultColors, expectedColors, selectedInput[baseOffset]);
+                               createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
+                       }
+                       // Use OpFunctionCall to choose between 2 pointers
+                       {
+                               GraphicsResources                               resources;
+                               map<string, string>                             functionSpecs;
+                               map<string, string>                             specs;
+                               string opCodeForTests                   = "opfunctioncall";
+                               string name                                             = opCodeForTests + indexLevelNames[indexLevel] + selectedInputStr;
+                               functionSpecs["selected_type"]  = pointerTypeAtLevel[indexLevel];
+                               specs["helper_functions"]               = selectorFunctions.specialize(functionSpecs);
+                               specs["select_inputA"]                  = spirvSelectInputA;
+                               specs["a_loc"]                                  = inputALocations[indexLevel];
+                               specs["b_loc"]                                  = inputBLocations[indexLevel];
+                               specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                               specs["selection_strategy"]             = "%var_ptr     = OpFunctionCall "
+                                                                                                       + pointerTypeAtLevel[indexLevel]
+                                                                                                       + " %choose_input_func "
+                                                                                                       + spirvSelectInputA + " "
+                                                                                                       + baseANameAtLevel[indexLevel] + " "
+                                                                                                       + baseBNameAtLevel[indexLevel] + "\n";
+                               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))));
+                               getExpectedOutputColor(defaultColors, expectedColors, selectedInput[baseOffset]);
+                               createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
+                       }
+                       // Use OpPtrAccessChain to get variable pointers
+                       {
+                               GraphicsResources                               resources;
+                               map<string, string>                             specs;
+                               string opCodeForTests                   = "opptraccesschain";
+                               string name                                             = opCodeForTests + indexLevelNames[indexLevel] + selectedInputStr;
+                               specs["select_inputA"]                  = spirvSelectInputA;
+                               specs["helper_functions"]               = "";
+                               specs["a_loc"]                                  = inputAPtrAccessChain[indexLevel];
+                               specs["b_loc"]                                  = inputBPtrAccessChain[indexLevel];
+                               specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                               specs["selection_strategy"]             = "%var_ptr     = OpSelect "
+                                                                                                       + pointerTypeAtLevel[indexLevel] + " "
+                                                                                                       + spirvSelectInputA + " "
+                                                                                                       + baseANameAtLevel[indexLevel] + " "
+                                                                                                       + baseBNameAtLevel[indexLevel] + "\n";
+                               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))));
+                               getExpectedOutputColor(defaultColors, expectedColors, selectedInput[baseOffset]);
+                               createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
+                       }
+               }
+       }
+}
+
+void addSingleInputBufferReadOnlyVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
+{
+       const int                                               numFloatsPerInnerStruct = 64;
+       vector<float>                                   inputBuffer                             (2 * numFloatsPerInnerStruct, 0);
+       deUint32                                                baseOffset                              = -1;
+       VulkanFeatures                                  requiredFeatures;
+       map<string, string>                             fragments;
+       RGBA                                                    defaultColors[4];
+       RGBA                                                    expectedColors[4];
+       vector<string>                                  extensions;
+
+       // Set the proper extension features required for the tests.
+       // The following tests use variable pointers confined withing a single buffer.
+       requiredFeatures.extVariablePointers = EXTVARIABLEPOINTERSFEATURES_VARIABLE_POINTERS_STORAGEBUFFER;
+
+       // Set the required extension.
+       extensions.push_back("VK_KHR_variable_pointers");
+
+       getDefaultColors(defaultColors);
+
+       // These tests exercise variable pointers into various levels of the following data-structure:
+       // struct struct inner_struct {
+       //   vec4 x[2]; // array of 2 vectors. Each vector is 4 floats.
+       //   vec4 y[2]; // array of 2 vectors. Each vector is 4 floats.
+       // };
+       //
+       // struct outer_struct {
+       //   inner_struct r[2][2];
+       // };
+       //
+       // struct input_buffer {
+       //   outer_struct a;
+       //   outer_struct b;
+       // }
+       //
+       // The inner_struct contains 16 floats, and the outer_struct contains 64 floats.
+       // Therefore the input_buffer can be an array of 128 floats.
+
+       // Populate input_buffer's first member (a) to contain:  {0, 4, ... , 252} / 255.f
+       // Populate input_buffer's second member (b) to contain: {3, 7, ... , 255} / 255.f
+       for (size_t i = 0; i < numFloatsPerInnerStruct; ++i)
+       {
+               inputBuffer[i] = 4*float(i) / 255;
+               inputBuffer[i + numFloatsPerInnerStruct] = ((4*float(i)) + 3) / 255;
+       }
+
+       // In the following tests we use variable pointers to point to different types:
+       // nested structures, matrices of structures, arrays of structures, arrays of vectors, vectors of scalars, and scalars.
+       // outer_struct.inner_struct[?][?].x[?][?];
+       //   ^              ^        ^  ^  ^ ^  ^
+       //
+       // 1. inputBuffer.a                                             or      inputBuffer.b                                           = nested structure
+       // 2. inputBuffer.a.r                                   or      inputBuffer.b.r                                         = matrices of structures
+       // 3. inputBuffer.a.r[?]                                or      inputBuffer.b.r[?]                                      = arrays of structures
+       // 4. inputBuffer.a.r[?][?]                             or      inputBuffer.b.r[?][?]                           = structures
+       // 5. inputBuffer.a.r[?][?].(x|y)               or      inputBuffer.b.r[?][?].(x|y)                     = arrays of vectors
+       // 6. inputBuffer.a.r[?][?].(x|y)[?]    or      inputBuffer.b.r[?][?].(x|y)[?]          = vectors of scalars
+       // 7. inputBuffer.a.r[?][?].(x|y)[?][?] or      inputBuffer.b.r[?][?].(x|y)[?][?]       = scalars
+       const int numLevels     =       7;
+
+       fragments["capability"]         =       "OpCapability VariablePointersStorageBuffer                             \n";
+       fragments["extension"]          =       "OpExtension \"SPV_KHR_variable_pointers\"                              \n"
+                                                                       "OpExtension \"SPV_KHR_storage_buffer_storage_class\"   \n";
+       const StringTemplate decoration         (
+               // Set the ArrayStrides
+               "OpDecorate %arr2_v4float        ArrayStride 16                 \n"
+               "OpDecorate %arr2_inner_struct   ArrayStride 64                 \n"
+               "OpDecorate %mat2x2_inner_struct ArrayStride 128                \n"
+
+               // Set the Offsets
+               "OpMemberDecorate                       %input_buffer 0 Offset 0        \n"
+               "OpMemberDecorate                       %input_buffer 1 Offset 256      \n"
+               "OpMemberDecorate                       %outer_struct 0 Offset 0        \n"
+               "OpMemberDecorate                       %inner_struct 0 Offset 0        \n"
+               "OpMemberDecorate                       %inner_struct 1 Offset 32       \n"
+
+               "OpDecorate                                     %input_buffer Block                     \n"
+
+               "OpDecorate %input                      DescriptorSet 0                         \n"
+               "OpDecorate %input                      Binding 0                                       \n"
+       );
+
+       const StringTemplate preMain            (
+               ///////////
+               // TYPES //
+               ///////////
+
+               // struct struct inner_struct {
+               //   vec4 x[2]; // array of 2 vectors
+               //   vec4 y[2]; // array of 2 vectors
+               // };
+               "%arr2_v4float                  = OpTypeArray %v4f32 %c_u32_2                                           \n"
+               "%inner_struct                  = OpTypeStruct %arr2_v4float %arr2_v4float                      \n"
+
+               // struct outer_struct {
+               //   inner_struct r[2][2];
+               // };
+               "%arr2_inner_struct             = OpTypeArray %inner_struct %c_u32_2                            \n"
+               "%mat2x2_inner_struct   = OpTypeArray %arr2_inner_struct %c_u32_2                       \n"
+               "%outer_struct                  = OpTypeStruct %mat2x2_inner_struct                                     \n"
+
+               // struct input_buffer {
+               //   outer_struct a;
+               //   outer_struct b;
+               // }
+               "%input_buffer                  = OpTypeStruct %outer_struct %outer_struct                      \n"
+
+               ///////////////////
+               // POINTER TYPES //
+               ///////////////////
+               "%input_buffer_ptr              = OpTypePointer StorageBuffer %input_buffer                     \n"
+               "%outer_struct_ptr              = OpTypePointer StorageBuffer %outer_struct                     \n"
+               "%mat2x2_ptr                    = OpTypePointer StorageBuffer %mat2x2_inner_struct      \n"
+               "%arr2_ptr                              = OpTypePointer StorageBuffer %arr2_inner_struct        \n"
+               "%inner_struct_ptr              = OpTypePointer StorageBuffer %inner_struct                     \n"
+               "%arr_v4f32_ptr                 = OpTypePointer StorageBuffer %arr2_v4float                     \n"
+               "%v4f32_ptr                             = OpTypePointer StorageBuffer %v4f32                            \n"
+               "%sb_f32ptr                             = OpTypePointer StorageBuffer %f32                                      \n"
+
+               ///////////////
+               // VARIABLES //
+               ///////////////
+               "%input                                 = OpVariable %input_buffer_ptr StorageBuffer            \n"
+
+               ///////////////
+               // CONSTANTS //
+               ///////////////
+               "%c_bool_true                   = OpConstantTrue %bool                                                          \n"
+               "%c_bool_false                  = OpConstantFalse %bool                                                         \n"
+
+               //////////////////////
+               // HELPER FUNCTIONS //
+               //////////////////////
+               "${helper_functions} \n"
+       );
+
+       const StringTemplate selectorFunctions  (
+               // These selector functions return variable pointers.
+               // These functions are used by tests that use OpFunctionCall to obtain the variable pointer
+               "%selector_func_type    = OpTypeFunction ${selected_type} %bool ${selected_type} ${selected_type}\n"
+               "%choose_input_func             = OpFunction ${selected_type} None %selector_func_type\n"
+               "%choose_first_param    = OpFunctionParameter %bool\n"
+               "%first_param                   = OpFunctionParameter ${selected_type}\n"
+               "%second_param                  = OpFunctionParameter ${selected_type}\n"
+               "%selector_func_begin   = OpLabel\n"
+               "%result_ptr                    = OpSelect ${selected_type} %choose_first_param %first_param %second_param\n"
+               "OpReturnValue %result_ptr\n"
+               "OpFunctionEnd\n"
+       );
+
+       const StringTemplate testFunction       (
+               "%test_code             = OpFunction %v4f32 None %v4f32_function\n"
+               "%param                 = OpFunctionParameter %v4f32\n"
+               "%entry                 = OpLabel\n"
+
+               // Here are the 2 nested structures:
+               "%in_a                  = OpAccessChain %outer_struct_ptr %input %c_i32_0\n"
+               "%in_b                  = OpAccessChain %outer_struct_ptr %input %c_i32_1\n"
+
+               // Define the 2 pointers from which we're going to choose one.
+               "${a_loc} \n"
+               "${b_loc} \n"
+
+               // Choose between the 2 pointers / variable pointers
+               "${selection_strategy} \n"
+
+               // OpAccessChain into the variable pointer until you get to the float.
+               "%result_loc    = OpAccessChain %sb_f32ptr %var_ptr  ${remaining_indexes} \n"
+
+
+               // Now load from the result_loc
+               "%result_val    = OpLoad %f32 %result_loc\n"
+
+               // Modify the 'RED channel' of the output color to the chosen value
+               "%output_color  = OpCompositeInsert %v4f32 %result_val %param 0 \n"
+
+               // Return and FunctionEnd
+               "OpReturnValue %output_color\n"
+               "OpFunctionEnd\n");
+
+       // When select is 0, the variable pointer should point to a value in the first input_buffer member (a).
+       // When select is 1, the variable pointer should point to a value in the second input_buffer member (b).
+       // Since the 2 members of the input_buffer (a and b) are of type outer_struct, we can conveniently use
+       // the same indexing scheme that we used for the 2-input-buffer tests.
+       for (int selectInputA = 0; selectInputA < 2; ++selectInputA)
+       {
+               const string selectedInputStr   = selectInputA ? "first_input"  : "second_input";
+               const string spirvSelectInputA  = selectInputA ? "%c_bool_true" : "%c_bool_false";
+               const int outerStructIndex              = selectInputA ? 0                              : 1;
+
+               // The indexes chosen at each level. At any level, any given offset is exercised.
+               // outerStructIndex is 0 for member (a) and 1 for member (b).
+               const int indexesForLevel[numLevels][6]= {{outerStructIndex, 0, 0, 0, 0, 1},
+                                                                                                 {outerStructIndex, 1, 0, 1, 0, 2},
+                                                                                                 {outerStructIndex, 0, 1, 0, 1, 3},
+                                                                                                 {outerStructIndex, 1, 1, 1, 0, 0},
+                                                                                                 {outerStructIndex, 0, 0, 1, 1, 1},
+                                                                                                 {outerStructIndex, 1, 0, 0, 0, 2},
+                                                                                                 {outerStructIndex, 1, 1, 1, 1, 3}};
+
+               const string indexLevelNames[]          = {"_outer_struct_", "_matrices_", "_arrays_", "_inner_structs_", "_vec4arr_", "_vec4_", "_float_"};
+               const string inputALocations[]          = {     "",
+                                                                                       "%a_loc = OpAccessChain %mat2x2_ptr       %in_a %c_i32_0",
+                                                                                       "%a_loc = OpAccessChain %arr2_ptr         %in_a %c_i32_0 %c_i32_0",
+                                                                                       "%a_loc = OpAccessChain %inner_struct_ptr %in_a %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                       "%a_loc = OpAccessChain %arr_v4f32_ptr    %in_a %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                       "%a_loc = OpAccessChain %v4f32_ptr        %in_a %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       "%a_loc = OpAccessChain %sb_f32ptr        %in_a %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3"};
+
+               const string inputBLocations[]          = {     "",
+                                                                                       "%b_loc = OpAccessChain %mat2x2_ptr       %in_b %c_i32_0",
+                                                                                       "%b_loc = OpAccessChain %arr2_ptr         %in_b %c_i32_0 %c_i32_0",
+                                                                                       "%b_loc = OpAccessChain %inner_struct_ptr %in_b %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                       "%b_loc = OpAccessChain %arr_v4f32_ptr    %in_b %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                       "%b_loc = OpAccessChain %v4f32_ptr        %in_b %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       "%b_loc = OpAccessChain %sb_f32ptr        %in_b %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3"};
+
+               const string inputAPtrAccessChain[]     = {     "",
+                                                                                       "%a_loc = OpPtrAccessChain %mat2x2_ptr       %in_a %c_i32_0 %c_i32_0",
+                                                                                       "%a_loc = OpPtrAccessChain %arr2_ptr         %in_a %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       "%a_loc = OpPtrAccessChain %inner_struct_ptr %in_a %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                       "%a_loc = OpPtrAccessChain %arr_v4f32_ptr    %in_a %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                       "%a_loc = OpPtrAccessChain %v4f32_ptr        %in_a %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       // Next case emulates:
+                                                                                       // %a_loc = OpPtrAccessChain %sb_f32ptr      %in_a %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3
+                                                                                       // But rewrite it to exercise OpPtrAccessChain with a non-zero first index:
+                                                                                       //    %a_loc_arr is a pointer to an array that we want to index with 1.
+                                                                                       // But instead of just using OpAccessChain with first index 1, use OpAccessChain with index 0 to
+                                                                                       // get a pointer to the first element, then send that into OpPtrAccessChain with index 1.
+                                                                                       "%a_loc_arr = OpPtrAccessChain %arr_v4f32_ptr %in_a %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 "
+                                                                                       "%a_loc_first_elem = OpAccessChain %v4f32_ptr %a_loc_arr %c_i32_0 "
+                                                                                       "%a_loc = OpPtrAccessChain %sb_f32ptr %a_loc_first_elem %c_i32_1 %c_i32_3"};
+
+               const string inputBPtrAccessChain[]     = {     "",
+                                                                                       "%b_loc = OpPtrAccessChain %mat2x2_ptr       %in_b %c_i32_0 %c_i32_0",
+                                                                                       "%b_loc = OpPtrAccessChain %arr2_ptr         %in_b %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       "%b_loc = OpPtrAccessChain %inner_struct_ptr %in_b %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1",
+                                                                                       "%b_loc = OpPtrAccessChain %arr_v4f32_ptr    %in_b %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                       "%b_loc = OpPtrAccessChain %v4f32_ptr        %in_b %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_0 %c_i32_0",
+                                                                                       // Next case emulates:
+                                                                                       // %b_loc = OpPtrAccessChain %sb_f32ptr      %in_b %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_1 %c_i32_3
+                                                                                       // But rewrite it to exercise OpPtrAccessChain with a non-zero first index:
+                                                                                       //    %b_loc_arr is a pointer to an array that we want to index with 1.
+                                                                                       // But instead of just using OpAccessChain with first index 1, use OpAccessChain with index 0 to
+                                                                                       // get a pointer to the first element, then send that into OpPtrAccessChain with index 1.
+                                                                                       "%b_loc_arr = OpPtrAccessChain %arr_v4f32_ptr %in_b %c_i32_0 %c_i32_0 %c_i32_1 %c_i32_1 %c_i32_1 "
+                                                                                       "%b_loc_first_elem = OpAccessChain %v4f32_ptr %b_loc_arr %c_i32_0 "
+                                                                                       "%b_loc = OpPtrAccessChain %sb_f32ptr %b_loc_first_elem %c_i32_1 %c_i32_3"};
+
+
+               const string remainingIndexesAtLevel[]= {"%c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_0 %c_i32_1",
+                                                                                                "%c_i32_1 %c_i32_0 %c_i32_1 %c_i32_0 %c_i32_2",
+                                                                                                "%c_i32_1 %c_i32_0 %c_i32_1 %c_i32_3",
+                                                                                                "%c_i32_1 %c_i32_0 %c_i32_0",
+                                                                                                "%c_i32_1 %c_i32_1",
+                                                                                                "%c_i32_2",
+                                                                                                ""};
+
+               const string pointerTypeAtLevel[] = {"%outer_struct_ptr", "%mat2x2_ptr", "%arr2_ptr", "%inner_struct_ptr", "%arr_v4f32_ptr", "%v4f32_ptr", "%sb_f32ptr"};
+               const string baseANameAtLevel[]   = {"%in_a", "%a_loc", "%a_loc", "%a_loc", "%a_loc", "%a_loc", "%a_loc"};
+               const string baseBNameAtLevel[]   = {"%in_b", "%b_loc", "%b_loc", "%b_loc", "%b_loc", "%b_loc", "%b_loc"};
+
+               for (int indexLevel = 0; indexLevel < numLevels; ++indexLevel)
+               {
+                       // Use OpSelect to choose between 2 pointers
+                       {
+                               GraphicsResources                               resources;
+                               map<string, string>                             specs;
+                               string opCodeForTests                   = "opselect";
+                               string name                                             = opCodeForTests + indexLevelNames[indexLevel] + selectedInputStr;
+                               specs["select_inputA"]                  = spirvSelectInputA;
+                               specs["helper_functions"]               = "";
+                               specs["a_loc"]                                  = inputALocations[indexLevel];
+                               specs["b_loc"]                                  = inputBLocations[indexLevel];
+                               specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                               specs["selection_strategy"]             = "%var_ptr     = OpSelect " +
+                                                                                                       pointerTypeAtLevel[indexLevel] + " " +
+                                                                                                       spirvSelectInputA + " " +
+                                                                                                       baseANameAtLevel[indexLevel] + " " +
+                                                                                                       baseBNameAtLevel[indexLevel] + "\n";
+                               baseOffset                                              = getBaseOffsetForSingleInputBuffer(indexesForLevel[indexLevel][0],
+                                                                                                                                                                       indexesForLevel[indexLevel][1],
+                                                                                                                                                                       indexesForLevel[indexLevel][2],
+                                                                                                                                                                       indexesForLevel[indexLevel][3],
+                                                                                                                                                                       indexesForLevel[indexLevel][4],
+                                                                                                                                                                       indexesForLevel[indexLevel][5]);
+                               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))));
+                               getExpectedOutputColor(defaultColors, expectedColors, inputBuffer[baseOffset]);
+                               createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
+                       }
+                       // Use OpCopyObject to get variable pointers
+                       {
+                               GraphicsResources                               resources;
+                               map<string, string>                             specs;
+                               string opCodeForTests                   = "opcopyobject";
+                               string name                                             = opCodeForTests + indexLevelNames[indexLevel] + selectedInputStr;
+                               specs["select_inputA"]                  = spirvSelectInputA;
+                               specs["helper_functions"]               = "";
+                               specs["a_loc"]                                  = inputALocations[indexLevel];
+                               specs["b_loc"]                                  = inputBLocations[indexLevel];
+                               specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                               specs["selection_strategy"]             =
+                                                                       "%in_a_copy = OpCopyObject " + pointerTypeAtLevel[indexLevel] + " " + baseANameAtLevel[indexLevel] + "\n"
+                                                                       "%in_b_copy = OpCopyObject " + pointerTypeAtLevel[indexLevel] + " " + baseBNameAtLevel[indexLevel] + "\n"
+                                                                       "%var_ptr       = OpSelect " + pointerTypeAtLevel[indexLevel] + " " + spirvSelectInputA + " %in_a_copy %in_b_copy\n";
+                               baseOffset                                              = getBaseOffsetForSingleInputBuffer(indexesForLevel[indexLevel][0],
+                                                                                                                                                                       indexesForLevel[indexLevel][1],
+                                                                                                                                                                       indexesForLevel[indexLevel][2],
+                                                                                                                                                                       indexesForLevel[indexLevel][3],
+                                                                                                                                                                       indexesForLevel[indexLevel][4],
+                                                                                                                                                                       indexesForLevel[indexLevel][5]);
+                               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))));
+                               getExpectedOutputColor(defaultColors, expectedColors, inputBuffer[baseOffset]);
+                               createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
+                       }
+                       // Use OpPhi to choose between 2 pointers
+                       {
+                               GraphicsResources                               resources;
+                               map<string, string>                             specs;
+                               string opCodeForTests                   = "opphi";
+                               string name                                             = opCodeForTests + indexLevelNames[indexLevel] + selectedInputStr;
+                               specs["select_inputA"]                  = spirvSelectInputA;
+                               specs["helper_functions"]               = "";
+                               specs["a_loc"]                                  = inputALocations[indexLevel];
+                               specs["b_loc"]                                  = inputBLocations[indexLevel];
+                               specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                               specs["selection_strategy"]             =
+                                                               "                                 OpSelectionMerge %end_label None\n"
+                                                               "                                 OpBranchConditional " + spirvSelectInputA + " %take_input_a %take_input_b\n"
+                                                               "%take_input_a  = OpLabel\n"
+                                                               "                                 OpBranch %end_label\n"
+                                                               "%take_input_b  = OpLabel\n"
+                                                               "                             OpBranch %end_label\n"
+                                                               "%end_label             = OpLabel\n"
+                                                               "%var_ptr               = OpPhi "
+                                                                                                       + pointerTypeAtLevel[indexLevel] + " "
+                                                                                                       + baseANameAtLevel[indexLevel]
+                                                                                                       + " %take_input_a "
+                                                                                                       + baseBNameAtLevel[indexLevel]
+                                                                                                       + " %take_input_b\n";
+                               baseOffset                                              = getBaseOffsetForSingleInputBuffer(indexesForLevel[indexLevel][0],
+                                                                                                                                                                       indexesForLevel[indexLevel][1],
+                                                                                                                                                                       indexesForLevel[indexLevel][2],
+                                                                                                                                                                       indexesForLevel[indexLevel][3],
+                                                                                                                                                                       indexesForLevel[indexLevel][4],
+                                                                                                                                                                       indexesForLevel[indexLevel][5]);
+                               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))));
+                               getExpectedOutputColor(defaultColors, expectedColors, inputBuffer[baseOffset]);
+                               createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
+                       }
+                       // Use OpFunctionCall to choose between 2 pointers
+                       {
+                               GraphicsResources                               resources;
+                               map<string, string>                             functionSpecs;
+                               map<string, string>                             specs;
+                               string opCodeForTests                   = "opfunctioncall";
+                               string name                                             = opCodeForTests + indexLevelNames[indexLevel] + selectedInputStr;
+                               //string selectedType                           = "%mat2x2_ptr";
+                               functionSpecs["selected_type"]  = pointerTypeAtLevel[indexLevel];
+                               specs["helper_functions"]               = selectorFunctions.specialize(functionSpecs);
+                               specs["select_inputA"]                  = spirvSelectInputA;
+                               specs["a_loc"]                                  = inputALocations[indexLevel];
+                               specs["b_loc"]                                  = inputBLocations[indexLevel];
+                               specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                               specs["selection_strategy"]             = "%var_ptr     = OpFunctionCall "
+                                                                                                       + pointerTypeAtLevel[indexLevel]
+                                                                                                       + " %choose_input_func "
+                                                                                                       + spirvSelectInputA + " "
+                                                                                                       + baseANameAtLevel[indexLevel] + " "
+                                                                                                       + baseBNameAtLevel[indexLevel] + "\n";
+                               baseOffset                                              = getBaseOffsetForSingleInputBuffer(indexesForLevel[indexLevel][0],
+                                                                                                                                                                       indexesForLevel[indexLevel][1],
+                                                                                                                                                                       indexesForLevel[indexLevel][2],
+                                                                                                                                                                       indexesForLevel[indexLevel][3],
+                                                                                                                                                                       indexesForLevel[indexLevel][4],
+                                                                                                                                                                       indexesForLevel[indexLevel][5]);
+                               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))));
+                               getExpectedOutputColor(defaultColors, expectedColors, inputBuffer[baseOffset]);
+                               createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
+                       }
+                       // Use OpPtrAccessChain to get variable pointers
+                       {
+                               GraphicsResources                               resources;
+                               map<string, string>                             specs;
+                               string opCodeForTests                   = "opptraccesschain";
+                               string name                                             = opCodeForTests + indexLevelNames[indexLevel] + selectedInputStr;
+                               specs["select_inputA"]                  = spirvSelectInputA;
+                               specs["helper_functions"]               = "";
+                               specs["a_loc"]                                  = inputAPtrAccessChain[indexLevel];
+                               specs["b_loc"]                                  = inputBPtrAccessChain[indexLevel];
+                               specs["remaining_indexes"]              = remainingIndexesAtLevel[indexLevel];
+                               specs["selection_strategy"]             = "%var_ptr     = OpSelect "
+                                                                                                       + pointerTypeAtLevel[indexLevel] + " "
+                                                                                                       + spirvSelectInputA + " "
+                                                                                                       + baseANameAtLevel[indexLevel] + " "
+                                                                                                       + baseBNameAtLevel[indexLevel] + "\n";
+                               baseOffset                                              = getBaseOffsetForSingleInputBuffer(indexesForLevel[indexLevel][0],
+                                                                                                                                                                       indexesForLevel[indexLevel][1],
+                                                                                                                                                                       indexesForLevel[indexLevel][2],
+                                                                                                                                                                       indexesForLevel[indexLevel][3],
+                                                                                                                                                                       indexesForLevel[indexLevel][4],
+                                                                                                                                                                       indexesForLevel[indexLevel][5]);
+                               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))));
+                               getExpectedOutputColor(defaultColors, expectedColors, inputBuffer[baseOffset]);
+                               createTestsForAllStages(name.c_str(), defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
+                       }
+               }
+       }
+}
+
+void addNullptrVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
+{
+       float                                                   someFloat                               = 78 / 255.f;
+       vector<float>                                   input                                   (1, someFloat);
+       vector<float>                                   expectedOutput                  (1, someFloat);
+       VulkanFeatures                                  requiredFeatures;
+       map<string, string>                             fragments;
+       RGBA                                                    defaultColors[4];
+       RGBA                                                    expectedColors[4];
+       vector<string>                                  extensions;
+
+       getDefaultColors(defaultColors);
+       getExpectedOutputColor(defaultColors, expectedColors, someFloat);
+
+       // Set the required extension.
+       extensions.push_back("VK_KHR_variable_pointers");
+
+       // Requires the variable pointers feature.
+       requiredFeatures.extVariablePointers    = EXTVARIABLEPOINTERSFEATURES_VARIABLE_POINTERS;
+
+       fragments["capability"]         =       "OpCapability VariablePointers                                                  \n";
+       fragments["extension"]          =       "OpExtension \"SPV_KHR_variable_pointers\"                              \n"
+                                                                       "OpExtension \"SPV_KHR_storage_buffer_storage_class\"   \n";
+       const StringTemplate decoration         (
+               // Decorations
+               "OpDecorate %input DescriptorSet 0                              \n"
+               "OpDecorate %input Binding 0                                    \n"
+
+               // Set the Block decoration
+               "OpDecorate %float_struct       Block                           \n"
+
+               // Set the Offsets
+               "OpMemberDecorate %float_struct 0 Offset 0              \n"
+       );
+
+       const StringTemplate preMain            (
+               // struct float_struct {
+               //   float x;
+               // };
+               "%float_struct          = OpTypeStruct %f32                                                                                     \n"
+
+               // POINTER TYPES
+               "%float_struct_ptr      = OpTypePointer StorageBuffer %float_struct                                     \n"
+               "%sb_f32ptr                     = OpTypePointer StorageBuffer %f32                                                      \n"
+               "%func_f32ptrptr        = OpTypePointer Function %sb_f32ptr                                                     \n"
+
+               // CONSTANTS
+               "%c_bool_true           = OpConstantTrue        %bool                                                                   \n"
+               "%c_null_ptr            = OpConstantNull        %sb_f32ptr                                                              \n"
+
+               // VARIABLES
+               "%input                         = OpVariable %float_struct_ptr  StorageBuffer                           \n"
+               "%float_var                     = OpVariable %sb_f32ptr                 StorageBuffer %c_null_ptr       \n"
+       );
+
+       const StringTemplate testFunction       (
+               "%test_code             = OpFunction %v4f32 None %v4f32_function\n"
+               "%param                 = OpFunctionParameter %v4f32\n"
+               "%entry                 = OpLabel\n"
+
+               // Note that the Variable Pointers extension allows creation
+               // of a pointer variable with storage class of Private or Function.
+               "%f32_ptr_var   = OpVariable %func_f32ptrptr Function %c_null_ptr\n"
+
+               "%input_loc             = OpAccessChain %sb_f32ptr %input %c_i32_0\n"
+
+               // Null testing strategy
+               "${NullptrTestingStrategy}\n"
+               // Modify the 'RED channel' of the output color to the chosen value
+               "%output_color  = OpCompositeInsert %v4f32 %result_val %param 0 \n"
+               // Return and FunctionEnd
+               "OpReturnValue %output_color\n"
+               "OpFunctionEnd\n");
+
+       // float_var has been inintialized to NULL.
+       // Now set it to the input variable and return it as output
+       {
+               GraphicsResources                               resources;
+               map<string, string>                             specs;
+               specs["NullptrTestingStrategy"] =
+                                                       "                  OpStore %f32_ptr_var %input_loc      \n"
+                                                       "%loaded_f32_ptr = OpLoad  %sb_f32ptr   %f32_ptr_var    \n"
+                                                       "%result_val     = OpLoad  %f32         %loaded_f32_ptr \n";
+               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))));
+               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,
+       // it is forced to always choose the valid pointer.
+       {
+               GraphicsResources                               resources;
+               map<string, string>                             specs;
+               specs["NullptrTestingStrategy"] = "%selected_ptr  = OpSelect %sb_f32ptr %c_bool_true %input_loc %c_null_ptr\n"
+                                                                                 "%result_val    = OpLoad %f32 %selected_ptr\n";
+               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))));
+               createTestsForAllStages("opselect_null_or_valid_ptr", defaultColors, expectedColors, fragments, resources, extensions, testGroup, requiredFeatures);
+       }
+}
+
 } // anonymous
 
 tcu::TestCaseGroup* createVariablePointersComputeGroup (tcu::TestContext& testCtx)
 {
        de::MovePtr<tcu::TestCaseGroup> group   (new tcu::TestCaseGroup(testCtx, "variable_pointers", "Compute tests for SPV_KHR_variable_pointers extension"));
-       addTestGroup(group.get(), "compute", "Test the variable pointer extension using a compute shader", addComputeVariablePointersGroup);
+       addTestGroup(group.get(), "compute", "Test the variable pointer extension using a compute shader", addVariablePointersComputeGroup);
+       addTestGroup(group.get(),
+                                "complex_types_compute",
+                                "Testing Variable Pointers pointing to various types in different input buffers",
+                                addComplexTypesVariablePointersComputeGroup);
+       addTestGroup(group.get(),
+                                "nullptr_compute",
+                                "Test the usage of nullptr using the variable pointers extension in a compute shader",
+                                addNullptrVariablePointersComputeGroup);
 
-       // \todo [2017-03-17 ehsann] A couple of things to do:
-       // * Add more tests (similar to existing ones) using data types other than Float.
        return group.release();
 }
 
 tcu::TestCaseGroup* createVariablePointersGraphicsGroup (tcu::TestContext& testCtx)
 {
        de::MovePtr<tcu::TestCaseGroup> group   (new tcu::TestCaseGroup(testCtx, "variable_pointers", "Graphics tests for SPV_KHR_variable_pointers extension"));
-       addTestGroup(group.get(), "graphics", "Testing Variable Pointers in graphics pipeline", addGraphicsVariablePointersGroup);
 
-       // \todo [2017-03-17 ehsann] A couple of things to do:
-       // * Add more tests (similar to existing ones) using data types other than Float.
+       addTestGroup(group.get(), "graphics", "Testing Variable Pointers in graphics pipeline", addVariablePointersGraphicsGroup);
+       addTestGroup(group.get(),
+                                "multi_buffer_read_only_graphics",
+                                "Testing Variable Pointers pointing to different input buffers in graphics pipeline (no SSBO writes)",
+                                addTwoInputBufferReadOnlyVariablePointersGraphicsGroup);
+       addTestGroup(group.get(),
+                                "single_buffer_read_only_graphics",
+                                "Testing Variable Pointers confined to a single input buffer in graphics pipeline (no SSBO writes)",
+                                addSingleInputBufferReadOnlyVariablePointersGraphicsGroup);
+       addTestGroup(group.get(),
+                                "nullptr_graphics",
+                                "Test the usage of nullptr using the variable pointers extension in graphics pipeline",
+                                addNullptrVariablePointersGraphicsGroup);
+
        return group.release();
 }
 
index 24feea5..2f6af16 100644 (file)
@@ -159570,6 +159570,148 @@ dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.stores_func
 dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.reads_opptraccesschain_two_buffers
 dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.writes_two_buffers
 dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.workgroup_two_buffers
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_outer_struct_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_outer_struct_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_outer_struct_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_outer_struct_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_outer_struct_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_matrices_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_matrices_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_matrices_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_matrices_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_matrices_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_arrays_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_arrays_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_arrays_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_arrays_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_arrays_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_inner_structs_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_inner_structs_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_inner_structs_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_inner_structs_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_inner_structs_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4arr_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4arr_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4arr_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4arr_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4arr_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_float_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_float_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_float_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_float_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_float_two_buffers_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_outer_struct_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_outer_struct_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_outer_struct_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_outer_struct_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_outer_struct_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_matrices_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_matrices_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_matrices_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_matrices_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_matrices_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_arrays_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_arrays_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_arrays_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_arrays_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_arrays_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_inner_structs_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_inner_structs_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_inner_structs_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_inner_structs_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_inner_structs_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4arr_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4arr_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4arr_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4arr_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4arr_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_float_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_float_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_float_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_float_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_float_two_buffers_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_outer_struct_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_outer_struct_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_outer_struct_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_outer_struct_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_outer_struct_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_matrices_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_matrices_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_matrices_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_matrices_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_matrices_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_arrays_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_arrays_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_arrays_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_arrays_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_arrays_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_inner_structs_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_inner_structs_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_inner_structs_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_inner_structs_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_inner_structs_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4arr_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4arr_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4arr_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4arr_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4arr_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_float_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_float_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_float_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_float_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_float_single_buffer_second_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_outer_struct_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_outer_struct_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_outer_struct_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_outer_struct_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_outer_struct_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_matrices_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_matrices_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_matrices_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_matrices_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_matrices_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_arrays_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_arrays_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_arrays_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_arrays_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_arrays_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_inner_structs_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_inner_structs_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_inner_structs_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_inner_structs_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_inner_structs_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4arr_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4arr_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4arr_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4arr_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4arr_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_vec4_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_vec4_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_vec4_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_vec4_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_vec4_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opselect_float_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opfunctioncall_float_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opphi_float_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opcopyobject_float_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.complex_types_compute.opptraccesschain_float_single_buffer_first_input
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.nullptr_compute.opvariable_initialized_null
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.nullptr_compute.opselect_null_or_valid_ptr
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_vert
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_tesse
@@ -161488,6 +161630,716 @@ dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_tw
 dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_tesse
 dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_geom
 dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opselect_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opcopyobject_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opphi_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opfunctioncall_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.multi_buffer_read_only_graphics.opptraccesschain_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_second_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_second_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_second_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_second_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_second_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_outer_struct_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_matrices_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_arrays_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_inner_structs_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4arr_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_vec4_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opselect_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opcopyobject_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opphi_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opfunctioncall_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_first_input_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_first_input_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_first_input_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_first_input_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.single_buffer_read_only_graphics.opptraccesschain_float_first_input_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opvariable_initialized_null_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opvariable_initialized_null_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opvariable_initialized_null_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opvariable_initialized_null_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opvariable_initialized_null_frag
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opselect_null_or_valid_ptr_vert
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opselect_null_or_valid_ptr_tessc
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opselect_null_or_valid_ptr_tesse
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opselect_null_or_valid_ptr_geom
+dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.nullptr_graphics.opselect_null_or_valid_ptr_frag
 dEQP-VK.glsl.arrays.constructor.float3_vertex
 dEQP-VK.glsl.arrays.constructor.float3_fragment
 dEQP-VK.glsl.arrays.constructor.float4_vertex