blob: d3ef28d07988627d8edffb0f4c7c2bfcb89f81d5 [file] [log] [blame]
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main" %sk_LocalInvocationID
OpExecutionMode %main LocalSize 256 1 1
OpName %GlobalCounts "GlobalCounts"
OpMemberName %GlobalCounts 0 "firstHalfCount"
OpMemberName %GlobalCounts 1 "secondHalfCount"
OpName %ssbo "ssbo"
OpMemberName %ssbo 0 "globalCounts"
OpName %sk_LocalInvocationID "sk_LocalInvocationID"
OpName %localCounts "localCounts"
OpName %main "main"
OpName %idx "idx"
OpMemberDecorate %GlobalCounts 0 Offset 0
OpMemberDecorate %GlobalCounts 0 RelaxedPrecision
OpMemberDecorate %GlobalCounts 1 Offset 4
OpMemberDecorate %GlobalCounts 1 RelaxedPrecision
OpMemberDecorate %ssbo 0 Offset 0
OpMemberDecorate %ssbo 0 RelaxedPrecision
OpDecorate %ssbo BufferBlock
OpDecorate %3 Binding 0
OpDecorate %3 DescriptorSet 0
OpDecorate %sk_LocalInvocationID BuiltIn LocalInvocationId
OpDecorate %_arr_uint_int_2 ArrayStride 16
%uint = OpTypeInt 32 0
%GlobalCounts = OpTypeStruct %uint %uint
%ssbo = OpTypeStruct %GlobalCounts
%_ptr_Uniform_ssbo = OpTypePointer Uniform %ssbo
%3 = OpVariable %_ptr_Uniform_ssbo Uniform
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%sk_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
%int = OpTypeInt 32 1
%int_2 = OpConstant %int 2
%_arr_uint_int_2 = OpTypeArray %uint %int_2
%_ptr_Workgroup__arr_uint_int_2 = OpTypePointer Workgroup %_arr_uint_int_2
%localCounts = OpVariable %_ptr_Workgroup__arr_uint_int_2 Workgroup
%void = OpTypeVoid
%17 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%bool = OpTypeBool
%int_0 = OpConstant %int 0
%_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
%uint_2 = OpConstant %uint 2
%int_1 = OpConstant %int 1
%uint_264 = OpConstant %uint 264
%_ptr_Function_uint = OpTypePointer Function %uint
%uint_128 = OpConstant %uint 128
%uint_1 = OpConstant %uint 1
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
%main = OpFunction %void None %17
%18 = OpLabel
%idx = OpVariable %_ptr_Function_uint Function
%19 = OpLoad %v3uint %sk_LocalInvocationID
%20 = OpCompositeExtract %uint %19 0
%22 = OpIEqual %bool %20 %uint_0
OpSelectionMerge %25 None
OpBranchConditional %22 %24 %25
%24 = OpLabel
%28 = OpAccessChain %_ptr_Workgroup_uint %localCounts %int_0
OpAtomicStore %28 %uint_2 %uint_0 %uint_0
%33 = OpAccessChain %_ptr_Workgroup_uint %localCounts %int_1
OpAtomicStore %33 %uint_2 %uint_0 %uint_0
OpBranch %25
%25 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%38 = OpLoad %v3uint %sk_LocalInvocationID
%39 = OpCompositeExtract %uint %38 0
%41 = OpULessThan %bool %39 %uint_128
%42 = OpSelect %int %41 %int_0 %int_1
%43 = OpBitcast %uint %42
OpStore %idx %43
%45 = OpAccessChain %_ptr_Workgroup_uint %localCounts %43
%44 = OpAtomicIAdd %uint %45 %uint_2 %uint_0 %uint_1
OpControlBarrier %uint_2 %uint_2 %uint_264
%48 = OpLoad %v3uint %sk_LocalInvocationID
%49 = OpCompositeExtract %uint %48 0
%50 = OpIEqual %bool %49 %uint_0
OpSelectionMerge %52 None
OpBranchConditional %50 %51 %52
%51 = OpLabel
%54 = OpAccessChain %_ptr_Uniform_uint %3 %int_0 %int_0
%57 = OpAccessChain %_ptr_Workgroup_uint %localCounts %int_0
%56 = OpAtomicLoad %uint %57 %uint_2 %uint_0
%53 = OpAtomicIAdd %uint %54 %uint_1 %uint_0 %56
%59 = OpAccessChain %_ptr_Uniform_uint %3 %int_0 %int_1
%61 = OpAccessChain %_ptr_Workgroup_uint %localCounts %int_1
%60 = OpAtomicLoad %uint %61 %uint_2 %uint_0
%58 = OpAtomicIAdd %uint %59 %uint_1 %uint_0 %60
OpBranch %52
%52 = OpLabel
OpReturn
OpFunctionEnd