• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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