1; SPIR-V 2; Version: 1.3 3; Generator: Google Tint Compiler; 0 4; Bound: 280 5; Schema: 0 6 OpCapability Shader 7 %37 = OpExtInstImport "GLSL.std.450" 8 OpMemoryModel Logical GLSL450 9 OpEntryPoint Vertex %vert_main "vert_main" %a_particlePos_1 %a_particleVel_1 %a_pos_1 %value %vertex_point_size 10 OpEntryPoint Fragment %frag_main "frag_main" %value_1 11 OpEntryPoint GLCompute %comp_main "comp_main" %gl_GlobalInvocationID_1 12 OpExecutionMode %frag_main OriginUpperLeft 13 OpExecutionMode %comp_main LocalSize 1 1 1 14 OpName %a_particlePos_1 "a_particlePos_1" 15 OpName %a_particleVel_1 "a_particleVel_1" 16 OpName %a_pos_1 "a_pos_1" 17 OpName %value "value" 18 OpName %vertex_point_size "vertex_point_size" 19 OpName %value_1 "value_1" 20 OpName %gl_GlobalInvocationID_1 "gl_GlobalInvocationID_1" 21 OpName %SimParams "SimParams" 22 OpMemberName %SimParams 0 "deltaT" 23 OpMemberName %SimParams 1 "rule1Distance" 24 OpMemberName %SimParams 2 "rule2Distance" 25 OpMemberName %SimParams 3 "rule3Distance" 26 OpMemberName %SimParams 4 "rule1Scale" 27 OpMemberName %SimParams 5 "rule2Scale" 28 OpMemberName %SimParams 6 "rule3Scale" 29 OpName %params "params" 30 OpName %Particles "Particles" 31 OpMemberName %Particles 0 "particles" 32 OpName %Particle "Particle" 33 OpMemberName %Particle 0 "pos" 34 OpMemberName %Particle 1 "vel" 35 OpName %particlesA "particlesA" 36 OpName %particlesB "particlesB" 37 OpName %vert_main_inner "vert_main_inner" 38 OpName %a_particlePos "a_particlePos" 39 OpName %a_particleVel "a_particleVel" 40 OpName %a_pos "a_pos" 41 OpName %angle "angle" 42 OpName %pos "pos" 43 OpName %vert_main "vert_main" 44 OpName %frag_main_inner "frag_main_inner" 45 OpName %frag_main "frag_main" 46 OpName %comp_main_inner "comp_main_inner" 47 OpName %gl_GlobalInvocationID "gl_GlobalInvocationID" 48 OpName %index "index" 49 OpName %vPos "vPos" 50 OpName %vVel "vVel" 51 OpName %cMass "cMass" 52 OpName %cVel "cVel" 53 OpName %colVel "colVel" 54 OpName %cMassCount "cMassCount" 55 OpName %cVelCount "cVelCount" 56 OpName %pos_0 "pos" 57 OpName %vel "vel" 58 OpName %i "i" 59 OpName %comp_main "comp_main" 60 OpDecorate %a_particlePos_1 Location 0 61 OpDecorate %a_particleVel_1 Location 1 62 OpDecorate %a_pos_1 Location 2 63 OpDecorate %value BuiltIn Position 64 OpDecorate %vertex_point_size BuiltIn PointSize 65 OpDecorate %value_1 Location 0 66 OpDecorate %gl_GlobalInvocationID_1 BuiltIn GlobalInvocationId 67 OpDecorate %SimParams Block 68 OpMemberDecorate %SimParams 0 Offset 0 69 OpMemberDecorate %SimParams 1 Offset 4 70 OpMemberDecorate %SimParams 2 Offset 8 71 OpMemberDecorate %SimParams 3 Offset 12 72 OpMemberDecorate %SimParams 4 Offset 16 73 OpMemberDecorate %SimParams 5 Offset 20 74 OpMemberDecorate %SimParams 6 Offset 24 75 OpDecorate %params NonWritable 76 OpDecorate %params Binding 0 77 OpDecorate %params DescriptorSet 0 78 OpDecorate %Particles Block 79 OpMemberDecorate %Particles 0 Offset 0 80 OpMemberDecorate %Particle 0 Offset 0 81 OpMemberDecorate %Particle 1 Offset 8 82 OpDecorate %_arr_Particle_uint_5 ArrayStride 16 83 OpDecorate %particlesA Binding 1 84 OpDecorate %particlesA DescriptorSet 0 85 OpDecorate %particlesB Binding 2 86 OpDecorate %particlesB DescriptorSet 0 87 %float = OpTypeFloat 32 88 %v2float = OpTypeVector %float 2 89%_ptr_Input_v2float = OpTypePointer Input %v2float 90%a_particlePos_1 = OpVariable %_ptr_Input_v2float Input 91%a_particleVel_1 = OpVariable %_ptr_Input_v2float Input 92 %a_pos_1 = OpVariable %_ptr_Input_v2float Input 93 %v4float = OpTypeVector %float 4 94%_ptr_Output_v4float = OpTypePointer Output %v4float 95 %10 = OpConstantNull %v4float 96 %value = OpVariable %_ptr_Output_v4float Output %10 97%_ptr_Output_float = OpTypePointer Output %float 98 %13 = OpConstantNull %float 99%vertex_point_size = OpVariable %_ptr_Output_float Output %13 100 %value_1 = OpVariable %_ptr_Output_v4float Output %10 101 %uint = OpTypeInt 32 0 102 %v3uint = OpTypeVector %uint 3 103%_ptr_Input_v3uint = OpTypePointer Input %v3uint 104%gl_GlobalInvocationID_1 = OpVariable %_ptr_Input_v3uint Input 105 %SimParams = OpTypeStruct %float %float %float %float %float %float %float 106%_ptr_Uniform_SimParams = OpTypePointer Uniform %SimParams 107 %params = OpVariable %_ptr_Uniform_SimParams Uniform 108 %Particle = OpTypeStruct %v2float %v2float 109 %uint_5 = OpConstant %uint 5 110%_arr_Particle_uint_5 = OpTypeArray %Particle %uint_5 111 %Particles = OpTypeStruct %_arr_Particle_uint_5 112%_ptr_StorageBuffer_Particles = OpTypePointer StorageBuffer %Particles 113 %particlesA = OpVariable %_ptr_StorageBuffer_Particles StorageBuffer 114 %particlesB = OpVariable %_ptr_StorageBuffer_Particles StorageBuffer 115 %29 = OpTypeFunction %v4float %v2float %v2float %v2float 116%_ptr_Function_float = OpTypePointer Function %float 117%_ptr_Function_v2float = OpTypePointer Function %v2float 118 %63 = OpConstantNull %v2float 119 %float_0 = OpConstant %float 0 120 %float_1 = OpConstant %float 1 121 %void = OpTypeVoid 122 %71 = OpTypeFunction %void 123 %79 = OpTypeFunction %v4float 124 %82 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1 125 %86 = OpTypeFunction %void %v3uint 126%_ptr_Function_uint = OpTypePointer Function %uint 127 %93 = OpConstantNull %uint 128 %bool = OpTypeBool 129 %uint_0 = OpConstant %uint 0 130%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float 131 %uint_1 = OpConstant %uint 1 132 %110 = OpConstantComposite %v2float %float_0 %float_0 133 %int = OpTypeInt 32 1 134 %int_0 = OpConstant %int 0 135%_ptr_Function_int = OpTypePointer Function %int 136 %118 = OpConstantNull %int 137%_ptr_Uniform_float = OpTypePointer Uniform %float 138 %int_1 = OpConstant %int 1 139 %uint_2 = OpConstant %uint 2 140 %uint_3 = OpConstant %uint 3 141 %uint_4 = OpConstant %uint 4 142 %uint_6 = OpConstant %uint 6 143%float_0_100000001 = OpConstant %float 0.100000001 144 %float_n1 = OpConstant %float -1 145%vert_main_inner = OpFunction %v4float None %29 146%a_particlePos = OpFunctionParameter %v2float 147%a_particleVel = OpFunctionParameter %v2float 148 %a_pos = OpFunctionParameter %v2float 149 %34 = OpLabel 150 %angle = OpVariable %_ptr_Function_float Function %13 151 %pos = OpVariable %_ptr_Function_v2float Function %63 152 %38 = OpCompositeExtract %float %a_particleVel 0 153 %39 = OpCompositeExtract %float %a_particleVel 1 154 %36 = OpExtInst %float %37 Atan2 %38 %39 155 %35 = OpFNegate %float %36 156 OpStore %angle %35 157 %42 = OpCompositeExtract %float %a_pos 0 158 %44 = OpLoad %float %angle 159 %43 = OpExtInst %float %37 Cos %44 160 %45 = OpFMul %float %42 %43 161 %46 = OpCompositeExtract %float %a_pos 1 162 %48 = OpLoad %float %angle 163 %47 = OpExtInst %float %37 Sin %48 164 %49 = OpFMul %float %46 %47 165 %50 = OpFSub %float %45 %49 166 %51 = OpCompositeExtract %float %a_pos 0 167 %53 = OpLoad %float %angle 168 %52 = OpExtInst %float %37 Sin %53 169 %54 = OpFMul %float %51 %52 170 %55 = OpCompositeExtract %float %a_pos 1 171 %57 = OpLoad %float %angle 172 %56 = OpExtInst %float %37 Cos %57 173 %58 = OpFMul %float %55 %56 174 %59 = OpFAdd %float %54 %58 175 %60 = OpCompositeConstruct %v2float %50 %59 176 OpStore %pos %60 177 %64 = OpLoad %v2float %pos 178 %65 = OpFAdd %v2float %64 %a_particlePos 179 %66 = OpCompositeExtract %float %65 0 180 %67 = OpCompositeExtract %float %65 1 181 %70 = OpCompositeConstruct %v4float %66 %67 %float_0 %float_1 182 OpReturnValue %70 183 OpFunctionEnd 184 %vert_main = OpFunction %void None %71 185 %74 = OpLabel 186 %76 = OpLoad %v2float %a_particlePos_1 187 %77 = OpLoad %v2float %a_particleVel_1 188 %78 = OpLoad %v2float %a_pos_1 189 %75 = OpFunctionCall %v4float %vert_main_inner %76 %77 %78 190 OpStore %value %75 191 OpStore %vertex_point_size %float_1 192 OpReturn 193 OpFunctionEnd 194%frag_main_inner = OpFunction %v4float None %79 195 %81 = OpLabel 196 OpReturnValue %82 197 OpFunctionEnd 198 %frag_main = OpFunction %void None %71 199 %84 = OpLabel 200 %85 = OpFunctionCall %v4float %frag_main_inner 201 OpStore %value_1 %85 202 OpReturn 203 OpFunctionEnd 204%comp_main_inner = OpFunction %void None %86 205%gl_GlobalInvocationID = OpFunctionParameter %v3uint 206 %89 = OpLabel 207 %index = OpVariable %_ptr_Function_uint Function %93 208 %vPos = OpVariable %_ptr_Function_v2float Function %63 209 %vVel = OpVariable %_ptr_Function_v2float Function %63 210 %cMass = OpVariable %_ptr_Function_v2float Function %63 211 %cVel = OpVariable %_ptr_Function_v2float Function %63 212 %colVel = OpVariable %_ptr_Function_v2float Function %63 213 %cMassCount = OpVariable %_ptr_Function_int Function %118 214 %cVelCount = OpVariable %_ptr_Function_int Function %118 215 %pos_0 = OpVariable %_ptr_Function_v2float Function %63 216 %vel = OpVariable %_ptr_Function_v2float Function %63 217 %i = OpVariable %_ptr_Function_uint Function %93 218 %90 = OpCompositeExtract %uint %gl_GlobalInvocationID 0 219 OpStore %index %90 220 %94 = OpLoad %uint %index 221 %95 = OpUGreaterThanEqual %bool %94 %uint_5 222 OpSelectionMerge %97 None 223 OpBranchConditional %95 %98 %97 224 %98 = OpLabel 225 OpReturn 226 %97 = OpLabel 227 %100 = OpLoad %uint %index 228 %102 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %100 %uint_0 229 %103 = OpLoad %v2float %102 230 OpStore %vPos %103 231 %105 = OpLoad %uint %index 232 %107 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %105 %uint_1 233 %108 = OpLoad %v2float %107 234 OpStore %vVel %108 235 OpStore %cMass %110 236 OpStore %cVel %110 237 OpStore %colVel %110 238 OpStore %cMassCount %int_0 239 OpStore %cVelCount %int_0 240 OpStore %i %uint_0 241 OpBranch %123 242 %123 = OpLabel 243 OpLoopMerge %124 %125 None 244 OpBranch %126 245 %126 = OpLabel 246 %128 = OpLoad %uint %i 247 %129 = OpULessThan %bool %128 %uint_5 248 %127 = OpLogicalNot %bool %129 249 OpSelectionMerge %130 None 250 OpBranchConditional %127 %131 %130 251 %131 = OpLabel 252 OpBranch %124 253 %130 = OpLabel 254 %132 = OpLoad %uint %i 255 %133 = OpLoad %uint %index 256 %134 = OpIEqual %bool %132 %133 257 OpSelectionMerge %135 None 258 OpBranchConditional %134 %136 %135 259 %136 = OpLabel 260 OpBranch %125 261 %135 = OpLabel 262 %137 = OpLoad %uint %i 263 %138 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %137 %uint_0 264 %139 = OpLoad %v2float %138 265 %140 = OpVectorShuffle %v2float %139 %139 0 1 266 OpStore %pos_0 %140 267 %141 = OpLoad %uint %i 268 %142 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesA %uint_0 %141 %uint_1 269 %143 = OpLoad %v2float %142 270 %144 = OpVectorShuffle %v2float %143 %143 0 1 271 OpStore %vel %144 272 %146 = OpLoad %v2float %pos_0 273 %147 = OpLoad %v2float %vPos 274 %145 = OpExtInst %float %37 Distance %146 %147 275 %149 = OpAccessChain %_ptr_Uniform_float %params %uint_1 276 %150 = OpLoad %float %149 277 %151 = OpFOrdLessThan %bool %145 %150 278 OpSelectionMerge %152 None 279 OpBranchConditional %151 %153 %152 280 %153 = OpLabel 281 %154 = OpLoad %v2float %cMass 282 %155 = OpLoad %v2float %pos_0 283 %156 = OpFAdd %v2float %154 %155 284 OpStore %cMass %156 285 %157 = OpLoad %int %cMassCount 286 %159 = OpIAdd %int %157 %int_1 287 OpStore %cMassCount %159 288 OpBranch %152 289 %152 = OpLabel 290 %161 = OpLoad %v2float %pos_0 291 %162 = OpLoad %v2float %vPos 292 %160 = OpExtInst %float %37 Distance %161 %162 293 %164 = OpAccessChain %_ptr_Uniform_float %params %uint_2 294 %165 = OpLoad %float %164 295 %166 = OpFOrdLessThan %bool %160 %165 296 OpSelectionMerge %167 None 297 OpBranchConditional %166 %168 %167 298 %168 = OpLabel 299 %169 = OpLoad %v2float %colVel 300 %170 = OpLoad %v2float %pos_0 301 %171 = OpLoad %v2float %vPos 302 %172 = OpFSub %v2float %170 %171 303 %173 = OpFSub %v2float %169 %172 304 OpStore %colVel %173 305 OpBranch %167 306 %167 = OpLabel 307 %175 = OpLoad %v2float %pos_0 308 %176 = OpLoad %v2float %vPos 309 %174 = OpExtInst %float %37 Distance %175 %176 310 %178 = OpAccessChain %_ptr_Uniform_float %params %uint_3 311 %179 = OpLoad %float %178 312 %180 = OpFOrdLessThan %bool %174 %179 313 OpSelectionMerge %181 None 314 OpBranchConditional %180 %182 %181 315 %182 = OpLabel 316 %183 = OpLoad %v2float %cVel 317 %184 = OpLoad %v2float %vel 318 %185 = OpFAdd %v2float %183 %184 319 OpStore %cVel %185 320 %186 = OpLoad %int %cVelCount 321 %187 = OpIAdd %int %186 %int_1 322 OpStore %cVelCount %187 323 OpBranch %181 324 %181 = OpLabel 325 OpBranch %125 326 %125 = OpLabel 327 %188 = OpLoad %uint %i 328 %189 = OpIAdd %uint %188 %uint_1 329 OpStore %i %189 330 OpBranch %123 331 %124 = OpLabel 332 %190 = OpLoad %int %cMassCount 333 %191 = OpSGreaterThan %bool %190 %int_0 334 OpSelectionMerge %192 None 335 OpBranchConditional %191 %193 %192 336 %193 = OpLabel 337 %194 = OpLoad %v2float %cMass 338 %196 = OpLoad %int %cMassCount 339 %195 = OpConvertSToF %float %196 340 %198 = OpLoad %int %cMassCount 341 %197 = OpConvertSToF %float %198 342 %199 = OpCompositeConstruct %v2float %195 %197 343 %200 = OpFDiv %v2float %194 %199 344 %201 = OpLoad %v2float %vPos 345 %202 = OpFSub %v2float %200 %201 346 OpStore %cMass %202 347 OpBranch %192 348 %192 = OpLabel 349 %203 = OpLoad %int %cVelCount 350 %204 = OpSGreaterThan %bool %203 %int_0 351 OpSelectionMerge %205 None 352 OpBranchConditional %204 %206 %205 353 %206 = OpLabel 354 %207 = OpLoad %v2float %cVel 355 %209 = OpLoad %int %cVelCount 356 %208 = OpConvertSToF %float %209 357 %211 = OpLoad %int %cVelCount 358 %210 = OpConvertSToF %float %211 359 %212 = OpCompositeConstruct %v2float %208 %210 360 %213 = OpFDiv %v2float %207 %212 361 OpStore %cVel %213 362 OpBranch %205 363 %205 = OpLabel 364 %214 = OpLoad %v2float %vVel 365 %215 = OpLoad %v2float %cMass 366 %217 = OpAccessChain %_ptr_Uniform_float %params %uint_4 367 %218 = OpLoad %float %217 368 %219 = OpVectorTimesScalar %v2float %215 %218 369 %220 = OpFAdd %v2float %214 %219 370 %221 = OpLoad %v2float %colVel 371 %222 = OpAccessChain %_ptr_Uniform_float %params %uint_5 372 %223 = OpLoad %float %222 373 %224 = OpVectorTimesScalar %v2float %221 %223 374 %225 = OpFAdd %v2float %220 %224 375 %226 = OpLoad %v2float %cVel 376 %228 = OpAccessChain %_ptr_Uniform_float %params %uint_6 377 %229 = OpLoad %float %228 378 %230 = OpVectorTimesScalar %v2float %226 %229 379 %231 = OpFAdd %v2float %225 %230 380 OpStore %vVel %231 381 %233 = OpLoad %v2float %vVel 382 %232 = OpExtInst %v2float %37 Normalize %233 383 %236 = OpLoad %v2float %vVel 384 %235 = OpExtInst %float %37 Length %236 385 %234 = OpExtInst %float %37 NClamp %235 %float_0 %float_0_100000001 386 %238 = OpVectorTimesScalar %v2float %232 %234 387 OpStore %vVel %238 388 %239 = OpLoad %v2float %vPos 389 %240 = OpLoad %v2float %vVel 390 %241 = OpAccessChain %_ptr_Uniform_float %params %uint_0 391 %242 = OpLoad %float %241 392 %243 = OpVectorTimesScalar %v2float %240 %242 393 %244 = OpFAdd %v2float %239 %243 394 OpStore %vPos %244 395 %245 = OpAccessChain %_ptr_Function_float %vPos %uint_0 396 %246 = OpLoad %float %245 397 %248 = OpFOrdLessThan %bool %246 %float_n1 398 OpSelectionMerge %249 None 399 OpBranchConditional %248 %250 %249 400 %250 = OpLabel 401 %251 = OpAccessChain %_ptr_Function_float %vPos %uint_0 402 OpStore %251 %float_1 403 OpBranch %249 404 %249 = OpLabel 405 %252 = OpAccessChain %_ptr_Function_float %vPos %uint_0 406 %253 = OpLoad %float %252 407 %254 = OpFOrdGreaterThan %bool %253 %float_1 408 OpSelectionMerge %255 None 409 OpBranchConditional %254 %256 %255 410 %256 = OpLabel 411 %257 = OpAccessChain %_ptr_Function_float %vPos %uint_0 412 OpStore %257 %float_n1 413 OpBranch %255 414 %255 = OpLabel 415 %258 = OpAccessChain %_ptr_Function_float %vPos %uint_1 416 %259 = OpLoad %float %258 417 %260 = OpFOrdLessThan %bool %259 %float_n1 418 OpSelectionMerge %261 None 419 OpBranchConditional %260 %262 %261 420 %262 = OpLabel 421 %263 = OpAccessChain %_ptr_Function_float %vPos %uint_1 422 OpStore %263 %float_1 423 OpBranch %261 424 %261 = OpLabel 425 %264 = OpAccessChain %_ptr_Function_float %vPos %uint_1 426 %265 = OpLoad %float %264 427 %266 = OpFOrdGreaterThan %bool %265 %float_1 428 OpSelectionMerge %267 None 429 OpBranchConditional %266 %268 %267 430 %268 = OpLabel 431 %269 = OpAccessChain %_ptr_Function_float %vPos %uint_1 432 OpStore %269 %float_n1 433 OpBranch %267 434 %267 = OpLabel 435 %270 = OpLoad %uint %index 436 %271 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesB %uint_0 %270 %uint_0 437 %272 = OpLoad %v2float %vPos 438 OpStore %271 %272 439 %273 = OpLoad %uint %index 440 %274 = OpAccessChain %_ptr_StorageBuffer_v2float %particlesB %uint_0 %273 %uint_1 441 %275 = OpLoad %v2float %vVel 442 OpStore %274 %275 443 OpReturn 444 OpFunctionEnd 445 %comp_main = OpFunction %void None %71 446 %277 = OpLabel 447 %279 = OpLoad %v3uint %gl_GlobalInvocationID_1 448 %278 = OpFunctionCall %void %comp_main_inner %279 449 OpReturn 450 OpFunctionEnd 451