blob: 79f74c63d77b8b38572c56367cf3cbedae938d58 [file] [log] [blame]
; 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