blob: 34f3b80c846e6b968ff6804620a10663e4183a90 [file] [log] [blame]
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 1
; Bound: 243
; Schema: 0
OpCapability Shader
%38 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %comp_main "comp_main" %comp_main_global_invocation_id_Input
OpExecutionMode %comp_main LocalSize 1 1 1
OpMemberName %params_block_tint_explicit_layout 0 "inner"
OpName %params_block_tint_explicit_layout "params_block_tint_explicit_layout"
OpMemberName %Particle 0 "pos"
OpMemberName %Particle 1 "vel"
OpName %Particle "Particle"
OpMemberName %Particles_tint_explicit_layout 0 "particles"
OpName %Particles_tint_explicit_layout "Particles_tint_explicit_layout"
OpMemberName %particlesA_block_tint_explicit_layout 0 "inner"
OpName %particlesA_block_tint_explicit_layout "particlesA_block_tint_explicit_layout"
OpMemberName %particlesB_block_tint_explicit_layout 0 "inner"
OpName %particlesB_block_tint_explicit_layout "particlesB_block_tint_explicit_layout"
OpName %comp_main_global_invocation_id_Input "comp_main_global_invocation_id_Input"
OpName %comp_main_inner "comp_main_inner"
OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
OpName %index "index"
OpName %vPos "vPos"
OpName %vVel "vVel"
OpName %cMass "cMass"
OpName %cVel "cVel"
OpName %colVel "colVel"
OpName %cMassCount "cMassCount"
OpName %cVelCount "cVelCount"
OpName %pos "pos"
OpName %vel "vel"
OpName %i "i"
OpName %comp_main "comp_main"
OpDecorate %_arr_v4uint_uint_2 ArrayStride 16
OpMemberDecorate %params_block_tint_explicit_layout 0 Offset 0
OpDecorate %params_block_tint_explicit_layout Block
OpDecorate %1 DescriptorSet 0
OpDecorate %1 Binding 0
OpDecorate %1 NonWritable
OpMemberDecorate %Particle 0 Offset 0
OpMemberDecorate %Particle 1 Offset 8
OpDecorate %_arr_Particle_uint_5 ArrayStride 16
OpMemberDecorate %Particles_tint_explicit_layout 0 Offset 0
OpMemberDecorate %particlesA_block_tint_explicit_layout 0 Offset 0
OpDecorate %particlesA_block_tint_explicit_layout Block
OpDecorate %8 DescriptorSet 1
OpDecorate %8 Binding 0
OpDecorate %8 Coherent
OpMemberDecorate %particlesB_block_tint_explicit_layout 0 Offset 0
OpDecorate %particlesB_block_tint_explicit_layout Block
OpDecorate %17 DescriptorSet 2
OpDecorate %17 Binding 0
OpDecorate %17 Coherent
OpDecorate %comp_main_global_invocation_id_Input BuiltIn GlobalInvocationId
%uint = OpTypeInt 32 0
%v4uint = OpTypeVector %uint 4
%uint_2 = OpConstant %uint 2
%_arr_v4uint_uint_2 = OpTypeArray %v4uint %uint_2
%params_block_tint_explicit_layout = OpTypeStruct %_arr_v4uint_uint_2
%_ptr_Uniform_params_block_tint_explicit_layout = OpTypePointer Uniform %params_block_tint_explicit_layout
%1 = OpVariable %_ptr_Uniform_params_block_tint_explicit_layout Uniform
%float = OpTypeFloat 32
%v2float = OpTypeVector %float 2
%Particle = OpTypeStruct %v2float %v2float
%uint_5 = OpConstant %uint 5
%_arr_Particle_uint_5 = OpTypeArray %Particle %uint_5
%Particles_tint_explicit_layout = OpTypeStruct %_arr_Particle_uint_5
%particlesA_block_tint_explicit_layout = OpTypeStruct %Particles_tint_explicit_layout
%_ptr_StorageBuffer_particlesA_block_tint_explicit_layout = OpTypePointer StorageBuffer %particlesA_block_tint_explicit_layout
%8 = OpVariable %_ptr_StorageBuffer_particlesA_block_tint_explicit_layout StorageBuffer
%particlesB_block_tint_explicit_layout = OpTypeStruct %Particles_tint_explicit_layout
%_ptr_StorageBuffer_particlesB_block_tint_explicit_layout = OpTypePointer StorageBuffer %particlesB_block_tint_explicit_layout
%17 = OpVariable %_ptr_StorageBuffer_particlesB_block_tint_explicit_layout StorageBuffer
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%comp_main_global_invocation_id_Input = OpVariable %_ptr_Input_v3uint Input
%void = OpTypeVoid
%26 = OpTypeFunction %void %v3uint
%_ptr_Function_uint = OpTypePointer Function %uint
%bool = OpTypeBool
%uint_4 = OpConstant %uint 4
%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float
%uint_0 = OpConstant %uint 0
%_ptr_Function_v2float = OpTypePointer Function %v2float
%uint_1 = OpConstant %uint 1
%53 = OpConstantNull %v2float
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%int_0 = OpConstant %int 0
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
%float_0 = OpConstant %float 0
%float_0_100000001 = OpConstant %float 0.100000001
%_ptr_Function_float = OpTypePointer Function %float
%float_n1 = OpConstant %float -1
%float_1 = OpConstant %float 1
%int_1 = OpConstant %int 1
%239 = OpTypeFunction %void
%comp_main_inner = OpFunction %void None %26
%gl_GlobalInvocationID = OpFunctionParameter %v3uint
%27 = OpLabel
%index = OpVariable %_ptr_Function_uint Function
%vPos = OpVariable %_ptr_Function_v2float Function
%vVel = OpVariable %_ptr_Function_v2float Function
%cMass = OpVariable %_ptr_Function_v2float Function
%cVel = OpVariable %_ptr_Function_v2float Function
%colVel = OpVariable %_ptr_Function_v2float Function
%cMassCount = OpVariable %_ptr_Function_int Function
%cVelCount = OpVariable %_ptr_Function_int Function
%pos = OpVariable %_ptr_Function_v2float Function %53
%vel = OpVariable %_ptr_Function_v2float Function %53
%i = OpVariable %_ptr_Function_uint Function
%28 = OpCompositeExtract %uint %gl_GlobalInvocationID 0
OpStore %index %28
%31 = OpLoad %uint %index None
%32 = OpUGreaterThanEqual %bool %31 %uint_5
OpSelectionMerge %34 None
OpBranchConditional %32 %35 %34
%35 = OpLabel
OpReturn
%34 = OpLabel
%36 = OpLoad %uint %index None
%37 = OpExtInst %uint %38 UMin %36 %uint_4
%40 = OpAccessChain %_ptr_StorageBuffer_v2float %8 %uint_0 %uint_0 %37 %uint_0
%43 = OpLoad %v2float %40 None
OpStore %vPos %43
%46 = OpLoad %uint %index None
%47 = OpExtInst %uint %38 UMin %46 %uint_4
%48 = OpAccessChain %_ptr_StorageBuffer_v2float %8 %uint_0 %uint_0 %47 %uint_1
%50 = OpLoad %v2float %48 None
OpStore %vVel %50
OpStore %cMass %53
OpStore %cVel %53
OpStore %colVel %53
OpStore %cMassCount %int_0
OpStore %cVelCount %int_0
OpBranch %63
%63 = OpLabel
OpStore %i %uint_0
OpBranch %66
%66 = OpLabel
OpLoopMerge %67 %65 None
OpBranch %64
%64 = OpLabel
%147 = OpLoad %uint %i None
%148 = OpULessThan %bool %147 %uint_5
OpSelectionMerge %149 None
OpBranchConditional %148 %149 %150
%150 = OpLabel
OpBranch %67
%149 = OpLabel
%151 = OpLoad %uint %i None
%152 = OpLoad %uint %index None
%153 = OpIEqual %bool %151 %152
OpSelectionMerge %154 None
OpBranchConditional %153 %155 %154
%155 = OpLabel
OpBranch %65
%154 = OpLabel
%156 = OpLoad %uint %i None
%157 = OpAccessChain %_ptr_StorageBuffer_v2float %8 %uint_0 %uint_0 %156 %uint_0
%158 = OpLoad %v2float %157 None
%159 = OpVectorShuffle %v2float %158 %158 0 1
OpStore %pos %159 None
%160 = OpLoad %uint %i None
%161 = OpAccessChain %_ptr_StorageBuffer_v2float %8 %uint_0 %uint_0 %160 %uint_1
%162 = OpLoad %v2float %161 None
%163 = OpVectorShuffle %v2float %162 %162 0 1
OpStore %vel %163 None
%164 = OpLoad %v2float %pos None
%165 = OpLoad %v2float %vPos None
%166 = OpExtInst %float %38 Distance %164 %165
%167 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %uint_0
%168 = OpLoad %v4uint %167 None
%169 = OpCompositeExtract %uint %168 1
%170 = OpBitcast %float %169
%171 = OpFOrdLessThan %bool %166 %170
OpSelectionMerge %172 None
OpBranchConditional %171 %173 %172
%173 = OpLabel
%216 = OpLoad %v2float %cMass None
%217 = OpLoad %v2float %pos None
%218 = OpFAdd %v2float %216 %217
OpStore %cMass %218 None
%219 = OpLoad %int %cMassCount None
%220 = OpBitcast %uint %219
%221 = OpBitcast %uint %int_1
%223 = OpIAdd %uint %220 %221
%224 = OpBitcast %int %223
OpStore %cMassCount %224 None
OpBranch %172
%172 = OpLabel
%174 = OpLoad %v2float %pos None
%175 = OpLoad %v2float %vPos None
%176 = OpExtInst %float %38 Distance %174 %175
%177 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %uint_0
%178 = OpLoad %v4uint %177 None
%179 = OpCompositeExtract %uint %178 2
%180 = OpBitcast %float %179
%181 = OpFOrdLessThan %bool %176 %180
OpSelectionMerge %182 None
OpBranchConditional %181 %183 %182
%183 = OpLabel
%225 = OpLoad %v2float %colVel None
%226 = OpLoad %v2float %pos None
%227 = OpLoad %v2float %vPos None
%228 = OpFSub %v2float %226 %227
%229 = OpFSub %v2float %225 %228
OpStore %colVel %229 None
OpBranch %182
%182 = OpLabel
%184 = OpLoad %v2float %pos None
%185 = OpLoad %v2float %vPos None
%186 = OpExtInst %float %38 Distance %184 %185
%187 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %uint_0
%188 = OpLoad %v4uint %187 None
%189 = OpCompositeExtract %uint %188 3
%190 = OpBitcast %float %189
%191 = OpFOrdLessThan %bool %186 %190
OpSelectionMerge %192 None
OpBranchConditional %191 %193 %192
%193 = OpLabel
%230 = OpLoad %v2float %cVel None
%231 = OpLoad %v2float %vel None
%232 = OpFAdd %v2float %230 %231
OpStore %cVel %232 None
%233 = OpLoad %int %cVelCount None
%234 = OpBitcast %uint %233
%235 = OpBitcast %uint %int_1
%236 = OpIAdd %uint %234 %235
%237 = OpBitcast %int %236
OpStore %cVelCount %237 None
OpBranch %192
%192 = OpLabel
OpBranch %65
%65 = OpLabel
%194 = OpLoad %uint %i None
%195 = OpIAdd %uint %194 %uint_1
OpStore %i %195 None
OpBranch %66
%67 = OpLabel
%68 = OpLoad %int %cMassCount None
%69 = OpSGreaterThan %bool %68 %int_0
OpSelectionMerge %70 None
OpBranchConditional %69 %71 %70
%71 = OpLabel
%196 = OpLoad %v2float %cMass None
%197 = OpLoad %int %cMassCount None
%198 = OpConvertSToF %float %197
%199 = OpLoad %int %cMassCount None
%200 = OpConvertSToF %float %199
%201 = OpCompositeConstruct %v2float %198 %200
%202 = OpFDiv %v2float %196 %201
%203 = OpLoad %v2float %vPos None
%204 = OpFSub %v2float %202 %203
OpStore %cMass %204 None
OpBranch %70
%70 = OpLabel
%72 = OpLoad %int %cVelCount None
%73 = OpSGreaterThan %bool %72 %int_0
OpSelectionMerge %74 None
OpBranchConditional %73 %75 %74
%75 = OpLabel
%205 = OpLoad %v2float %cVel None
%206 = OpLoad %int %cVelCount None
%207 = OpConvertSToF %float %206
%208 = OpLoad %int %cVelCount None
%209 = OpConvertSToF %float %208
%210 = OpCompositeConstruct %v2float %207 %209
%211 = OpFDiv %v2float %205 %210
OpStore %cVel %211 None
OpBranch %74
%74 = OpLabel
%76 = OpLoad %v2float %vVel None
%77 = OpLoad %v2float %cMass None
%78 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %uint_1
%80 = OpLoad %v4uint %78 None
%81 = OpCompositeExtract %uint %80 0
%82 = OpBitcast %float %81
%83 = OpVectorTimesScalar %v2float %77 %82
%84 = OpFAdd %v2float %76 %83
%85 = OpLoad %v2float %colVel None
%86 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %uint_1
%87 = OpLoad %v4uint %86 None
%88 = OpCompositeExtract %uint %87 1
%89 = OpBitcast %float %88
%90 = OpVectorTimesScalar %v2float %85 %89
%91 = OpFAdd %v2float %84 %90
%92 = OpLoad %v2float %cVel None
%93 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %uint_1
%94 = OpLoad %v4uint %93 None
%95 = OpCompositeExtract %uint %94 2
%96 = OpBitcast %float %95
%97 = OpVectorTimesScalar %v2float %92 %96
%98 = OpFAdd %v2float %91 %97
OpStore %vVel %98 None
%99 = OpLoad %v2float %vVel None
%100 = OpExtInst %v2float %38 Normalize %99
%101 = OpLoad %v2float %vVel None
%102 = OpExtInst %float %38 Length %101
%103 = OpExtInst %float %38 NClamp %102 %float_0 %float_0_100000001
%106 = OpVectorTimesScalar %v2float %100 %103
OpStore %vVel %106 None
%107 = OpLoad %v2float %vPos None
%108 = OpLoad %v2float %vVel None
%109 = OpAccessChain %_ptr_Uniform_v4uint %1 %uint_0 %uint_0
%110 = OpLoad %v4uint %109 None
%111 = OpCompositeExtract %uint %110 0
%112 = OpBitcast %float %111
%113 = OpVectorTimesScalar %v2float %108 %112
%114 = OpFAdd %v2float %107 %113
OpStore %vPos %114 None
%115 = OpAccessChain %_ptr_Function_float %vPos %uint_0
%117 = OpLoad %float %115 None
%118 = OpFOrdLessThan %bool %117 %float_n1
OpSelectionMerge %120 None
OpBranchConditional %118 %121 %120
%121 = OpLabel
%212 = OpAccessChain %_ptr_Function_float %vPos %uint_0
OpStore %212 %float_1 None
OpBranch %120
%120 = OpLabel
%122 = OpAccessChain %_ptr_Function_float %vPos %uint_0
%123 = OpLoad %float %122 None
%124 = OpFOrdGreaterThan %bool %123 %float_1
OpSelectionMerge %126 None
OpBranchConditional %124 %127 %126
%127 = OpLabel
%213 = OpAccessChain %_ptr_Function_float %vPos %uint_0
OpStore %213 %float_n1 None
OpBranch %126
%126 = OpLabel
%128 = OpAccessChain %_ptr_Function_float %vPos %uint_1
%129 = OpLoad %float %128 None
%130 = OpFOrdLessThan %bool %129 %float_n1
OpSelectionMerge %131 None
OpBranchConditional %130 %132 %131
%132 = OpLabel
%214 = OpAccessChain %_ptr_Function_float %vPos %uint_1
OpStore %214 %float_1 None
OpBranch %131
%131 = OpLabel
%133 = OpAccessChain %_ptr_Function_float %vPos %uint_1
%134 = OpLoad %float %133 None
%135 = OpFOrdGreaterThan %bool %134 %float_1
OpSelectionMerge %136 None
OpBranchConditional %135 %137 %136
%137 = OpLabel
%215 = OpAccessChain %_ptr_Function_float %vPos %uint_1
OpStore %215 %float_n1 None
OpBranch %136
%136 = OpLabel
%138 = OpLoad %uint %index None
%139 = OpExtInst %uint %38 UMin %138 %uint_4
%140 = OpAccessChain %_ptr_StorageBuffer_v2float %17 %uint_0 %uint_0 %139 %uint_0
%141 = OpLoad %v2float %vPos None
OpStore %140 %141 None
%142 = OpLoad %uint %index None
%143 = OpExtInst %uint %38 UMin %142 %uint_4
%144 = OpAccessChain %_ptr_StorageBuffer_v2float %17 %uint_0 %uint_0 %143 %uint_1
%145 = OpLoad %v2float %vVel None
OpStore %144 %145 None
OpReturn
OpFunctionEnd
%comp_main = OpFunction %void None %239
%240 = OpLabel
%241 = OpLoad %v3uint %comp_main_global_invocation_id_Input None
%242 = OpFunctionCall %void %comp_main_inner %241
OpReturn
OpFunctionEnd