; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 ; Bound: 277 ; Schema: 0 OpCapability Shader %37 = 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 %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 %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 %SimParams Block 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 %Particles Block 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 %_ptr_Uniform_SimParams = OpTypePointer Uniform %SimParams %params = OpVariable %_ptr_Uniform_SimParams Uniform %Particle = OpTypeStruct %v2float %v2float %uint_5 = OpConstant %uint 5 %_arr_Particle_uint_5 = OpTypeArray %Particle %uint_5 %Particles = OpTypeStruct %_arr_Particle_uint_5 %_ptr_StorageBuffer_Particles = OpTypePointer StorageBuffer %Particles %particlesA = OpVariable %_ptr_StorageBuffer_Particles StorageBuffer %particlesB = OpVariable %_ptr_StorageBuffer_Particles StorageBuffer %29 = OpTypeFunction %v4float %v2float %v2float %v2float %_ptr_Function_float = OpTypePointer Function %float %_ptr_Function_v2float = OpTypePointer Function %v2float %63 = OpConstantNull %v2float %float_1 = OpConstant %float 1 %void = OpTypeVoid %70 = OpTypeFunction %void %78 = OpTypeFunction %v4float %81 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1 %85 = OpTypeFunction %void %v3uint %_ptr_Function_uint = OpTypePointer Function %uint %92 = OpConstantNull %uint %bool = OpTypeBool %uint_0 = OpConstant %uint 0 %_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float %uint_1 = OpConstant %uint 1 %int = OpTypeInt 32 1 %113 = 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 %29 %a_particlePos = OpFunctionParameter %v2float %a_particleVel = OpFunctionParameter %v2float %a_pos = OpFunctionParameter %v2float %34 = OpLabel %angle = OpVariable %_ptr_Function_float Function %13 %pos = OpVariable %_ptr_Function_v2float Function %63 %38 = OpCompositeExtract %float %a_particleVel 0 %39 = OpCompositeExtract %float %a_particleVel 1 %36 = OpExtInst %float %37 Atan2 %38 %39 %35 = OpFNegate %float %36 OpStore %angle %35 %42 = OpCompositeExtract %float %a_pos 0 %44 = OpLoad %float %angle %43 = OpExtInst %float %37 Cos %44 %45 = OpFMul %float %42 %43 %46 = OpCompositeExtract %float %a_pos 1 %48 = OpLoad %float %angle %47 = OpExtInst %float %37 Sin %48 %49 = OpFMul %float %46 %47 %50 = OpFSub %float %45 %49 %51 = OpCompositeExtract %float %a_pos 0 %53 = OpLoad %float %angle %52 = OpExtInst %float %37 Sin %53 %54 = OpFMul %float %51 %52 %55 = OpCompositeExtract %float %a_pos 1 %57 = OpLoad %float %angle %56 = OpExtInst %float %37 Cos %57 %58 = OpFMul %float %55 %56 %59 = OpFAdd %float %54 %58 %60 = OpCompositeConstruct %v2float %50 %59 OpStore %pos %60 %64 = OpLoad %v2float %pos %65 = OpFAdd %v2float %64 %a_particlePos %66 = OpCompositeExtract %float %65 0 %67 = OpCompositeExtract %float %65 1 %69 = OpCompositeConstruct %v4float %66 %67 %13 %float_1 OpReturnValue %69 OpFunctionEnd %vert_main = OpFunction %void None %70 %73 = OpLabel %75 = OpLoad %v2float %a_particlePos_1 %76 = OpLoad %v2float %a_particleVel_1 %77 = OpLoad %v2float %a_pos_1 %74 = OpFunctionCall %v4float %vert_main_inner %75 %76 %77 OpStore %value %74 OpStore %vertex_point_size %float_1 OpReturn OpFunctionEnd %frag_main_inner = OpFunction %v4float None %78 %80 = OpLabel OpReturnValue %81 OpFunctionEnd %frag_main = OpFunction %void None %70 %83 = OpLabel %84 = OpFunctionCall %v4float %frag_main_inner OpStore %value_1 %84 OpReturn OpFunctionEnd %comp_main_inner = OpFunction %void None %85 %gl_GlobalInvocationID = OpFunctionParameter %v3uint %88 = OpLabel %index = OpVariable %_ptr_Function_uint Function %92 %vPos = OpVariable %_ptr_Function_v2float Function %63 %vVel = OpVariable %_ptr_Function_v2float Function %63 %cMass = OpVariable %_ptr_Function_v2float Function %63 %cVel = OpVariable %_ptr_Function_v2float Function %63 %colVel = OpVariable %_ptr_Function_v2float Function %63 %cMassCount = OpVariable %_ptr_Function_int Function %113 %cVelCount = OpVariable %_ptr_Function_int Function %113 %pos_0 = OpVariable %_ptr_Function_v2float Function %63 %vel = OpVariable %_ptr_Function_v2float Function %63 %i = OpVariable %_ptr_Function_uint Function %92 %89 = OpCompositeExtract %uint %gl_GlobalInvocationID 0 OpStore %index %89 %93 = OpLoad %uint %index %94 = OpUGreaterThanEqual %bool %93 %uint_5 OpSelectionMerge %96 None OpBranchConditional %94 %97 %96 %97 = OpLabel OpReturn %96 = OpLabel %99 = OpLoad %uint %index %101 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %99 %uint_0 %102 = OpLoad %v2float %101 OpStore %vPos %102 %104 = OpLoad %uint %index %106 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %104 %uint_1 %107 = OpLoad %v2float %106 OpStore %vVel %107 OpStore %cMass %63 OpStore %cVel %63 OpStore %colVel %63 OpStore %cMassCount %113 OpStore %cVelCount %113 OpStore %i %92 OpBranch %120 %120 = OpLabel OpLoopMerge %121 %122 None OpBranch %123 %123 = OpLabel %125 = OpLoad %uint %i %126 = OpULessThan %bool %125 %uint_5 %124 = OpLogicalNot %bool %126 OpSelectionMerge %127 None OpBranchConditional %124 %128 %127 %128 = OpLabel OpBranch %121 %127 = OpLabel %129 = OpLoad %uint %i %130 = OpLoad %uint %index %131 = OpIEqual %bool %129 %130 OpSelectionMerge %132 None OpBranchConditional %131 %133 %132 %133 = OpLabel OpBranch %122 %132 = OpLabel %134 = OpLoad %uint %i %135 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %134 %uint_0 %136 = OpLoad %v2float %135 %137 = OpVectorShuffle %v2float %136 %136 0 1 OpStore %pos_0 %137 %138 = OpLoad %uint %i %139 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %138 %uint_1 %140 = OpLoad %v2float %139 %141 = OpVectorShuffle %v2float %140 %140 0 1 OpStore %vel %141 %143 = OpLoad %v2float %pos_0 %144 = OpLoad %v2float %vPos %142 = OpExtInst %float %37 Distance %143 %144 %146 = OpAccessChain %_ptr_Uniform_float %params %uint_1 %147 = OpLoad %float %146 %148 = OpFOrdLessThan %bool %142 %147 OpSelectionMerge %149 None OpBranchConditional %148 %150 %149 %150 = OpLabel %151 = OpLoad %v2float %cMass %152 = OpLoad %v2float %pos_0 %153 = OpFAdd %v2float %151 %152 OpStore %cMass %153 %154 = OpLoad %int %cMassCount %156 = OpIAdd %int %154 %int_1 OpStore %cMassCount %156 OpBranch %149 %149 = OpLabel %158 = OpLoad %v2float %pos_0 %159 = OpLoad %v2float %vPos %157 = OpExtInst %float %37 Distance %158 %159 %161 = OpAccessChain %_ptr_Uniform_float %params %uint_2 %162 = OpLoad %float %161 %163 = OpFOrdLessThan %bool %157 %162 OpSelectionMerge %164 None OpBranchConditional %163 %165 %164 %165 = OpLabel %166 = OpLoad %v2float %colVel %167 = OpLoad %v2float %pos_0 %168 = OpLoad %v2float %vPos %169 = OpFSub %v2float %167 %168 %170 = OpFSub %v2float %166 %169 OpStore %colVel %170 OpBranch %164 %164 = OpLabel %172 = OpLoad %v2float %pos_0 %173 = OpLoad %v2float %vPos %171 = OpExtInst %float %37 Distance %172 %173 %175 = OpAccessChain %_ptr_Uniform_float %params %uint_3 %176 = OpLoad %float %175 %177 = OpFOrdLessThan %bool %171 %176 OpSelectionMerge %178 None OpBranchConditional %177 %179 %178 %179 = OpLabel %180 = OpLoad %v2float %cVel %181 = OpLoad %v2float %vel %182 = OpFAdd %v2float %180 %181 OpStore %cVel %182 %183 = OpLoad %int %cVelCount %184 = OpIAdd %int %183 %int_1 OpStore %cVelCount %184 OpBranch %178 %178 = OpLabel OpBranch %122 %122 = OpLabel %185 = OpLoad %uint %i %186 = OpIAdd %uint %185 %uint_1 OpStore %i %186 OpBranch %120 %121 = OpLabel %187 = OpLoad %int %cMassCount %188 = OpSGreaterThan %bool %187 %113 OpSelectionMerge %189 None OpBranchConditional %188 %190 %189 %190 = OpLabel %191 = OpLoad %v2float %cMass %193 = OpLoad %int %cMassCount %192 = OpConvertSToF %float %193 %195 = OpLoad %int %cMassCount %194 = OpConvertSToF %float %195 %196 = OpCompositeConstruct %v2float %192 %194 %197 = OpFDiv %v2float %191 %196 %198 = OpLoad %v2float %vPos %199 = OpFSub %v2float %197 %198 OpStore %cMass %199 OpBranch %189 %189 = OpLabel %200 = OpLoad %int %cVelCount %201 = OpSGreaterThan %bool %200 %113 OpSelectionMerge %202 None OpBranchConditional %201 %203 %202 %203 = OpLabel %204 = OpLoad %v2float %cVel %206 = OpLoad %int %cVelCount %205 = OpConvertSToF %float %206 %208 = OpLoad %int %cVelCount %207 = OpConvertSToF %float %208 %209 = OpCompositeConstruct %v2float %205 %207 %210 = OpFDiv %v2float %204 %209 OpStore %cVel %210 OpBranch %202 %202 = OpLabel %211 = OpLoad %v2float %vVel %212 = OpLoad %v2float %cMass %214 = OpAccessChain %_ptr_Uniform_float %params %uint_4 %215 = OpLoad %float %214 %216 = OpVectorTimesScalar %v2float %212 %215 %217 = OpFAdd %v2float %211 %216 %218 = OpLoad %v2float %colVel %219 = OpAccessChain %_ptr_Uniform_float %params %uint_5 %220 = OpLoad %float %219 %221 = OpVectorTimesScalar %v2float %218 %220 %222 = OpFAdd %v2float %217 %221 %223 = OpLoad %v2float %cVel %225 = OpAccessChain %_ptr_Uniform_float %params %uint_6 %226 = OpLoad %float %225 %227 = OpVectorTimesScalar %v2float %223 %226 %228 = OpFAdd %v2float %222 %227 OpStore %vVel %228 %230 = OpLoad %v2float %vVel %229 = OpExtInst %v2float %37 Normalize %230 %233 = OpLoad %v2float %vVel %232 = OpExtInst %float %37 Length %233 %231 = OpExtInst %float %37 NClamp %232 %13 %float_0_100000001 %235 = OpVectorTimesScalar %v2float %229 %231 OpStore %vVel %235 %236 = OpLoad %v2float %vPos %237 = OpLoad %v2float %vVel %238 = OpAccessChain %_ptr_Uniform_float %params %uint_0 %239 = OpLoad %float %238 %240 = OpVectorTimesScalar %v2float %237 %239 %241 = OpFAdd %v2float %236 %240 OpStore %vPos %241 %242 = OpAccessChain %_ptr_Function_float %vPos %uint_0 %243 = OpLoad %float %242 %245 = OpFOrdLessThan %bool %243 %float_n1 OpSelectionMerge %246 None OpBranchConditional %245 %247 %246 %247 = OpLabel %248 = OpAccessChain %_ptr_Function_float %vPos %uint_0 OpStore %248 %float_1 OpBranch %246 %246 = OpLabel %249 = OpAccessChain %_ptr_Function_float %vPos %uint_0 %250 = OpLoad %float %249 %251 = OpFOrdGreaterThan %bool %250 %float_1 OpSelectionMerge %252 None OpBranchConditional %251 %253 %252 %253 = OpLabel %254 = OpAccessChain %_ptr_Function_float %vPos %uint_0 OpStore %254 %float_n1 OpBranch %252 %252 = OpLabel %255 = OpAccessChain %_ptr_Function_float %vPos %uint_1 %256 = OpLoad %float %255 %257 = OpFOrdLessThan %bool %256 %float_n1 OpSelectionMerge %258 None OpBranchConditional %257 %259 %258 %259 = OpLabel %260 = OpAccessChain %_ptr_Function_float %vPos %uint_1 OpStore %260 %float_1 OpBranch %258 %258 = OpLabel %261 = OpAccessChain %_ptr_Function_float %vPos %uint_1 %262 = OpLoad %float %261 %263 = OpFOrdGreaterThan %bool %262 %float_1 OpSelectionMerge %264 None OpBranchConditional %263 %265 %264 %265 = OpLabel %266 = OpAccessChain %_ptr_Function_float %vPos %uint_1 OpStore %266 %float_n1 OpBranch %264 %264 = OpLabel %267 = OpLoad %uint %index %268 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesB %uint_0 %267 %uint_0 %269 = OpLoad %v2float %vPos OpStore %268 %269 %270 = OpLoad %uint %index %271 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesB %uint_0 %270 %uint_1 %272 = OpLoad %v2float %vVel OpStore %271 %272 OpReturn OpFunctionEnd %comp_main = OpFunction %void None %70 %274 = OpLabel %276 = OpLoad %v3uint %gl_GlobalInvocationID_1 %275 = OpFunctionCall %void %comp_main_inner %276 OpReturn OpFunctionEnd