dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrdiff.variable_pointers_vars_ssbo_diff
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrdiff.variable_pointers_vars_wg_diff
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrdiff.wg_comparisons_diff
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.different_ssbos_equal
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.different_wgs_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.null_comparisons_ssbo_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.null_comparisons_wg_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.ssbo_comparisons_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.variable_pointers_vars_wg_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.variable_pointers_wg_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.wg_comparisons_equal
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.different_ssbos_not_equal
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.different_wgs_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.null_comparisons_ssbo_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.null_comparisons_wg_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.ssbo_comparisons_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.uniformid.workgroup_uniform
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.function_2_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.function_nonwritable
+dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.non_main_function_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.private_2_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.private_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.entrypoint.comp_pc_entry_point
dEQP-VK.spirv_assembly.instruction.spirv1p4.loop_control.min_iterations
dEQP-VK.spirv_assembly.instruction.spirv1p4.loop_control.partial_count
dEQP-VK.spirv_assembly.instruction.spirv1p4.loop_control.peel_count
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.array_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.array_stride_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.nested_array_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.nested_struct_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.scalar_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.ssbo_pointers_2_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.ssbo_pointers_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.struct_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.vector_element_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.vector_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.wg_pointers_2_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.wg_pointers_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.uconvert.spec_const_opt_extend_16_64_bit
dEQP-VK.spirv_assembly.instruction.spirv1p4.uconvert.spec_const_opt_extend_16
dEQP-VK.spirv_assembly.instruction.spirv1p4.uconvert.spec_const_opt_extend_251658240_64_bits
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+
+[compute shader spirv]
+OpCapability Shader
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %func_var NonWritable
+OpDecorate %block Block
+OpMemberDecorate %block 0 Offset 0
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 0
+%void = OpTypeVoid
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_2 = OpConstant %int 2
+%block = OpTypeStruct %int
+%ptr_ssbo_block = OpTypePointer StorageBuffer %block
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%out_var = OpVariable %ptr_ssbo_block StorageBuffer
+%void_fn = OpTypeFunction %void
+%int_fn = OpTypeFunction %int
+%ptr_func_int = OpTypePointer Function %int
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%call = OpFunctionCall %int %func
+%gep = OpAccessChain %ptr_ssbo_int %out_var %int_0
+OpStore %gep %call
+OpReturn
+OpFunctionEnd
+%func = OpFunction %int None %int_fn
+%func_entry = OpLabel
+%func_var = OpVariable %ptr_func_int Function %int_2
+%ld = OpLoad %int %func_var
+OpReturnValue %ld
+OpFunctionEnd
+
+[test]
+ssbo 0:0 4
+
+compute entrypoint main
+compute 1 1 1
+
+probe ssbo uint 0:0 0 == 2
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+VK_KHR_variable_pointers
+VariablePointerFeatures.variablePointers
+VariablePointerFeatures.variablePointersStorageBuffer
+VK_KHR_get_physical_device_properties2
+
+[compute shader spirv]
+OpCapability Shader
+OpCapability VariablePointers
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %var1 %var2 %var3 %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %rta ArrayStride 4
+OpDecorate %struct Block
+OpMemberDecorate %struct 0 Offset 0
+OpDecorate %var1 DescriptorSet 0
+OpDecorate %var1 Binding 0
+OpDecorate %var2 DescriptorSet 0
+OpDecorate %var2 Binding 1
+OpDecorate %var3 DescriptorSet 0
+OpDecorate %var3 Binding 2
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 3
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%rta = OpTypeRuntimeArray %int
+%struct = OpTypeStruct %rta
+%ptr_ssbo_struct = OpTypePointer StorageBuffer %struct
+%ptr_ssbo_rta = OpTypePointer StorageBuffer %rta
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%var1 = OpVariable %ptr_ssbo_struct StorageBuffer
+%var2 = OpVariable %ptr_ssbo_struct StorageBuffer
+%var3 = OpVariable %ptr_ssbo_struct StorageBuffer
+%out_var = OpVariable %ptr_ssbo_struct StorageBuffer
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%out_idx0 = OpCopyObject %int %int_0
+%var1_rta_gep = OpAccessChain %ptr_ssbo_rta %var1 %int_0
+%var1_int_gep = OpAccessChain %ptr_ssbo_int %var1 %int_0 %int_0
+%var2_rta_gep = OpAccessChain %ptr_ssbo_rta %var2 %int_0
+%var2_int_gep = OpAccessChain %ptr_ssbo_int %var2 %int_0 %int_0
+%var3_rta_gep = OpAccessChain %ptr_ssbo_rta %var3 %int_0
+%var3_int_gep = OpAccessChain %ptr_ssbo_int %var3 %int_0 %int_0
+; var1 vs var2
+%v1_eq_v2 = OpPtrEqual %bool %var1 %var2
+%v1_eq_v2_sel = OpSelect %int %v1_eq_v2 %int_1 %int_0
+%out_gep1 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx0
+%out_idx1 = OpIAdd %int %out_idx0 %int_1
+OpStore %out_gep1 %v1_eq_v2_sel
+%v1_eq_v2_rta = OpPtrEqual %bool %var1_rta_gep %var2_rta_gep
+%v1_eq_v2_rta_sel = OpSelect %int %v1_eq_v2_rta %int_1 %int_0
+%out_gep2 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx1
+%out_idx2 = OpIAdd %int %out_idx1 %int_1
+OpStore %out_gep2 %v1_eq_v2_rta_sel
+%v1_eq_v2_int = OpPtrEqual %bool %var1_int_gep %var2_int_gep
+%v1_eq_v2_int_sel = OpSelect %int %v1_eq_v2_int %int_1 %int_0
+%out_gep3 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx2
+%out_idx3 = OpIAdd %int %out_idx2 %int_1
+OpStore %out_gep3 %v1_eq_v2_int_sel
+; var1 vs var3
+%v1_eq_v3 = OpPtrEqual %bool %var1 %var3
+%v1_eq_v3_sel = OpSelect %int %v1_eq_v3 %int_1 %int_0
+%out_gep4 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx3
+%out_idx4 = OpIAdd %int %out_idx3 %int_1
+OpStore %out_gep4 %v1_eq_v3_sel
+%v1_eq_v3_rta = OpPtrEqual %bool %var1_rta_gep %var3_rta_gep
+%v1_eq_v3_rta_sel = OpSelect %int %v1_eq_v3_rta %int_1 %int_0
+%out_gep5 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx4
+%out_idx5 = OpIAdd %int %out_idx4 %int_1
+OpStore %out_gep5 %v1_eq_v3_rta_sel
+%v1_eq_v3_int = OpPtrEqual %bool %var1_int_gep %var3_int_gep
+%v1_eq_v3_int_sel = OpSelect %int %v1_eq_v3_int %int_1 %int_0
+%out_gep6 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx5
+%out_idx6 = OpIAdd %int %out_idx5 %int_1
+OpStore %out_gep6 %v1_eq_v3_int_sel
+; var2 vs var3
+%v2_eq_v3 = OpPtrEqual %bool %var2 %var3
+%v2_eq_v3_sel = OpSelect %int %v2_eq_v3 %int_1 %int_0
+%out_gep7 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx6
+%out_idx7 = OpIAdd %int %out_idx6 %int_1
+OpStore %out_gep7 %v2_eq_v3_sel
+%v2_eq_v3_rta = OpPtrEqual %bool %var2_rta_gep %var3_rta_gep
+%v2_eq_v3_rta_sel = OpSelect %int %v2_eq_v3_rta %int_1 %int_0
+%out_gep8 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx7
+%out_idx8 = OpIAdd %int %out_idx7 %int_1
+OpStore %out_gep8 %v2_eq_v3_rta_sel
+%v2_eq_v3_int = OpPtrEqual %bool %var2_int_gep %var3_int_gep
+%v2_eq_v3_int_sel = OpSelect %int %v2_eq_v3_int %int_1 %int_0
+%out_gep9 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx8
+%out_idx9 = OpIAdd %int %out_idx8 %int_1
+OpStore %out_gep9 %v2_eq_v3_int_sel
+%v1_eq_v1 = OpPtrEqual %bool %var1 %var1
+%v1_eq_v1_sel = OpSelect %int %v1_eq_v1 %int_1 %int_0
+%out_gep10 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx9
+OpStore %out_gep10 %v1_eq_v1_sel
+OpReturn
+OpFunctionEnd
+[test]
+ssbo 0:0 4
+ssbo 0:1 4
+ssbo 0:2 4
+ssbo 0:3 40
+
+compute entrypoint main
+compute 1 1 1
+
+probe ssbo uint 0:3 0 == 0 0 0 0 0 0 0 0 0 1
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+VK_KHR_variable_pointers
+VariablePointerFeatures.variablePointers
+VariablePointerFeatures.variablePointersStorageBuffer
+VK_KHR_get_physical_device_properties2
+
+[compute shader spirv]
+OpCapability Shader
+OpCapability VariablePointers
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %var1 %var2 %var3 %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %rta ArrayStride 4
+OpDecorate %struct Block
+OpMemberDecorate %struct 0 Offset 0
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 0
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%rta = OpTypeRuntimeArray %int
+%struct = OpTypeStruct %rta
+%int2 = OpTypeVector %int 2
+%wg_struct = OpTypeStruct %int2
+%ptr_wg_struct = OpTypePointer Workgroup %wg_struct
+%ptr_wg_int2 = OpTypePointer Workgroup %int2
+%ptr_wg_int = OpTypePointer Workgroup %int
+%var1 = OpVariable %ptr_wg_struct Workgroup
+%var2 = OpVariable %ptr_wg_struct Workgroup
+%var3 = OpVariable %ptr_wg_struct Workgroup
+%ptr_ssbo_struct = OpTypePointer StorageBuffer %struct
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%out_var = OpVariable %ptr_ssbo_struct StorageBuffer
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%out_idx0 = OpCopyObject %int %int_0
+%var1_int2_gep = OpAccessChain %ptr_wg_int2 %var1 %int_0
+%var1_int_gep = OpAccessChain %ptr_wg_int %var1 %int_0 %int_0
+%var2_int2_gep = OpAccessChain %ptr_wg_int2 %var2 %int_0
+%var2_int_gep = OpAccessChain %ptr_wg_int %var2 %int_0 %int_0
+%var3_int2_gep = OpAccessChain %ptr_wg_int2 %var3 %int_0
+%var3_int_gep = OpAccessChain %ptr_wg_int %var3 %int_0 %int_0
+; var1 vs var2
+%v1_eq_v2 = OpPtrEqual %bool %var1 %var2
+%v1_eq_v2_sel = OpSelect %int %v1_eq_v2 %int_1 %int_0
+%out_gep1 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx0
+%out_idx1 = OpIAdd %int %out_idx0 %int_1
+OpStore %out_gep1 %v1_eq_v2_sel
+%v1_eq_v2_rta = OpPtrEqual %bool %var1_int2_gep %var2_int2_gep
+%v1_eq_v2_rta_sel = OpSelect %int %v1_eq_v2_rta %int_1 %int_0
+%out_gep2 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx1
+%out_idx2 = OpIAdd %int %out_idx1 %int_1
+OpStore %out_gep2 %v1_eq_v2_rta_sel
+%v1_eq_v2_int = OpPtrEqual %bool %var1_int_gep %var2_int_gep
+%v1_eq_v2_int_sel = OpSelect %int %v1_eq_v2_int %int_1 %int_0
+%out_gep3 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx2
+%out_idx3 = OpIAdd %int %out_idx2 %int_1
+OpStore %out_gep3 %v1_eq_v2_int_sel
+; var1 vs var3
+%v1_eq_v3 = OpPtrEqual %bool %var1 %var3
+%v1_eq_v3_sel = OpSelect %int %v1_eq_v3 %int_1 %int_0
+%out_gep4 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx3
+%out_idx4 = OpIAdd %int %out_idx3 %int_1
+OpStore %out_gep4 %v1_eq_v3_sel
+%v1_eq_v3_rta = OpPtrEqual %bool %var1_int2_gep %var3_int2_gep
+%v1_eq_v3_rta_sel = OpSelect %int %v1_eq_v3_rta %int_1 %int_0
+%out_gep5 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx4
+%out_idx5 = OpIAdd %int %out_idx4 %int_1
+OpStore %out_gep5 %v1_eq_v3_rta_sel
+%v1_eq_v3_int = OpPtrEqual %bool %var1_int_gep %var3_int_gep
+%v1_eq_v3_int_sel = OpSelect %int %v1_eq_v3_int %int_1 %int_0
+%out_gep6 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx5
+%out_idx6 = OpIAdd %int %out_idx5 %int_1
+OpStore %out_gep6 %v1_eq_v3_int_sel
+; var2 vs var3
+%v2_eq_v3 = OpPtrEqual %bool %var2 %var3
+%v2_eq_v3_sel = OpSelect %int %v2_eq_v3 %int_1 %int_0
+%out_gep7 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx6
+%out_idx7 = OpIAdd %int %out_idx6 %int_1
+OpStore %out_gep7 %v2_eq_v3_sel
+%v2_eq_v3_rta = OpPtrEqual %bool %var2_int2_gep %var3_int2_gep
+%v2_eq_v3_rta_sel = OpSelect %int %v2_eq_v3_rta %int_1 %int_0
+%out_gep8 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx7
+%out_idx8 = OpIAdd %int %out_idx7 %int_1
+OpStore %out_gep8 %v2_eq_v3_rta_sel
+%v2_eq_v3_int = OpPtrEqual %bool %var2_int_gep %var3_int_gep
+%v2_eq_v3_int_sel = OpSelect %int %v2_eq_v3_int %int_1 %int_0
+%out_gep9 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx8
+%out_idx9 = OpIAdd %int %out_idx8 %int_1
+OpStore %out_gep9 %v2_eq_v3_int_sel
+%v1_eq_v1 = OpPtrEqual %bool %var1 %var1
+%v1_eq_v1_sel = OpSelect %int %v1_eq_v1 %int_1 %int_0
+%out_gep10 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx9
+OpStore %out_gep10 %v1_eq_v1_sel
+OpReturn
+OpFunctionEnd
+[test]
+ssbo 0:0 40
+
+compute entrypoint main
+compute 1 1 1
+
+probe ssbo uint 0:0 0 == 0 0 0 0 0 0 0 0 0 1
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+VK_KHR_variable_pointers
+VariablePointerFeatures.variablePointers
+VariablePointerFeatures.variablePointersStorageBuffer
+VK_KHR_get_physical_device_properties2
+
+[compute shader spirv]
+OpCapability Shader
+OpCapability VariablePointers
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %var1 %var2 %var3 %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %rta ArrayStride 4
+OpDecorate %struct Block
+OpMemberDecorate %struct 0 Offset 0
+OpDecorate %var1 DescriptorSet 0
+OpDecorate %var1 Binding 0
+OpDecorate %var2 DescriptorSet 0
+OpDecorate %var2 Binding 1
+OpDecorate %var3 DescriptorSet 0
+OpDecorate %var3 Binding 2
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 3
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%rta = OpTypeRuntimeArray %int
+%struct = OpTypeStruct %rta
+%ptr_ssbo_struct = OpTypePointer StorageBuffer %struct
+%ptr_ssbo_rta = OpTypePointer StorageBuffer %rta
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%var1 = OpVariable %ptr_ssbo_struct StorageBuffer
+%var2 = OpVariable %ptr_ssbo_struct StorageBuffer
+%var3 = OpVariable %ptr_ssbo_struct StorageBuffer
+%out_var = OpVariable %ptr_ssbo_struct StorageBuffer
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%out_idx0 = OpCopyObject %int %int_0
+%var1_rta_gep = OpAccessChain %ptr_ssbo_rta %var1 %int_0
+%var1_int_gep = OpAccessChain %ptr_ssbo_int %var1 %int_0 %int_0
+%var2_rta_gep = OpAccessChain %ptr_ssbo_rta %var2 %int_0
+%var2_int_gep = OpAccessChain %ptr_ssbo_int %var2 %int_0 %int_0
+%var3_rta_gep = OpAccessChain %ptr_ssbo_rta %var3 %int_0
+%var3_int_gep = OpAccessChain %ptr_ssbo_int %var3 %int_0 %int_0
+; var1 vs var2
+%v1_neq_v2 = OpPtrNotEqual %bool %var1 %var2
+%v1_neq_v2_sel = OpSelect %int %v1_neq_v2 %int_1 %int_0
+%out_gep1 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx0
+%out_idx1 = OpIAdd %int %out_idx0 %int_1
+OpStore %out_gep1 %v1_neq_v2_sel
+%v1_neq_v2_rta = OpPtrNotEqual %bool %var1_rta_gep %var2_rta_gep
+%v1_neq_v2_rta_sel = OpSelect %int %v1_neq_v2_rta %int_1 %int_0
+%out_gep2 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx1
+%out_idx2 = OpIAdd %int %out_idx1 %int_1
+OpStore %out_gep2 %v1_neq_v2_rta_sel
+%v1_neq_v2_int = OpPtrNotEqual %bool %var1_int_gep %var2_int_gep
+%v1_neq_v2_int_sel = OpSelect %int %v1_neq_v2_int %int_1 %int_0
+%out_gep3 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx2
+%out_idx3 = OpIAdd %int %out_idx2 %int_1
+OpStore %out_gep3 %v1_neq_v2_int_sel
+; var1 vs var3
+%v1_neq_v3 = OpPtrNotEqual %bool %var1 %var3
+%v1_neq_v3_sel = OpSelect %int %v1_neq_v3 %int_1 %int_0
+%out_gep4 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx3
+%out_idx4 = OpIAdd %int %out_idx3 %int_1
+OpStore %out_gep4 %v1_neq_v3_sel
+%v1_neq_v3_rta = OpPtrNotEqual %bool %var1_rta_gep %var3_rta_gep
+%v1_neq_v3_rta_sel = OpSelect %int %v1_neq_v3_rta %int_1 %int_0
+%out_gep5 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx4
+%out_idx5 = OpIAdd %int %out_idx4 %int_1
+OpStore %out_gep5 %v1_neq_v3_rta_sel
+%v1_neq_v3_int = OpPtrNotEqual %bool %var1_int_gep %var3_int_gep
+%v1_neq_v3_int_sel = OpSelect %int %v1_neq_v3_int %int_1 %int_0
+%out_gep6 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx5
+%out_idx6 = OpIAdd %int %out_idx5 %int_1
+OpStore %out_gep6 %v1_neq_v3_int_sel
+; var2 vs var3
+%v2_neq_v3 = OpPtrNotEqual %bool %var2 %var3
+%v2_neq_v3_sel = OpSelect %int %v2_neq_v3 %int_1 %int_0
+%out_gep7 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx6
+%out_idx7 = OpIAdd %int %out_idx6 %int_1
+OpStore %out_gep7 %v2_neq_v3_sel
+%v2_neq_v3_rta = OpPtrNotEqual %bool %var2_rta_gep %var3_rta_gep
+%v2_neq_v3_rta_sel = OpSelect %int %v2_neq_v3_rta %int_1 %int_0
+%out_gep8 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx7
+%out_idx8 = OpIAdd %int %out_idx7 %int_1
+OpStore %out_gep8 %v2_neq_v3_rta_sel
+%v2_neq_v3_int = OpPtrNotEqual %bool %var2_int_gep %var3_int_gep
+%v2_neq_v3_int_sel = OpSelect %int %v2_neq_v3_int %int_1 %int_0
+%out_gep9 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx8
+%out_idx9 = OpIAdd %int %out_idx8 %int_1
+OpStore %out_gep9 %v2_neq_v3_int_sel
+%v1_neq_v1 = OpPtrNotEqual %bool %var1 %var1
+%v1_neq_v1_sel = OpSelect %int %v1_neq_v1 %int_1 %int_0
+%out_gep10 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx9
+OpStore %out_gep10 %v1_neq_v1_sel
+OpReturn
+OpFunctionEnd
+[test]
+ssbo 0:0 4
+ssbo 0:1 4
+ssbo 0:2 4
+ssbo 0:3 40
+
+compute entrypoint main
+compute 1 1 1
+
+probe ssbo uint 0:3 0 == 1 1 1 1 1 1 1 1 1 0
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+VK_KHR_variable_pointers
+VariablePointerFeatures.variablePointers
+VariablePointerFeatures.variablePointersStorageBuffer
+VK_KHR_get_physical_device_properties2
+
+[compute shader spirv]
+OpCapability Shader
+OpCapability VariablePointers
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %var1 %var2 %var3 %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %rta ArrayStride 4
+OpDecorate %struct Block
+OpMemberDecorate %struct 0 Offset 0
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 0
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%rta = OpTypeRuntimeArray %int
+%struct = OpTypeStruct %rta
+%int2 = OpTypeVector %int 2
+%wg_struct = OpTypeStruct %int2
+%ptr_wg_struct = OpTypePointer Workgroup %wg_struct
+%ptr_wg_int2 = OpTypePointer Workgroup %int2
+%ptr_wg_int = OpTypePointer Workgroup %int
+%var1 = OpVariable %ptr_wg_struct Workgroup
+%var2 = OpVariable %ptr_wg_struct Workgroup
+%var3 = OpVariable %ptr_wg_struct Workgroup
+%ptr_ssbo_struct = OpTypePointer StorageBuffer %struct
+%ptr_ssbo_rta = OpTypePointer StorageBuffer %rta
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%out_var = OpVariable %ptr_ssbo_struct StorageBuffer
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%out_idx0 = OpCopyObject %int %int_0
+%var1_int2_gep = OpAccessChain %ptr_wg_int2 %var1 %int_0
+%var1_int_gep = OpAccessChain %ptr_wg_int %var1 %int_0 %int_0
+%var2_int2_gep = OpAccessChain %ptr_wg_int2 %var2 %int_0
+%var2_int_gep = OpAccessChain %ptr_wg_int %var2 %int_0 %int_0
+%var3_int2_gep = OpAccessChain %ptr_wg_int2 %var3 %int_0
+%var3_int_gep = OpAccessChain %ptr_wg_int %var3 %int_0 %int_0
+; var1 vs var2
+%v1_neq_v2 = OpPtrNotEqual %bool %var1 %var2
+%v1_neq_v2_sel = OpSelect %int %v1_neq_v2 %int_1 %int_0
+%out_gep1 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx0
+%out_idx1 = OpIAdd %int %out_idx0 %int_1
+OpStore %out_gep1 %v1_neq_v2_sel
+%v1_neq_v2_rta = OpPtrNotEqual %bool %var1_int2_gep %var2_int2_gep
+%v1_neq_v2_rta_sel = OpSelect %int %v1_neq_v2_rta %int_1 %int_0
+%out_gep2 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx1
+%out_idx2 = OpIAdd %int %out_idx1 %int_1
+OpStore %out_gep2 %v1_neq_v2_rta_sel
+%v1_neq_v2_int = OpPtrNotEqual %bool %var1_int_gep %var2_int_gep
+%v1_neq_v2_int_sel = OpSelect %int %v1_neq_v2_int %int_1 %int_0
+%out_gep3 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx2
+%out_idx3 = OpIAdd %int %out_idx2 %int_1
+OpStore %out_gep3 %v1_neq_v2_int_sel
+; var1 vs var3
+%v1_neq_v3 = OpPtrNotEqual %bool %var1 %var3
+%v1_neq_v3_sel = OpSelect %int %v1_neq_v3 %int_1 %int_0
+%out_gep4 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx3
+%out_idx4 = OpIAdd %int %out_idx3 %int_1
+OpStore %out_gep4 %v1_neq_v3_sel
+%v1_neq_v3_rta = OpPtrNotEqual %bool %var1_int2_gep %var3_int2_gep
+%v1_neq_v3_rta_sel = OpSelect %int %v1_neq_v3_rta %int_1 %int_0
+%out_gep5 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx4
+%out_idx5 = OpIAdd %int %out_idx4 %int_1
+OpStore %out_gep5 %v1_neq_v3_rta_sel
+%v1_neq_v3_int = OpPtrNotEqual %bool %var1_int_gep %var3_int_gep
+%v1_neq_v3_int_sel = OpSelect %int %v1_neq_v3_int %int_1 %int_0
+%out_gep6 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx5
+%out_idx6 = OpIAdd %int %out_idx5 %int_1
+OpStore %out_gep6 %v1_neq_v3_int_sel
+; var2 vs var3
+%v2_neq_v3 = OpPtrNotEqual %bool %var2 %var3
+%v2_neq_v3_sel = OpSelect %int %v2_neq_v3 %int_1 %int_0
+%out_gep7 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx6
+%out_idx7 = OpIAdd %int %out_idx6 %int_1
+OpStore %out_gep7 %v2_neq_v3_sel
+%v2_neq_v3_rta = OpPtrNotEqual %bool %var2_int2_gep %var3_int2_gep
+%v2_neq_v3_rta_sel = OpSelect %int %v2_neq_v3_rta %int_1 %int_0
+%out_gep8 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx7
+%out_idx8 = OpIAdd %int %out_idx7 %int_1
+OpStore %out_gep8 %v2_neq_v3_rta_sel
+%v2_neq_v3_int = OpPtrNotEqual %bool %var2_int_gep %var3_int_gep
+%v2_neq_v3_int_sel = OpSelect %int %v2_neq_v3_int %int_1 %int_0
+%out_gep9 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx8
+%out_idx9 = OpIAdd %int %out_idx8 %int_1
+OpStore %out_gep9 %v2_neq_v3_int_sel
+%v1_neq_v1 = OpPtrNotEqual %bool %var1 %var1
+%v1_neq_v1_sel = OpSelect %int %v1_neq_v1 %int_1 %int_0
+%out_gep10 = OpAccessChain %ptr_ssbo_int %out_var %int_0 %out_idx9
+OpStore %out_gep10 %v1_neq_v1_sel
+OpReturn
+OpFunctionEnd
+[test]
+ssbo 0:0 40
+
+compute entrypoint main
+compute 1 1 1
+
+probe ssbo uint 0:0 0 == 1 1 1 1 1 1 1 1 1 0
+
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+
+[compute shader spirv]
+OpCapability Shader
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %gid_var %in_var %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %gid_var BuiltIn GlobalInvocationId
+OpDecorate %int_array ArrayStride 4
+OpDecorate %rta ArrayStride 4
+OpDecorate %rta_array ArrayStride 16
+OpDecorate %struct Block
+OpMemberDecorate %struct 0 Offset 0
+OpDecorate %out_struct Block
+OpMemberDecorate %out_struct 0 Offset 0
+OpDecorate %in_var DescriptorSet 0
+OpDecorate %in_var Binding 0
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 1
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%int_2 = OpConstant %int 2
+%int_3 = OpConstant %int 3
+%int_4 = OpConstant %int 4
+%int3 = OpTypeVector %int 3
+%int_array = OpTypeArray %int %int_4
+%const_array1 = OpConstantComposite %int_array %int_0 %int_1 %int_2 %int_3
+%const_array2 = OpConstantComposite %int_array %int_3 %int_2 %int_1 %int_0
+%rta_array = OpTypeRuntimeArray %int_array
+%out_struct = OpTypeStruct %rta_array
+%rta = OpTypeRuntimeArray %int
+%struct = OpTypeStruct %rta
+%ptr_input_int3 = OpTypePointer Input %int3
+%gid_var = OpVariable %ptr_input_int3 Input
+%ptr_ssbo_struct = OpTypePointer StorageBuffer %struct
+%ptr_ssbo_out_struct = OpTypePointer StorageBuffer %out_struct
+%ptr_ssbo_array = OpTypePointer StorageBuffer %int_array
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%in_var = OpVariable %ptr_ssbo_struct StorageBuffer
+%out_var = OpVariable %ptr_ssbo_out_struct StorageBuffer
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%gid = OpLoad %int3 %gid_var
+%gid_x = OpCompositeExtract %int %gid 0
+%in_gep = OpAccessChain %ptr_ssbo_int %in_var %int_0 %gid_x
+%ld = OpLoad %int %in_gep
+%eq_0 = OpIEqual %bool %ld %int_0
+%select = OpSelect %int_array %eq_0 %const_array1 %const_array2
+%out_gep = OpAccessChain %ptr_ssbo_array %out_var %int_0 %gid_x
+OpStore %out_gep %select
+OpReturn
+OpFunctionEnd
+
+[test]
+ssbo 0:0 subdata uint 0 0 1 1 0
+ssbo 0:1 64
+
+compute entrypoint main
+compute 4 1 1
+
+probe ssbo uint 0:1 0 == 0 1 2 3 3 2 1 0 3 2 1 0 0 1 2 3
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+
+[compute shader spirv]
+OpCapability Shader
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %gid_var %in_var %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %gid_var BuiltIn GlobalInvocationId
+OpDecorate %int_array ArrayStride 8
+OpDecorate %rta ArrayStride 4
+OpDecorate %rta_array ArrayStride 32
+OpDecorate %struct Block
+OpMemberDecorate %struct 0 Offset 0
+OpDecorate %out_struct Block
+OpMemberDecorate %out_struct 0 Offset 0
+OpDecorate %in_var DescriptorSet 0
+OpDecorate %in_var Binding 0
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 1
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%int_2 = OpConstant %int 2
+%int_3 = OpConstant %int 3
+%int_4 = OpConstant %int 4
+%int3 = OpTypeVector %int 3
+%int_array = OpTypeArray %int %int_4
+%const_array1 = OpConstantComposite %int_array %int_0 %int_1 %int_2 %int_3
+%const_array2 = OpConstantComposite %int_array %int_3 %int_2 %int_1 %int_0
+%rta_array = OpTypeRuntimeArray %int_array
+%out_struct = OpTypeStruct %rta_array
+%rta = OpTypeRuntimeArray %int
+%struct = OpTypeStruct %rta
+%ptr_input_int3 = OpTypePointer Input %int3
+%gid_var = OpVariable %ptr_input_int3 Input
+%ptr_ssbo_struct = OpTypePointer StorageBuffer %struct
+%ptr_ssbo_out_struct = OpTypePointer StorageBuffer %out_struct
+%ptr_ssbo_array = OpTypePointer StorageBuffer %int_array
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%in_var = OpVariable %ptr_ssbo_struct StorageBuffer
+%out_var = OpVariable %ptr_ssbo_out_struct StorageBuffer
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%gid = OpLoad %int3 %gid_var
+%gid_x = OpCompositeExtract %int %gid 0
+%in_gep = OpAccessChain %ptr_ssbo_int %in_var %int_0 %gid_x
+%ld = OpLoad %int %in_gep
+%eq_0 = OpIEqual %bool %ld %int_0
+%select = OpSelect %int_array %eq_0 %const_array1 %const_array2
+%out_gep = OpAccessChain %ptr_ssbo_array %out_var %int_0 %gid_x
+OpStore %out_gep %select
+OpReturn
+OpFunctionEnd
+
+[test]
+ssbo 0:0 subdata uint 0 0 1
+ssbo 0:1 64
+
+compute entrypoint main
+compute 2 1 1
+
+probe ssbo uint 0:1 0 == 0
+probe ssbo uint 0:1 8 == 1
+probe ssbo uint 0:1 16 == 2
+probe ssbo uint 0:1 24 == 3
+probe ssbo uint 0:1 32 == 3
+probe ssbo uint 0:1 40 == 2
+probe ssbo uint 0:1 48 == 1
+probe ssbo uint 0:1 56 == 0
+
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+
+[compute shader spirv]
+OpCapability Shader
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %gid_var %sel_var %in_var %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %gid_var BuiltIn GlobalInvocationId
+OpDecorate %inner ArrayStride 4
+OpMemberDecorate %outer 0 Offset 0
+OpMemberDecorate %outer 1 Offset 8
+OpDecorate %rta ArrayStride 4
+OpDecorate %rta_out ArrayStride 16
+OpDecorate %block Block
+OpMemberDecorate %block 0 Offset 0
+OpDecorate %out_block Block
+OpMemberDecorate %out_block 0 Offset 0
+OpDecorate %sel_var DescriptorSet 0
+OpDecorate %sel_var Binding 0
+OpDecorate %in_var DescriptorSet 0
+OpDecorate %in_var Binding 1
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 2
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%int_2 = OpConstant %int 2
+%int3 = OpTypeVector %int 3
+%inner = OpTypeArray %int %int_2
+%outer = OpTypeStruct %inner %inner
+%rta_out = OpTypeRuntimeArray %outer
+%out_block = OpTypeStruct %rta_out
+%rta = OpTypeRuntimeArray %int
+%block = OpTypeStruct %rta
+%ptr_input_int3 = OpTypePointer Input %int3
+%gid_var = OpVariable %ptr_input_int3 Input
+%ptr_ssbo_block = OpTypePointer StorageBuffer %block
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%ptr_ssbo_out_block = OpTypePointer StorageBuffer %out_block
+%ptr_ssbo_outer = OpTypePointer StorageBuffer %outer
+%sel_var = OpVariable %ptr_ssbo_block StorageBuffer
+%in_var = OpVariable %ptr_ssbo_out_block StorageBuffer
+%out_var = OpVariable %ptr_ssbo_out_block StorageBuffer
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%gid = OpLoad %int3 %gid_var
+%gid_x = OpCompositeExtract %int %gid 0
+%in_gep0 = OpAccessChain %ptr_ssbo_outer %in_var %int_0 %int_0
+%in0 = OpLoad %outer %in_gep0
+%in_gep1 = OpAccessChain %ptr_ssbo_outer %in_var %int_0 %int_1
+%in1 = OpLoad %outer %in_gep1
+%sel_gep = OpAccessChain %ptr_ssbo_int %sel_var %int_0 %gid_x
+%sel_val = OpLoad %int %sel_gep
+%eq_0 = OpIEqual %bool %sel_val %int_0
+%select = OpSelect %outer %eq_0 %in0 %in1
+%out_gep = OpAccessChain %ptr_ssbo_outer %out_var %int_0 %gid_x
+OpStore %out_gep %select
+OpReturn
+OpFunctionEnd
+
+[test]
+ssbo 0:0 subdata uint 0 1 0
+ssbo 0:1 subdata uint 0 1 1 1 1 2 2 2 2
+ssbo 0:2 32
+
+compute entrypoint main
+compute 2 1 1
+
+probe ssbo uint 0:2 0 == 2 2 2 2
+probe ssbo uint 0:2 16 == 1 1 1 1
+
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+
+[compute shader spirv]
+OpCapability Shader
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %gid_var %sel_var %in_var %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %gid_var BuiltIn GlobalInvocationId
+OpMemberDecorate %inner 0 Offset 0
+OpMemberDecorate %inner 1 Offset 4
+OpMemberDecorate %outer 0 Offset 0
+OpMemberDecorate %outer 1 Offset 8
+OpDecorate %rta ArrayStride 4
+OpDecorate %rta_out ArrayStride 16
+OpDecorate %block Block
+OpMemberDecorate %block 0 Offset 0
+OpDecorate %out_block Block
+OpMemberDecorate %out_block 0 Offset 0
+OpDecorate %sel_var DescriptorSet 0
+OpDecorate %sel_var Binding 0
+OpDecorate %in_var DescriptorSet 0
+OpDecorate %in_var Binding 1
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 2
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%int3 = OpTypeVector %int 3
+%inner = OpTypeStruct %int %int
+%outer = OpTypeStruct %inner %inner
+%rta_out = OpTypeRuntimeArray %outer
+%out_block = OpTypeStruct %rta_out
+%rta = OpTypeRuntimeArray %int
+%block = OpTypeStruct %rta
+%ptr_input_int3 = OpTypePointer Input %int3
+%gid_var = OpVariable %ptr_input_int3 Input
+%ptr_ssbo_block = OpTypePointer StorageBuffer %block
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%ptr_ssbo_out_block = OpTypePointer StorageBuffer %out_block
+%ptr_ssbo_outer = OpTypePointer StorageBuffer %outer
+%sel_var = OpVariable %ptr_ssbo_block StorageBuffer
+%in_var = OpVariable %ptr_ssbo_out_block StorageBuffer
+%out_var = OpVariable %ptr_ssbo_out_block StorageBuffer
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%gid = OpLoad %int3 %gid_var
+%gid_x = OpCompositeExtract %int %gid 0
+%in_gep0 = OpAccessChain %ptr_ssbo_outer %in_var %int_0 %int_0
+%in0 = OpLoad %outer %in_gep0
+%in_gep1 = OpAccessChain %ptr_ssbo_outer %in_var %int_0 %int_1
+%in1 = OpLoad %outer %in_gep1
+%sel_gep = OpAccessChain %ptr_ssbo_int %sel_var %int_0 %gid_x
+%sel_val = OpLoad %int %sel_gep
+%eq_0 = OpIEqual %bool %sel_val %int_0
+%select = OpSelect %outer %eq_0 %in0 %in1
+%out_gep = OpAccessChain %ptr_ssbo_outer %out_var %int_0 %gid_x
+OpStore %out_gep %select
+OpReturn
+OpFunctionEnd
+
+[test]
+ssbo 0:0 subdata uint 0 1 0
+ssbo 0:1 subdata uint 0 1 1 1 1 2 2 2 2
+ssbo 0:2 32
+
+compute entrypoint main
+compute 2 1 1
+
+probe ssbo uint 0:2 0 == 2 2 2 2
+probe ssbo uint 0:2 16 == 1 1 1 1
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+VK_KHR_variable_pointers
+VariablePointerFeatures.variablePointersStorageBuffer
+VariablePointerFeatures.variablePointers
+VK_KHR_get_physical_device_properties2
+
+[compute shader spirv]
+OpCapability Shader
+OpCapability VariablePointers
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %gid_var %sel_var %in1_var %in2_var %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %gid_var BuiltIn GlobalInvocationId
+OpMemberDecorate %inner 0 Offset 0
+OpMemberDecorate %inner 1 Offset 4
+OpMemberDecorate %outer 0 Offset 0
+OpMemberDecorate %outer 1 Offset 8
+OpDecorate %rta ArrayStride 4
+OpDecorate %rta_struct ArrayStride 16
+OpDecorate %block Block
+OpMemberDecorate %block 0 Offset 0
+OpDecorate %data_block Block
+OpMemberDecorate %data_block 0 Offset 0
+OpDecorate %sel_var DescriptorSet 0
+OpDecorate %sel_var Binding 0
+OpDecorate %in1_var DescriptorSet 0
+OpDecorate %in1_var Binding 1
+OpDecorate %in2_var DescriptorSet 0
+OpDecorate %in2_var Binding 2
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 3
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%int3 = OpTypeVector %int 3
+%inner = OpTypeStruct %int %int
+%outer = OpTypeStruct %inner %inner
+%rta_struct = OpTypeRuntimeArray %outer
+%rta = OpTypeRuntimeArray %int
+%data_block = OpTypeStruct %rta_struct
+%block = OpTypeStruct %rta
+%ptr_input_int3 = OpTypePointer Input %int3
+%gid_var = OpVariable %ptr_input_int3 Input
+%ptr_ssbo_block = OpTypePointer StorageBuffer %block
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%ptr_ssbo_data_block = OpTypePointer StorageBuffer %data_block
+%ptr_ssbo_outer = OpTypePointer StorageBuffer %outer
+%sel_var = OpVariable %ptr_ssbo_block StorageBuffer
+%in1_var = OpVariable %ptr_ssbo_data_block StorageBuffer
+%in2_var = OpVariable %ptr_ssbo_data_block StorageBuffer
+%out_var = OpVariable %ptr_ssbo_data_block StorageBuffer
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%gid = OpLoad %int3 %gid_var
+%gid_x = OpCompositeExtract %int %gid 0
+%in_gep0 = OpAccessChain %ptr_ssbo_outer %in1_var %int_0 %int_0
+%in_gep1 = OpAccessChain %ptr_ssbo_outer %in2_var %int_0 %int_0
+%sel_gep = OpAccessChain %ptr_ssbo_int %sel_var %int_0 %gid_x
+%sel_val = OpLoad %int %sel_gep
+%eq_0 = OpIEqual %bool %sel_val %int_0
+%select = OpSelect %ptr_ssbo_outer %eq_0 %in_gep0 %in_gep1
+%out_gep = OpAccessChain %ptr_ssbo_outer %out_var %int_0 %gid_x
+%ld = OpLoad %outer %select
+OpStore %out_gep %ld
+OpReturn
+OpFunctionEnd
+
+[test]
+ssbo 0:0 subdata uint 0 1 0
+ssbo 0:1 subdata uint 0 1 1 1 1
+ssbo 0:2 subdata uint 0 2 2 2 2
+ssbo 0:3 32
+
+compute entrypoint main
+compute 2 1 1
+
+probe ssbo uint 0:3 0 == 2 2 2 2
+probe ssbo uint 0:3 16 == 1 1 1 1
+
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+VK_KHR_variable_pointers
+VariablePointerFeatures.variablePointersStorageBuffer
+VK_KHR_get_physical_device_properties2
+
+[compute shader spirv]
+OpCapability Shader
+OpCapability VariablePointersStorageBuffer
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %gid_var %sel_var %in_var %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %gid_var BuiltIn GlobalInvocationId
+OpMemberDecorate %inner 0 Offset 0
+OpMemberDecorate %inner 1 Offset 4
+OpMemberDecorate %outer 0 Offset 0
+OpMemberDecorate %outer 1 Offset 8
+OpDecorate %rta ArrayStride 4
+OpDecorate %rta_struct ArrayStride 16
+OpDecorate %block Block
+OpMemberDecorate %block 0 Offset 0
+OpDecorate %data_block Block
+OpMemberDecorate %data_block 0 Offset 0
+OpDecorate %sel_var DescriptorSet 0
+OpDecorate %sel_var Binding 0
+OpDecorate %in_var DescriptorSet 0
+OpDecorate %in_var Binding 1
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 2
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%int3 = OpTypeVector %int 3
+%inner = OpTypeStruct %int %int
+%outer = OpTypeStruct %inner %inner
+%rta_struct = OpTypeRuntimeArray %outer
+%rta = OpTypeRuntimeArray %int
+%data_block = OpTypeStruct %rta_struct
+%block = OpTypeStruct %rta
+%ptr_input_int3 = OpTypePointer Input %int3
+%gid_var = OpVariable %ptr_input_int3 Input
+%ptr_ssbo_block = OpTypePointer StorageBuffer %block
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%ptr_ssbo_data_block = OpTypePointer StorageBuffer %data_block
+%ptr_ssbo_outer = OpTypePointer StorageBuffer %outer
+%sel_var = OpVariable %ptr_ssbo_block StorageBuffer
+%in_var = OpVariable %ptr_ssbo_data_block StorageBuffer
+%out_var = OpVariable %ptr_ssbo_data_block StorageBuffer
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%gid = OpLoad %int3 %gid_var
+%gid_x = OpCompositeExtract %int %gid 0
+%in_gep0 = OpAccessChain %ptr_ssbo_outer %in_var %int_0 %int_0
+%in_gep1 = OpAccessChain %ptr_ssbo_outer %in_var %int_0 %int_1
+%sel_gep = OpAccessChain %ptr_ssbo_int %sel_var %int_0 %gid_x
+%sel_val = OpLoad %int %sel_gep
+%eq_0 = OpIEqual %bool %sel_val %int_0
+%select = OpSelect %ptr_ssbo_outer %eq_0 %in_gep0 %in_gep1
+%out_gep = OpAccessChain %ptr_ssbo_outer %out_var %int_0 %gid_x
+OpCopyMemory %out_gep %select
+OpReturn
+OpFunctionEnd
+
+[test]
+ssbo 0:0 subdata uint 0 1 0
+ssbo 0:1 subdata uint 0 1 1 1 1 2 2 2 2
+ssbo 0:2 32
+
+compute entrypoint main
+compute 2 1 1
+
+probe ssbo uint 0:2 0 == 2 2 2 2
+probe ssbo uint 0:2 16 == 1 1 1 1
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+
+[compute shader spirv]
+OpCapability Shader
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %gid_var %sel_var %in_var %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %gid_var BuiltIn GlobalInvocationId
+OpDecorate %rta ArrayStride 16
+OpDecorate %block Block
+OpMemberDecorate %block 0 Offset 0
+OpDecorate %sel_var DescriptorSet 0
+OpDecorate %sel_var Binding 0
+OpDecorate %in_var DescriptorSet 0
+OpDecorate %in_var Binding 1
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 2
+%void = OpTypeVoid
+%bool = OpTypeBool
+%bool4 = OpTypeVector %bool 4
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%int3 = OpTypeVector %int 3
+%int4 = OpTypeVector %int 4
+%int4_0 = OpConstantNull %int4
+%rta = OpTypeRuntimeArray %int4
+%block = OpTypeStruct %rta
+%ptr_input_int3 = OpTypePointer Input %int3
+%gid_var = OpVariable %ptr_input_int3 Input
+%ptr_ssbo_block = OpTypePointer StorageBuffer %block
+%ptr_ssbo_int4 = OpTypePointer StorageBuffer %int4
+%sel_var = OpVariable %ptr_ssbo_block StorageBuffer
+%in_var = OpVariable %ptr_ssbo_block StorageBuffer
+%out_var = OpVariable %ptr_ssbo_block StorageBuffer
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%gid = OpLoad %int3 %gid_var
+%gid_x = OpCompositeExtract %int %gid 0
+%in_gep0 = OpAccessChain %ptr_ssbo_int4 %in_var %int_0 %int_0
+%in0 = OpLoad %int4 %in_gep0
+%in_gep1 = OpAccessChain %ptr_ssbo_int4 %in_var %int_0 %int_1
+%in1 = OpLoad %int4 %in_gep1
+%sel_gep = OpAccessChain %ptr_ssbo_int4 %sel_var %int_0 %gid_x
+%sel_ld = OpLoad %int4 %sel_gep
+%eq_0 = OpIEqual %bool4 %sel_ld %int4_0
+%select = OpSelect %int4 %eq_0 %in0 %in1
+%out_gep = OpAccessChain %ptr_ssbo_int4 %out_var %int_0 %gid_x
+OpStore %out_gep %select
+OpReturn
+OpFunctionEnd
+
+[test]
+ssbo 0:0 subdata uint 0 0 1 0 1 1 0 1 0
+ssbo 0:1 subdata uint 0 1 1 1 1 2 2 2 2
+ssbo 0:2 32
+
+compute entrypoint main
+compute 2 1 1
+
+probe ssbo uint 0:2 0 == 1 2 1 2
+probe ssbo uint 0:2 16 == 2 1 2 1
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+VK_KHR_variable_pointers
+VariablePointerFeatures.variablePointersStorageBuffer
+VariablePointerFeatures.variablePointers
+VK_KHR_get_physical_device_properties2
+
+[compute shader spirv]
+OpCapability Shader
+OpCapability VariablePointers
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %gid_var %sel_var %wg1_var %wg2_var %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %gid_var BuiltIn GlobalInvocationId
+OpMemberDecorate %inner 0 Offset 0
+OpMemberDecorate %inner 1 Offset 4
+OpMemberDecorate %outer 0 Offset 0
+OpMemberDecorate %outer 1 Offset 8
+OpDecorate %rta ArrayStride 4
+OpDecorate %rta_struct ArrayStride 16
+OpDecorate %block Block
+OpMemberDecorate %block 0 Offset 0
+OpDecorate %data_block Block
+OpMemberDecorate %data_block 0 Offset 0
+OpDecorate %sel_var DescriptorSet 0
+OpDecorate %sel_var Binding 0
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 1
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%int_2 = OpConstant %int 2
+%int3 = OpTypeVector %int 3
+%inner = OpTypeStruct %int %int
+%outer = OpTypeStruct %inner %inner
+%rta_struct = OpTypeRuntimeArray %outer
+%rta = OpTypeRuntimeArray %int
+%data_block = OpTypeStruct %rta_struct
+%block = OpTypeStruct %rta
+%ptr_input_int3 = OpTypePointer Input %int3
+%gid_var = OpVariable %ptr_input_int3 Input
+%ptr_ssbo_block = OpTypePointer StorageBuffer %block
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%ptr_ssbo_data_block = OpTypePointer StorageBuffer %data_block
+%ptr_ssbo_outer = OpTypePointer StorageBuffer %outer
+%sel_var = OpVariable %ptr_ssbo_block StorageBuffer
+%ptr_wg_outer = OpTypePointer Workgroup %outer
+%wg1_var = OpVariable %ptr_wg_outer Workgroup
+%wg2_var = OpVariable %ptr_wg_outer Workgroup
+%out_var = OpVariable %ptr_ssbo_data_block StorageBuffer
+%inner_const0 = OpConstantComposite %inner %int_1 %int_1
+%inner_const1 = OpConstantComposite %inner %int_2 %int_2
+%outer_const0 = OpConstantComposite %outer %inner_const0 %inner_const0
+%outer_const1 = OpConstantComposite %outer %inner_const1 %inner_const1
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%gid = OpLoad %int3 %gid_var
+%gid_x = OpCompositeExtract %int %gid 0
+OpStore %wg1_var %outer_const0
+OpStore %wg2_var %outer_const1
+%sel_gep = OpAccessChain %ptr_ssbo_int %sel_var %int_0 %gid_x
+%sel_val = OpLoad %int %sel_gep
+%eq_0 = OpIEqual %bool %sel_val %int_0
+%select = OpSelect %ptr_wg_outer %eq_0 %wg1_var %wg2_var
+%out_gep = OpAccessChain %ptr_ssbo_outer %out_var %int_0 %gid_x
+%ld = OpLoad %outer %select
+OpStore %out_gep %ld
+OpReturn
+OpFunctionEnd
+
+[test]
+ssbo 0:0 subdata uint 0 1 0
+ssbo 0:1 32
+
+compute entrypoint main
+compute 2 1 1
+
+probe ssbo uint 0:1 0 == 2 2 2 2
+probe ssbo uint 0:1 16 == 1 1 1 1
+
+
--- /dev/null
+[require]
+VK_KHR_spirv_1_4
+VK_KHR_variable_pointers
+VariablePointerFeatures.variablePointersStorageBuffer
+VariablePointerFeatures.variablePointers
+VK_KHR_get_physical_device_properties2
+
+[compute shader spirv]
+OpCapability Shader
+OpCapability VariablePointers
+OpMemoryModel Logical GLSL450
+OpEntryPoint GLCompute %main "main" %gid_var %sel_var %wg_var %out_var
+OpExecutionMode %main LocalSize 1 1 1
+OpDecorate %gid_var BuiltIn GlobalInvocationId
+OpMemberDecorate %inner 0 Offset 0
+OpMemberDecorate %inner 1 Offset 4
+OpMemberDecorate %outer 0 Offset 0
+OpMemberDecorate %outer 1 Offset 8
+OpDecorate %rta ArrayStride 4
+OpDecorate %rta_struct ArrayStride 16
+OpDecorate %block Block
+OpMemberDecorate %block 0 Offset 0
+OpDecorate %data_block Block
+OpMemberDecorate %data_block 0 Offset 0
+OpDecorate %sel_var DescriptorSet 0
+OpDecorate %sel_var Binding 0
+OpDecorate %out_var DescriptorSet 0
+OpDecorate %out_var Binding 1
+%void = OpTypeVoid
+%bool = OpTypeBool
+%int = OpTypeInt 32 0
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%int_2 = OpConstant %int 2
+%int3 = OpTypeVector %int 3
+%inner = OpTypeStruct %int %int
+%outer = OpTypeStruct %inner %inner
+%rta_struct = OpTypeRuntimeArray %outer
+%rta = OpTypeRuntimeArray %int
+%data_block = OpTypeStruct %rta_struct
+%block = OpTypeStruct %rta
+%ptr_input_int3 = OpTypePointer Input %int3
+%gid_var = OpVariable %ptr_input_int3 Input
+%ptr_ssbo_block = OpTypePointer StorageBuffer %block
+%ptr_ssbo_int = OpTypePointer StorageBuffer %int
+%ptr_ssbo_data_block = OpTypePointer StorageBuffer %data_block
+%ptr_ssbo_outer = OpTypePointer StorageBuffer %outer
+%wg_data = OpTypeArray %outer %int_2
+%ptr_wg_data = OpTypePointer Workgroup %wg_data
+%ptr_wg_outer = OpTypePointer Workgroup %outer
+%sel_var = OpVariable %ptr_ssbo_block StorageBuffer
+%wg_var = OpVariable %ptr_wg_data Workgroup
+%out_var = OpVariable %ptr_ssbo_data_block StorageBuffer
+%inner_const0 = OpConstantComposite %inner %int_1 %int_1
+%inner_const1 = OpConstantComposite %inner %int_2 %int_2
+%outer_const0 = OpConstantComposite %outer %inner_const0 %inner_const0
+%outer_const1 = OpConstantComposite %outer %inner_const1 %inner_const1
+%void_fn = OpTypeFunction %void
+%main = OpFunction %void None %void_fn
+%entry = OpLabel
+%gid = OpLoad %int3 %gid_var
+%gid_x = OpCompositeExtract %int %gid 0
+%wg_gep0 = OpAccessChain %ptr_wg_outer %wg_var %int_0
+%wg_gep1 = OpAccessChain %ptr_wg_outer %wg_var %int_1
+OpStore %wg_gep0 %outer_const0
+OpStore %wg_gep1 %outer_const1
+%sel_gep = OpAccessChain %ptr_ssbo_int %sel_var %int_0 %gid_x
+%sel_val = OpLoad %int %sel_gep
+%eq_0 = OpIEqual %bool %sel_val %int_0
+%select = OpSelect %ptr_wg_outer %eq_0 %wg_gep0 %wg_gep1
+%out_gep = OpAccessChain %ptr_ssbo_outer %out_var %int_0 %gid_x
+%ld = OpLoad %outer %select
+OpStore %out_gep %ld
+OpReturn
+OpFunctionEnd
+
+[test]
+ssbo 0:0 subdata uint 0 1 0
+ssbo 0:1 32
+
+compute entrypoint main
+compute 2 1 1
+
+probe ssbo uint 0:1 0 == 2 2 2 2
+probe ssbo uint 0:1 16 == 1 1 1 1
+
spirv1p4Tests->addChild(createTestGroup(testCtx, "opptrdiff", "OpPtrDiff", addTestsForAmberFiles, group));
group = CaseGroup(data_dir, "opptrequal");
+ group.add("different_ssbos_equal", "ptr equal against different SSBO variables", Varptr_full);
+ group.add("different_wgs_equal", "ptr equal against different WG variables", Varptr_full);
group.add("null_comparisons_ssbo_equal", "ptr equal null in SSBO", Varptr_ssbo);
group.add("null_comparisons_wg_equal", "ptr equal null in Workgrop", Varptr_full);
group.add("ssbo_comparisons_equal", "ptr equal in SSBO", Varptr_ssbo);
spirv1p4Tests->addChild(createTestGroup(testCtx, "opptrequal", "OpPtrEqual", addTestsForAmberFiles, group));
group = CaseGroup(data_dir, "opptrnotequal");
+ group.add("different_ssbos_not_equal", "ptr not equal against different SSBO variables", Varptr_full);
+ group.add("different_wgs_not_equal", "ptr not equal against different WG variables", Varptr_full);
group.add("null_comparisons_ssbo_not_equal", "ptr not equal null SSBO", Varptr_ssbo);
group.add("null_comparisons_wg_not_equal", "ptr not equal null SSBO", Varptr_full);
group.add("ssbo_comparisons_not_equal", "ptr not equal SSBO", Varptr_ssbo);
group = CaseGroup(data_dir, "nonwritable");
group.add("function_2_nonwritable", "NonWritable decorates Function variables");
group.add("function_nonwritable", "NonWritable decorates 2 Function variables");
+ group.add("non_main_function_nonwritable", "NonWritable decorates Function variable in non-entrypoint function");
group.add("private_2_nonwritable", "NonWritable decorates Private variables");
group.add("private_nonwritable", "NonWritable decorates 2 Private variables");
spirv1p4Tests->addChild(createTestGroup(testCtx, "nonwritable", "NonWritable decoration", addTestsForAmberFiles, group));
spirv1p4Tests->addChild(createTestGroup(testCtx, "loop_control", "SPIR-V 1.4 loop controls", addTestsForAmberFiles, group));
group = CaseGroup(data_dir, "opselect");
+ group.add("array_select", "OpSelect arrays, new in SPIR-V 1.4");
+ group.add("array_stride_select", "OpSelect arrays with non-standard strides, new in SPIR-V 1.4");
+ group.add("nested_array_select", "OpSelect structs with nested arrays, new in SPIR-V 1.4");
+ group.add("nested_struct_select", "OpSelect structs with nested structs, new in SPIR-V 1.4");
group.add("scalar_select", "OpSelect scalars, verify SPIR-V 1.0");
+ group.add("ssbo_pointers_2_select", "OpSelect SSBO pointers to different buffers, verify SPIR-V 1.0", Varptr_full);
+ group.add("ssbo_pointers_select", "OpSelect SSBO pointers to same buffer, verify SPIR-V 1.0", Varptr_ssbo);
group.add("struct_select", "OpSelect structs, new in SPIR-V 1.4");
+ group.add("vector_element_select", "OpSelect vector with vector selector, verify SPIR-V 1.0");
group.add("vector_select", "OpSelect vector with scalar selector, new in SPIR-V 1.4");
+ group.add("wg_pointers_2_select", "OpSelect Workgroup pointers to different buffers, verify SPIR-V 1.0", Varptr_full);
+ group.add("wg_pointers_select", "OpSelect Workgroup pointers to same buffer, verify SPIR-V 1.0", Varptr_full);
spirv1p4Tests->addChild(createTestGroup(testCtx, "opselect", "SPIR-V 1.4 OpSelect more cases", addTestsForAmberFiles, group));
group = CaseGroup(data_dir, "uconvert");
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrdiff.variable_pointers_vars_ssbo_diff
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrdiff.variable_pointers_vars_wg_diff
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrdiff.wg_comparisons_diff
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.different_ssbos_equal
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.different_wgs_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.null_comparisons_ssbo_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.null_comparisons_wg_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.ssbo_comparisons_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.variable_pointers_vars_wg_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.variable_pointers_wg_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.wg_comparisons_equal
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.different_ssbos_not_equal
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.different_wgs_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.null_comparisons_ssbo_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.null_comparisons_wg_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.ssbo_comparisons_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.uniformid.workgroup_uniform
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.function_2_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.function_nonwritable
+dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.non_main_function_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.private_2_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.private_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.entrypoint.comp_pc_entry_point
dEQP-VK.spirv_assembly.instruction.spirv1p4.loop_control.min_iterations
dEQP-VK.spirv_assembly.instruction.spirv1p4.loop_control.partial_count
dEQP-VK.spirv_assembly.instruction.spirv1p4.loop_control.peel_count
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.array_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.array_stride_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.nested_array_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.nested_struct_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.scalar_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.ssbo_pointers_2_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.ssbo_pointers_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.struct_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.vector_element_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.vector_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.wg_pointers_2_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.wg_pointers_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.uconvert.spec_const_opt_extend_16_64_bit
dEQP-VK.spirv_assembly.instruction.spirv1p4.uconvert.spec_const_opt_extend_16
dEQP-VK.spirv_assembly.instruction.spirv1p4.uconvert.spec_const_opt_extend_251658240_64_bits
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrdiff.variable_pointers_vars_ssbo_diff
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrdiff.variable_pointers_vars_wg_diff
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrdiff.wg_comparisons_diff
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.different_ssbos_equal
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.different_wgs_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.null_comparisons_ssbo_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.null_comparisons_wg_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.ssbo_comparisons_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.variable_pointers_vars_wg_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.variable_pointers_wg_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.wg_comparisons_equal
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.different_ssbos_not_equal
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.different_wgs_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.null_comparisons_ssbo_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.null_comparisons_wg_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.ssbo_comparisons_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.uniformid.workgroup_uniform
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.function_2_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.function_nonwritable
+dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.non_main_function_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.private_2_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.nonwritable.private_nonwritable
dEQP-VK.spirv_assembly.instruction.spirv1p4.entrypoint.comp_pc_entry_point
dEQP-VK.spirv_assembly.instruction.spirv1p4.loop_control.min_iterations
dEQP-VK.spirv_assembly.instruction.spirv1p4.loop_control.partial_count
dEQP-VK.spirv_assembly.instruction.spirv1p4.loop_control.peel_count
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.array_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.array_stride_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.nested_array_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.nested_struct_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.scalar_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.ssbo_pointers_2_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.ssbo_pointers_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.struct_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.vector_element_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.vector_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.wg_pointers_2_select
+dEQP-VK.spirv_assembly.instruction.spirv1p4.opselect.wg_pointers_select
dEQP-VK.spirv_assembly.instruction.spirv1p4.uconvert.spec_const_opt_extend_16_64_bit
dEQP-VK.spirv_assembly.instruction.spirv1p4.uconvert.spec_const_opt_extend_16
dEQP-VK.spirv_assembly.instruction.spirv1p4.uconvert.spec_const_opt_extend_251658240_64_bits