| OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint GLCompute %main "main" |
| OpExecutionMode %main LocalSize 64 1 1 |
| OpName %S "S" |
| OpMemberName %S 0 "structMemberAtomic" |
| OpMemberName %S 1 "structMemberAtomicArray" |
| OpName %NestedS "NestedS" |
| OpMemberName %NestedS 0 "nestedStructWithAtomicMember" |
| OpName %ssbo "ssbo" |
| OpMemberName %ssbo 0 "ssboAtomic" |
| OpMemberName %ssbo 1 "ssboAtomicArray" |
| OpMemberName %ssbo 2 "ssboStructWithAtomicMember" |
| OpMemberName %ssbo 3 "ssboStructWithAtomicMemberArray" |
| OpMemberName %ssbo 4 "ssboNestedStructWithAtomicMember" |
| OpName %wgAtomic "wgAtomic" |
| OpName %wgAtomicArray "wgAtomicArray" |
| OpName %wgNestedStructWithAtomicMember "wgNestedStructWithAtomicMember" |
| OpName %main "main" |
| OpDecorate %_arr_uint_int_2 ArrayStride 4 |
| OpMemberDecorate %S 0 Offset 0 |
| OpMemberDecorate %S 0 RelaxedPrecision |
| OpMemberDecorate %S 1 Offset 4 |
| OpMemberDecorate %S 1 RelaxedPrecision |
| OpDecorate %_arr_S_int_2 ArrayStride 12 |
| OpMemberDecorate %NestedS 0 Offset 0 |
| OpMemberDecorate %NestedS 0 RelaxedPrecision |
| OpMemberDecorate %ssbo 0 Offset 0 |
| OpMemberDecorate %ssbo 0 RelaxedPrecision |
| OpMemberDecorate %ssbo 1 Offset 4 |
| OpMemberDecorate %ssbo 1 RelaxedPrecision |
| OpMemberDecorate %ssbo 2 Offset 12 |
| OpMemberDecorate %ssbo 2 RelaxedPrecision |
| OpMemberDecorate %ssbo 3 Offset 24 |
| OpMemberDecorate %ssbo 3 RelaxedPrecision |
| OpMemberDecorate %ssbo 4 Offset 48 |
| OpMemberDecorate %ssbo 4 RelaxedPrecision |
| OpDecorate %ssbo BufferBlock |
| OpDecorate %3 Binding 0 |
| OpDecorate %3 DescriptorSet 0 |
| OpDecorate %_arr_uint_int_2_0 ArrayStride 16 |
| %uint = OpTypeInt 32 0 |
| %int = OpTypeInt 32 1 |
| %int_2 = OpConstant %int 2 |
| %_arr_uint_int_2 = OpTypeArray %uint %int_2 |
| %S = OpTypeStruct %uint %_arr_uint_int_2 |
| %_arr_S_int_2 = OpTypeArray %S %int_2 |
| %NestedS = OpTypeStruct %S |
| %ssbo = OpTypeStruct %uint %_arr_uint_int_2 %S %_arr_S_int_2 %NestedS |
| %_ptr_Uniform_ssbo = OpTypePointer Uniform %ssbo |
| %3 = OpVariable %_ptr_Uniform_ssbo Uniform |
| %_ptr_Workgroup_uint = OpTypePointer Workgroup %uint |
| %wgAtomic = OpVariable %_ptr_Workgroup_uint Workgroup |
| %_arr_uint_int_2_0 = OpTypeArray %uint %int_2 |
| %_ptr_Workgroup__arr_uint_int_2_0 = OpTypePointer Workgroup %_arr_uint_int_2_0 |
| %wgAtomicArray = OpVariable %_ptr_Workgroup__arr_uint_int_2_0 Workgroup |
| %_ptr_Workgroup_NestedS = OpTypePointer Workgroup %NestedS |
| %wgNestedStructWithAtomicMember = OpVariable %_ptr_Workgroup_NestedS Workgroup |
| %void = OpTypeVoid |
| %21 = OpTypeFunction %void |
| %int_1 = OpConstant %int 1 |
| %uint_2 = OpConstant %uint 2 |
| %uint_0 = OpConstant %uint 0 |
| %int_0 = OpConstant %int 0 |
| %uint_1 = OpConstant %uint 1 |
| %main = OpFunction %void None %21 |
| %22 = OpLabel |
| %25 = OpAccessChain %_ptr_Workgroup_uint %wgAtomicArray %int_1 |
| %28 = OpAtomicLoad %uint %wgAtomic %uint_2 %uint_0 |
| %23 = OpAtomicIAdd %uint %25 %uint_2 %uint_0 %28 |
| %31 = OpAccessChain %_ptr_Workgroup_uint %wgAtomicArray %int_0 |
| %33 = OpAccessChain %_ptr_Workgroup_uint %wgAtomicArray %int_1 |
| %32 = OpAtomicLoad %uint %33 %uint_2 %uint_0 |
| %29 = OpAtomicIAdd %uint %31 %uint_2 %uint_0 %32 |
| %35 = OpAccessChain %_ptr_Workgroup_uint %wgNestedStructWithAtomicMember %int_0 %int_0 |
| %34 = OpAtomicIAdd %uint %35 %uint_2 %uint_0 %uint_1 |
| OpReturn |
| OpFunctionEnd |