| 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 16 |
| OpMemberDecorate %S 0 Offset 0 |
| OpMemberDecorate %S 0 RelaxedPrecision |
| OpMemberDecorate %S 1 Offset 16 |
| OpMemberDecorate %S 1 RelaxedPrecision |
| OpDecorate %_arr_S_int_2 ArrayStride 48 |
| OpMemberDecorate %NestedS 0 Offset 0 |
| OpMemberDecorate %NestedS 0 RelaxedPrecision |
| OpMemberDecorate %ssbo 0 Offset 0 |
| OpMemberDecorate %ssbo 0 RelaxedPrecision |
| OpMemberDecorate %ssbo 1 Offset 16 |
| OpMemberDecorate %ssbo 1 RelaxedPrecision |
| OpMemberDecorate %ssbo 2 Offset 48 |
| OpMemberDecorate %ssbo 2 RelaxedPrecision |
| OpMemberDecorate %ssbo 3 Offset 96 |
| OpMemberDecorate %ssbo 3 RelaxedPrecision |
| OpMemberDecorate %ssbo 4 Offset 192 |
| OpMemberDecorate %ssbo 4 RelaxedPrecision |
| OpDecorate %ssbo BufferBlock |
| OpDecorate %3 Binding 0 |
| OpDecorate %3 DescriptorSet 0 |
| %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 |
| %_ptr_Workgroup__arr_uint_int_2 = OpTypePointer Workgroup %_arr_uint_int_2 |
| %wgAtomicArray = OpVariable %_ptr_Workgroup__arr_uint_int_2 Workgroup |
| %_ptr_Workgroup_NestedS = OpTypePointer Workgroup %NestedS |
| %wgNestedStructWithAtomicMember = OpVariable %_ptr_Workgroup_NestedS Workgroup |
| %void = OpTypeVoid |
| %20 = 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 %20 |
| %21 = OpLabel |
| %24 = OpAccessChain %_ptr_Workgroup_uint %wgAtomicArray %int_1 |
| %27 = OpAtomicLoad %uint %wgAtomic %uint_2 %uint_0 |
| %22 = OpAtomicIAdd %uint %24 %uint_2 %uint_0 %27 |
| %30 = OpAccessChain %_ptr_Workgroup_uint %wgAtomicArray %int_0 |
| %32 = OpAccessChain %_ptr_Workgroup_uint %wgAtomicArray %int_1 |
| %31 = OpAtomicLoad %uint %32 %uint_2 %uint_0 |
| %28 = OpAtomicIAdd %uint %30 %uint_2 %uint_0 %31 |
| %34 = OpAccessChain %_ptr_Workgroup_uint %wgNestedStructWithAtomicMember %int_0 %int_0 |
| %33 = OpAtomicIAdd %uint %34 %uint_2 %uint_0 %uint_1 |
| OpReturn |
| OpFunctionEnd |