; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 ; Bound: 279 ; Schema: 0 OpCapability Shader %39 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %vert_main "vert_main" %a_particlePos_1 %a_particleVel_1 %a_pos_1 %value %vertex_point_size OpEntryPoint Fragment %frag_main "frag_main" %value_1 OpEntryPoint GLCompute %comp_main "comp_main" %gl_GlobalInvocationID_1 OpExecutionMode %frag_main OriginUpperLeft OpExecutionMode %comp_main LocalSize 1 1 1 OpName %a_particlePos_1 "a_particlePos_1" OpName %a_particleVel_1 "a_particleVel_1" OpName %a_pos_1 "a_pos_1" OpName %value "value" OpName %vertex_point_size "vertex_point_size" OpName %value_1 "value_1" OpName %gl_GlobalInvocationID_1 "gl_GlobalInvocationID_1" OpName %params_block "params_block" OpMemberName %params_block 0 "inner" OpName %SimParams "SimParams" OpMemberName %SimParams 0 "deltaT" OpMemberName %SimParams 1 "rule1Distance" OpMemberName %SimParams 2 "rule2Distance" OpMemberName %SimParams 3 "rule3Distance" OpMemberName %SimParams 4 "rule1Scale" OpMemberName %SimParams 5 "rule2Scale" OpMemberName %SimParams 6 "rule3Scale" OpName %params "params" OpName %particlesA_block "particlesA_block" OpMemberName %particlesA_block 0 "inner" OpName %Particles "Particles" OpMemberName %Particles 0 "particles" OpName %Particle "Particle" OpMemberName %Particle 0 "pos" OpMemberName %Particle 1 "vel" OpName %particlesA "particlesA" OpName %particlesB "particlesB" OpName %vert_main_inner "vert_main_inner" OpName %a_particlePos "a_particlePos" OpName %a_particleVel "a_particleVel" OpName %a_pos "a_pos" OpName %angle "angle" OpName %pos "pos" OpName %vert_main "vert_main" OpName %frag_main_inner "frag_main_inner" OpName %frag_main "frag_main" 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_0 "pos" OpName %vel "vel" OpName %i "i" OpName %comp_main "comp_main" OpDecorate %a_particlePos_1 Location 0 OpDecorate %a_particleVel_1 Location 1 OpDecorate %a_pos_1 Location 2 OpDecorate %value BuiltIn Position OpDecorate %vertex_point_size BuiltIn PointSize OpDecorate %value_1 Location 0 OpDecorate %gl_GlobalInvocationID_1 BuiltIn GlobalInvocationId OpDecorate %params_block Block OpMemberDecorate %params_block 0 Offset 0 OpMemberDecorate %SimParams 0 Offset 0 OpMemberDecorate %SimParams 1 Offset 4 OpMemberDecorate %SimParams 2 Offset 8 OpMemberDecorate %SimParams 3 Offset 12 OpMemberDecorate %SimParams 4 Offset 16 OpMemberDecorate %SimParams 5 Offset 20 OpMemberDecorate %SimParams 6 Offset 24 OpDecorate %params NonWritable OpDecorate %params Binding 0 OpDecorate %params DescriptorSet 0 OpDecorate %particlesA_block Block OpMemberDecorate %particlesA_block 0 Offset 0 OpMemberDecorate %Particles 0 Offset 0 OpMemberDecorate %Particle 0 Offset 0 OpMemberDecorate %Particle 1 Offset 8 OpDecorate %_arr_Particle_uint_5 ArrayStride 16 OpDecorate %particlesA Binding 1 OpDecorate %particlesA DescriptorSet 0 OpDecorate %particlesB Binding 2 OpDecorate %particlesB DescriptorSet 0 %float = OpTypeFloat 32 %v2float = OpTypeVector %float 2 %_ptr_Input_v2float = OpTypePointer Input %v2float %a_particlePos_1 = OpVariable %_ptr_Input_v2float Input %a_particleVel_1 = OpVariable %_ptr_Input_v2float Input %a_pos_1 = OpVariable %_ptr_Input_v2float Input %v4float = OpTypeVector %float 4 %_ptr_Output_v4float = OpTypePointer Output %v4float %10 = OpConstantNull %v4float %value = OpVariable %_ptr_Output_v4float Output %10 %_ptr_Output_float = OpTypePointer Output %float %13 = OpConstantNull %float %vertex_point_size = OpVariable %_ptr_Output_float Output %13 %value_1 = OpVariable %_ptr_Output_v4float Output %10 %uint = OpTypeInt 32 0 %v3uint = OpTypeVector %uint 3 %_ptr_Input_v3uint = OpTypePointer Input %v3uint %gl_GlobalInvocationID_1 = OpVariable %_ptr_Input_v3uint Input %SimParams = OpTypeStruct %float %float %float %float %float %float %float %params_block = OpTypeStruct %SimParams %_ptr_Uniform_params_block = OpTypePointer Uniform %params_block %params = OpVariable %_ptr_Uniform_params_block Uniform %Particle = OpTypeStruct %v2float %v2float %uint_5 = OpConstant %uint 5 %_arr_Particle_uint_5 = OpTypeArray %Particle %uint_5 %Particles = OpTypeStruct %_arr_Particle_uint_5 %particlesA_block = OpTypeStruct %Particles %_ptr_StorageBuffer_particlesA_block = OpTypePointer StorageBuffer %particlesA_block %particlesA = OpVariable %_ptr_StorageBuffer_particlesA_block StorageBuffer %particlesB = OpVariable %_ptr_StorageBuffer_particlesA_block StorageBuffer %31 = OpTypeFunction %v4float %v2float %v2float %v2float %_ptr_Function_float = OpTypePointer Function %float %_ptr_Function_v2float = OpTypePointer Function %v2float %65 = OpConstantNull %v2float %float_1 = OpConstant %float 1 %void = OpTypeVoid %72 = OpTypeFunction %void %80 = OpTypeFunction %v4float %83 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1 %87 = OpTypeFunction %void %v3uint %_ptr_Function_uint = OpTypePointer Function %uint %94 = OpConstantNull %uint %bool = OpTypeBool %uint_0 = OpConstant %uint 0 %_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float %uint_1 = OpConstant %uint 1 %int = OpTypeInt 32 1 %115 = OpConstantNull %int %_ptr_Function_int = OpTypePointer Function %int %_ptr_Uniform_float = OpTypePointer Uniform %float %int_1 = OpConstant %int 1 %uint_2 = OpConstant %uint 2 %uint_3 = OpConstant %uint 3 %uint_4 = OpConstant %uint 4 %uint_6 = OpConstant %uint 6 %float_0_100000001 = OpConstant %float 0.100000001 %float_n1 = OpConstant %float -1 %vert_main_inner = OpFunction %v4float None %31 %a_particlePos = OpFunctionParameter %v2float %a_particleVel = OpFunctionParameter %v2float %a_pos = OpFunctionParameter %v2float %36 = OpLabel %angle = OpVariable %_ptr_Function_float Function %13 %pos = OpVariable %_ptr_Function_v2float Function %65 %40 = OpCompositeExtract %float %a_particleVel 0 %41 = OpCompositeExtract %float %a_particleVel 1 %38 = OpExtInst %float %39 Atan2 %40 %41 %37 = OpFNegate %float %38 OpStore %angle %37 %44 = OpCompositeExtract %float %a_pos 0 %46 = OpLoad %float %angle %45 = OpExtInst %float %39 Cos %46 %47 = OpFMul %float %44 %45 %48 = OpCompositeExtract %float %a_pos 1 %50 = OpLoad %float %angle %49 = OpExtInst %float %39 Sin %50 %51 = OpFMul %float %48 %49 %52 = OpFSub %float %47 %51 %53 = OpCompositeExtract %float %a_pos 0 %55 = OpLoad %float %angle %54 = OpExtInst %float %39 Sin %55 %56 = OpFMul %float %53 %54 %57 = OpCompositeExtract %float %a_pos 1 %59 = OpLoad %float %angle %58 = OpExtInst %float %39 Cos %59 %60 = OpFMul %float %57 %58 %61 = OpFAdd %float %56 %60 %62 = OpCompositeConstruct %v2float %52 %61 OpStore %pos %62 %66 = OpLoad %v2float %pos %67 = OpFAdd %v2float %66 %a_particlePos %68 = OpCompositeExtract %float %67 0 %69 = OpCompositeExtract %float %67 1 %71 = OpCompositeConstruct %v4float %68 %69 %13 %float_1 OpReturnValue %71 OpFunctionEnd %vert_main = OpFunction %void None %72 %75 = OpLabel %77 = OpLoad %v2float %a_particlePos_1 %78 = OpLoad %v2float %a_particleVel_1 %79 = OpLoad %v2float %a_pos_1 %76 = OpFunctionCall %v4float %vert_main_inner %77 %78 %79 OpStore %value %76 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %frag_main_inner = OpFunction %v4float None %80 %82 = OpLabel OpReturnValue %83 OpFunctionEnd %frag_main = OpFunction %void None %72 %85 = OpLabel %86 = OpFunctionCall %v4float %frag_main_inner OpStore %value_1 %86 OpReturn OpFunctionEnd %comp_main_inner = OpFunction %void None %87 %gl_GlobalInvocationID = OpFunctionParameter %v3uint %90 = OpLabel %index = OpVariable %_ptr_Function_uint Function %94 %vPos = OpVariable %_ptr_Function_v2float Function %65 %vVel = OpVariable %_ptr_Function_v2float Function %65 %cMass = OpVariable %_ptr_Function_v2float Function %65 %cVel = OpVariable %_ptr_Function_v2float Function %65 %colVel = OpVariable %_ptr_Function_v2float Function %65 %cMassCount = OpVariable %_ptr_Function_int Function %115 %cVelCount = OpVariable %_ptr_Function_int Function %115 %pos_0 = OpVariable %_ptr_Function_v2float Function %65 %vel = OpVariable %_ptr_Function_v2float Function %65 %i = OpVariable %_ptr_Function_uint Function %94 %91 = OpCompositeExtract %uint %gl_GlobalInvocationID 0 OpStore %index %91 %95 = OpLoad %uint %index %96 = OpUGreaterThanEqual %bool %95 %uint_5 OpSelectionMerge %98 None OpBranchConditional %96 %99 %98 %99 = OpLabel OpReturn %98 = OpLabel %101 = OpLoad %uint %index %103 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %uint_0 %101 %uint_0 %104 = OpLoad %v2float %103 OpStore %vPos %104 %106 = OpLoad %uint %index %108 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %uint_0 %106 %uint_1 %109 = OpLoad %v2float %108 OpStore %vVel %109 OpStore %cMass %65 OpStore %cVel %65 OpStore %colVel %65 OpStore %cMassCount %115 OpStore %cVelCount %115 OpStore %i %94 OpBranch %122 %122 = OpLabel OpLoopMerge %123 %124 None OpBranch %125 %125 = OpLabel %127 = OpLoad %uint %i %128 = OpULessThan %bool %127 %uint_5 %126 = OpLogicalNot %bool %128 OpSelectionMerge %129 None OpBranchConditional %126 %130 %129 %130 = OpLabel OpBranch %123 %129 = OpLabel %131 = OpLoad %uint %i %132 = OpLoad %uint %index %133 = OpIEqual %bool %131 %132 OpSelectionMerge %134 None OpBranchConditional %133 %135 %134 %135 = OpLabel OpBranch %124 %134 = OpLabel %136 = OpLoad %uint %i %137 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %uint_0 %136 %uint_0 %138 = OpLoad %v2float %137 %139 = OpVectorShuffle %v2float %138 %138 0 1 OpStore %pos_0 %139 %140 = OpLoad %uint %i %141 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %uint_0 %140 %uint_1 %142 = OpLoad %v2float %141 %143 = OpVectorShuffle %v2float %142 %142 0 1 OpStore %vel %143 %145 = OpLoad %v2float %pos_0 %146 = OpLoad %v2float %vPos %144 = OpExtInst %float %39 Distance %145 %146 %148 = OpAccessChain %_ptr_Uniform_float %params %uint_0 %uint_1 %149 = OpLoad %float %148 %150 = OpFOrdLessThan %bool %144 %149 OpSelectionMerge %151 None OpBranchConditional %150 %152 %151 %152 = OpLabel %153 = OpLoad %v2float %cMass %154 = OpLoad %v2float %pos_0 %155 = OpFAdd %v2float %153 %154 OpStore %cMass %155 %156 = OpLoad %int %cMassCount %158 = OpIAdd %int %156 %int_1 OpStore %cMassCount %158 OpBranch %151 %151 = OpLabel %160 = OpLoad %v2float %pos_0 %161 = OpLoad %v2float %vPos %159 = OpExtInst %float %39 Distance %160 %161 %163 = OpAccessChain %_ptr_Uniform_float %params %uint_0 %uint_2 %164 = OpLoad %float %163 %165 = OpFOrdLessThan %bool %159 %164 OpSelectionMerge %166 None OpBranchConditional %165 %167 %166 %167 = OpLabel %168 = OpLoad %v2float %colVel %169 = OpLoad %v2float %pos_0 %170 = OpLoad %v2float %vPos %171 = OpFSub %v2float %169 %170 %172 = OpFSub %v2float %168 %171 OpStore %colVel %172 OpBranch %166 %166 = OpLabel %174 = OpLoad %v2float %pos_0 %175 = OpLoad %v2float %vPos %173 = OpExtInst %float %39 Distance %174 %175 %177 = OpAccessChain %_ptr_Uniform_float %params %uint_0 %uint_3 %178 = OpLoad %float %177 %179 = OpFOrdLessThan %bool %173 %178 OpSelectionMerge %180 None OpBranchConditional %179 %181 %180 %181 = OpLabel %182 = OpLoad %v2float %cVel %183 = OpLoad %v2float %vel %184 = OpFAdd %v2float %182 %183 OpStore %cVel %184 %185 = OpLoad %int %cVelCount %186 = OpIAdd %int %185 %int_1 OpStore %cVelCount %186 OpBranch %180 %180 = OpLabel OpBranch %124 %124 = OpLabel %187 = OpLoad %uint %i %188 = OpIAdd %uint %187 %uint_1 OpStore %i %188 OpBranch %122 %123 = OpLabel %189 = OpLoad %int %cMassCount %190 = OpSGreaterThan %bool %189 %115 OpSelectionMerge %191 None OpBranchConditional %190 %192 %191 %192 = OpLabel %193 = OpLoad %v2float %cMass %195 = OpLoad %int %cMassCount %194 = OpConvertSToF %float %195 %197 = OpLoad %int %cMassCount %196 = OpConvertSToF %float %197 %198 = OpCompositeConstruct %v2float %194 %196 %199 = OpFDiv %v2float %193 %198 %200 = OpLoad %v2float %vPos %201 = OpFSub %v2float %199 %200 OpStore %cMass %201 OpBranch %191 %191 = OpLabel %202 = OpLoad %int %cVelCount %203 = OpSGreaterThan %bool %202 %115 OpSelectionMerge %204 None OpBranchConditional %203 %205 %204 %205 = OpLabel %206 = OpLoad %v2float %cVel %208 = OpLoad %int %cVelCount %207 = OpConvertSToF %float %208 %210 = OpLoad %int %cVelCount %209 = OpConvertSToF %float %210 %211 = OpCompositeConstruct %v2float %207 %209 %212 = OpFDiv %v2float %206 %211 OpStore %cVel %212 OpBranch %204 %204 = OpLabel %213 = OpLoad %v2float %vVel %214 = OpLoad %v2float %cMass %216 = OpAccessChain %_ptr_Uniform_float %params %uint_0 %uint_4 %217 = OpLoad %float %216 %218 = OpVectorTimesScalar %v2float %214 %217 %219 = OpFAdd %v2float %213 %218 %220 = OpLoad %v2float %colVel %221 = OpAccessChain %_ptr_Uniform_float %params %uint_0 %uint_5 %222 = OpLoad %float %221 %223 = OpVectorTimesScalar %v2float %220 %222 %224 = OpFAdd %v2float %219 %223 %225 = OpLoad %v2float %cVel %227 = OpAccessChain %_ptr_Uniform_float %params %uint_0 %uint_6 %228 = OpLoad %float %227 %229 = OpVectorTimesScalar %v2float %225 %228 %230 = OpFAdd %v2float %224 %229 OpStore %vVel %230 %232 = OpLoad %v2float %vVel %231 = OpExtInst %v2float %39 Normalize %232 %235 = OpLoad %v2float %vVel %234 = OpExtInst %float %39 Length %235 %233 = OpExtInst %float %39 NClamp %234 %13 %float_0_100000001 %237 = OpVectorTimesScalar %v2float %231 %233 OpStore %vVel %237 %238 = OpLoad %v2float %vPos %239 = OpLoad %v2float %vVel %240 = OpAccessChain %_ptr_Uniform_float %params %uint_0 %uint_0 %241 = OpLoad %float %240 %242 = OpVectorTimesScalar %v2float %239 %241 %243 = OpFAdd %v2float %238 %242 OpStore %vPos %243 %244 = OpAccessChain %_ptr_Function_float %vPos %uint_0 %245 = OpLoad %float %244 %247 = OpFOrdLessThan %bool %245 %float_n1 OpSelectionMerge %248 None OpBranchConditional %247 %249 %248 %249 = OpLabel %250 = OpAccessChain %_ptr_Function_float %vPos %uint_0 OpStore %250 %float_1 OpBranch %248 %248 = OpLabel %251 = OpAccessChain %_ptr_Function_float %vPos %uint_0 %252 = OpLoad %float %251 %253 = OpFOrdGreaterThan %bool %252 %float_1 OpSelectionMerge %254 None OpBranchConditional %253 %255 %254 %255 = OpLabel %256 = OpAccessChain %_ptr_Function_float %vPos %uint_0 OpStore %256 %float_n1 OpBranch %254 %254 = OpLabel %257 = OpAccessChain %_ptr_Function_float %vPos %uint_1 %258 = OpLoad %float %257 %259 = OpFOrdLessThan %bool %258 %float_n1 OpSelectionMerge %260 None OpBranchConditional %259 %261 %260 %261 = OpLabel %262 = OpAccessChain %_ptr_Function_float %vPos %uint_1 OpStore %262 %float_1 OpBranch %260 %260 = OpLabel %263 = OpAccessChain %_ptr_Function_float %vPos %uint_1 %264 = OpLoad %float %263 %265 = OpFOrdGreaterThan %bool %264 %float_1 OpSelectionMerge %266 None OpBranchConditional %265 %267 %266 %267 = OpLabel %268 = OpAccessChain %_ptr_Function_float %vPos %uint_1 OpStore %268 %float_n1 OpBranch %266 %266 = OpLabel %269 = OpLoad %uint %index %270 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesB %uint_0 %uint_0 %269 %uint_0 %271 = OpLoad %v2float %vPos OpStore %270 %271 %272 = OpLoad %uint %index %273 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesB %uint_0 %uint_0 %272 %uint_1 %274 = OpLoad %v2float %vVel OpStore %273 %274 OpReturn OpFunctionEnd %comp_main = OpFunction %void None %72 %276 = OpLabel %278 = OpLoad %v3uint %gl_GlobalInvocationID_1 %277 = OpFunctionCall %void %comp_main_inner %278 OpReturn OpFunctionEnd