; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 ; Bound: 118 ; Schema: 0 OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" %local_invocation_index_1 OpExecutionMode %main LocalSize 16 1 1 OpName %local_invocation_index_1 "local_invocation_index_1" OpName %a_u32_block "a_u32_block" OpMemberName %a_u32_block 0 "inner" OpName %a_u32 "a_u32" OpName %a_i32_block "a_i32_block" OpMemberName %a_i32_block 0 "inner" OpName %a_i32 "a_i32" OpName %b_u32 "b_u32" OpName %b_i32 "b_i32" OpName %main_inner "main_inner" OpName %local_invocation_index "local_invocation_index" OpName %value "value" OpName %__atomic_compare_exchange_resultu32 "__atomic_compare_exchange_resultu32" OpMemberName %__atomic_compare_exchange_resultu32 0 "old_value" OpMemberName %__atomic_compare_exchange_resultu32 1 "exchanged" OpName %value_0 "value" OpName %__atomic_compare_exchange_resulti32 "__atomic_compare_exchange_resulti32" OpMemberName %__atomic_compare_exchange_resulti32 0 "old_value" OpMemberName %__atomic_compare_exchange_resulti32 1 "exchanged" OpName %value_1 "value" OpName %value_2 "value" OpName %main "main" OpDecorate %local_invocation_index_1 BuiltIn LocalInvocationIndex OpDecorate %a_u32_block Block OpMemberDecorate %a_u32_block 0 Offset 0 OpDecorate %a_u32 DescriptorSet 0 OpDecorate %a_u32 Binding 0 OpDecorate %a_i32_block Block OpMemberDecorate %a_i32_block 0 Offset 0 OpDecorate %a_i32 DescriptorSet 0 OpDecorate %a_i32 Binding 1 OpMemberDecorate %__atomic_compare_exchange_resultu32 0 Offset 0 OpMemberDecorate %__atomic_compare_exchange_resultu32 1 Offset 4 OpMemberDecorate %__atomic_compare_exchange_resulti32 0 Offset 0 OpMemberDecorate %__atomic_compare_exchange_resulti32 1 Offset 4 %uint = OpTypeInt 32 0 %_ptr_Input_uint = OpTypePointer Input %uint %local_invocation_index_1 = OpVariable %_ptr_Input_uint Input %a_u32_block = OpTypeStruct %uint %_ptr_StorageBuffer_a_u32_block = OpTypePointer StorageBuffer %a_u32_block %a_u32 = OpVariable %_ptr_StorageBuffer_a_u32_block StorageBuffer %int = OpTypeInt 32 1 %a_i32_block = OpTypeStruct %int %_ptr_StorageBuffer_a_i32_block = OpTypePointer StorageBuffer %a_i32_block %a_i32 = OpVariable %_ptr_StorageBuffer_a_i32_block StorageBuffer %_ptr_Workgroup_uint = OpTypePointer Workgroup %uint %b_u32 = OpVariable %_ptr_Workgroup_uint Workgroup %_ptr_Workgroup_int = OpTypePointer Workgroup %int %b_i32 = OpVariable %_ptr_Workgroup_int Workgroup %void = OpTypeVoid %15 = OpTypeFunction %void %uint %uint_1 = OpConstant %uint 1 %bool = OpTypeBool %uint_2 = OpConstant %uint 2 %uint_0 = OpConstant %uint 0 %29 = OpConstantNull %uint %32 = OpConstantNull %int %uint_264 = OpConstant %uint 264 %uint_42 = OpConstant %uint 42 %_ptr_Function_uint = OpTypePointer Function %uint %__atomic_compare_exchange_resultu32 = OpTypeStruct %uint %bool %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint %int_42 = OpConstant %int 42 %_ptr_Function_int = OpTypePointer Function %int %__atomic_compare_exchange_resulti32 = OpTypeStruct %int %bool %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int %113 = OpTypeFunction %void %main_inner = OpFunction %void None %15 %local_invocation_index = OpFunctionParameter %uint %19 = OpLabel %value = OpVariable %_ptr_Function_uint Function %29 %value_0 = OpVariable %_ptr_Function_int Function %32 %value_1 = OpVariable %_ptr_Function_uint Function %29 %value_2 = OpVariable %_ptr_Function_int Function %32 %21 = OpULessThan %bool %local_invocation_index %uint_1 OpSelectionMerge %23 None OpBranchConditional %21 %24 %23 %24 = OpLabel OpAtomicStore %b_u32 %uint_2 %uint_0 %29 OpAtomicStore %b_i32 %uint_2 %uint_0 %32 OpBranch %23 %23 = OpLabel OpControlBarrier %uint_2 %uint_2 %uint_264 OpStore %value %uint_42 %42 = OpAccessChain %_ptr_StorageBuffer_uint %a_u32 %uint_0 %43 = OpLoad %uint %value %44 = OpAtomicCompareExchange %uint %42 %uint_1 %uint_0 %uint_0 %43 %29 %45 = OpIEqual %bool %44 %29 %38 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %44 %45 %48 = OpAccessChain %_ptr_StorageBuffer_uint %a_u32 %uint_0 %49 = OpLoad %uint %value %50 = OpAtomicCompareExchange %uint %48 %uint_1 %uint_0 %uint_0 %49 %29 %51 = OpIEqual %bool %50 %29 %46 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %50 %51 %54 = OpAccessChain %_ptr_StorageBuffer_uint %a_u32 %uint_0 %55 = OpLoad %uint %value %56 = OpAtomicCompareExchange %uint %54 %uint_1 %uint_0 %uint_0 %55 %29 %57 = OpIEqual %bool %56 %29 %52 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %56 %57 OpStore %value_0 %int_42 %65 = OpAccessChain %_ptr_StorageBuffer_int %a_i32 %uint_0 %66 = OpLoad %int %value_0 %67 = OpAtomicCompareExchange %int %65 %uint_1 %uint_0 %uint_0 %66 %32 %68 = OpIEqual %bool %67 %32 %61 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %67 %68 %71 = OpAccessChain %_ptr_StorageBuffer_int %a_i32 %uint_0 %72 = OpLoad %int %value_0 %73 = OpAtomicCompareExchange %int %71 %uint_1 %uint_0 %uint_0 %72 %32 %74 = OpIEqual %bool %73 %32 %69 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %73 %74 %77 = OpAccessChain %_ptr_StorageBuffer_int %a_i32 %uint_0 %78 = OpLoad %int %value_0 %79 = OpAtomicCompareExchange %int %77 %uint_1 %uint_0 %uint_0 %78 %32 %80 = OpIEqual %bool %79 %32 %75 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %79 %80 OpStore %value_1 %uint_42 %84 = OpLoad %uint %value_1 %85 = OpAtomicCompareExchange %uint %b_u32 %uint_2 %uint_0 %uint_0 %84 %29 %86 = OpIEqual %bool %85 %29 %82 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %85 %86 %89 = OpLoad %uint %value_1 %90 = OpAtomicCompareExchange %uint %b_u32 %uint_2 %uint_0 %uint_0 %89 %29 %91 = OpIEqual %bool %90 %29 %87 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %90 %91 %94 = OpLoad %uint %value_1 %95 = OpAtomicCompareExchange %uint %b_u32 %uint_2 %uint_0 %uint_0 %94 %29 %96 = OpIEqual %bool %95 %29 %92 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %95 %96 OpStore %value_2 %int_42 %100 = OpLoad %int %value_2 %101 = OpAtomicCompareExchange %int %b_i32 %uint_2 %uint_0 %uint_0 %100 %32 %102 = OpIEqual %bool %101 %32 %98 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %101 %102 %105 = OpLoad %int %value_2 %106 = OpAtomicCompareExchange %int %b_i32 %uint_2 %uint_0 %uint_0 %105 %32 %107 = OpIEqual %bool %106 %32 %103 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %106 %107 %110 = OpLoad %int %value_2 %111 = OpAtomicCompareExchange %int %b_i32 %uint_2 %uint_0 %uint_0 %110 %32 %112 = OpIEqual %bool %111 %32 %108 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %111 %112 OpReturn OpFunctionEnd %main = OpFunction %void None %113 %115 = OpLabel %117 = OpLoad %uint %local_invocation_index_1 %116 = OpFunctionCall %void %main_inner %117 OpReturn OpFunctionEnd