blob: 52eabd994b74d29dd557ef6a727563645229090c [file] [log] [blame]
[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