1 OpCapability Shader 2 %1 = OpExtInstImport "GLSL.std.450" 3 OpMemoryModel Logical GLSL450 4 OpEntryPoint GLCompute %main "main" 5 OpExecutionMode %main LocalSize 64 1 1 6 OpName %S "S" 7 OpMemberName %S 0 "structMemberAtomic" 8 OpMemberName %S 1 "structMemberAtomicArray" 9 OpName %NestedS "NestedS" 10 OpMemberName %NestedS 0 "nestedStructWithAtomicMember" 11 OpName %ssbo "ssbo" 12 OpMemberName %ssbo 0 "ssboAtomic" 13 OpMemberName %ssbo 1 "ssboAtomicArray" 14 OpMemberName %ssbo 2 "ssboStructWithAtomicMember" 15 OpMemberName %ssbo 3 "ssboStructWithAtomicMemberArray" 16 OpMemberName %ssbo 4 "ssboNestedStructWithAtomicMember" 17 OpName %wgAtomic "wgAtomic" 18 OpName %wgAtomicArray "wgAtomicArray" 19 OpName %wgNestedStructWithAtomicMember "wgNestedStructWithAtomicMember" 20 OpName %main "main" 21 OpDecorate %_arr_uint_int_2 ArrayStride 4 22 OpMemberDecorate %S 0 Offset 0 23 OpMemberDecorate %S 0 RelaxedPrecision 24 OpMemberDecorate %S 1 Offset 4 25 OpMemberDecorate %S 1 RelaxedPrecision 26 OpDecorate %_arr_S_int_2 ArrayStride 12 27 OpMemberDecorate %NestedS 0 Offset 0 28 OpMemberDecorate %NestedS 0 RelaxedPrecision 29 OpMemberDecorate %ssbo 0 Offset 0 30 OpMemberDecorate %ssbo 0 RelaxedPrecision 31 OpMemberDecorate %ssbo 1 Offset 4 32 OpMemberDecorate %ssbo 1 RelaxedPrecision 33 OpMemberDecorate %ssbo 2 Offset 12 34 OpMemberDecorate %ssbo 2 RelaxedPrecision 35 OpMemberDecorate %ssbo 3 Offset 24 36 OpMemberDecorate %ssbo 3 RelaxedPrecision 37 OpMemberDecorate %ssbo 4 Offset 48 38 OpMemberDecorate %ssbo 4 RelaxedPrecision 39 OpDecorate %ssbo BufferBlock 40 OpDecorate %3 Binding 0 41 OpDecorate %3 DescriptorSet 0 42 OpDecorate %_arr_uint_int_2_0 ArrayStride 16 43 %uint = OpTypeInt 32 0 44 %int = OpTypeInt 32 1 45 %int_2 = OpConstant %int 2 46%_arr_uint_int_2 = OpTypeArray %uint %int_2 47 %S = OpTypeStruct %uint %_arr_uint_int_2 48%_arr_S_int_2 = OpTypeArray %S %int_2 49 %NestedS = OpTypeStruct %S 50 %ssbo = OpTypeStruct %uint %_arr_uint_int_2 %S %_arr_S_int_2 %NestedS 51%_ptr_Uniform_ssbo = OpTypePointer Uniform %ssbo 52 %3 = OpVariable %_ptr_Uniform_ssbo Uniform 53%_ptr_Workgroup_uint = OpTypePointer Workgroup %uint 54 %wgAtomic = OpVariable %_ptr_Workgroup_uint Workgroup 55%_arr_uint_int_2_0 = OpTypeArray %uint %int_2 56%_ptr_Workgroup__arr_uint_int_2_0 = OpTypePointer Workgroup %_arr_uint_int_2_0 57%wgAtomicArray = OpVariable %_ptr_Workgroup__arr_uint_int_2_0 Workgroup 58%_ptr_Workgroup_NestedS = OpTypePointer Workgroup %NestedS 59%wgNestedStructWithAtomicMember = OpVariable %_ptr_Workgroup_NestedS Workgroup 60 %void = OpTypeVoid 61 %21 = OpTypeFunction %void 62 %int_1 = OpConstant %int 1 63 %uint_2 = OpConstant %uint 2 64 %uint_0 = OpConstant %uint 0 65 %int_0 = OpConstant %int 0 66 %uint_1 = OpConstant %uint 1 67 %main = OpFunction %void None %21 68 %22 = OpLabel 69 %25 = OpAccessChain %_ptr_Workgroup_uint %wgAtomicArray %int_1 70 %28 = OpAtomicLoad %uint %wgAtomic %uint_2 %uint_0 71 %23 = OpAtomicIAdd %uint %25 %uint_2 %uint_0 %28 72 %31 = OpAccessChain %_ptr_Workgroup_uint %wgAtomicArray %int_0 73 %33 = OpAccessChain %_ptr_Workgroup_uint %wgAtomicArray %int_1 74 %32 = OpAtomicLoad %uint %33 %uint_2 %uint_0 75 %29 = OpAtomicIAdd %uint %31 %uint_2 %uint_0 %32 76 %35 = OpAccessChain %_ptr_Workgroup_uint %wgNestedStructWithAtomicMember %int_0 %int_0 77 %34 = OpAtomicIAdd %uint %35 %uint_2 %uint_0 %uint_1 78 OpReturn 79 OpFunctionEnd 80