blob: 992783eb302acaed26c7dbf7e07a97827033b5f4 [file] [log] [blame]
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 1
; Bound: 277
; Schema: 0
OpCapability Shader
%40 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vert_main "vert_main" %vert_main_loc0_Input %vert_main_loc1_Input %vert_main_loc2_Input %vert_main_position_Output %vert_main___point_size_Output
OpEntryPoint Fragment %frag_main "frag_main" %frag_main_loc0_Output
OpEntryPoint GLCompute %comp_main "comp_main" %comp_main_global_invocation_id_Input
OpExecutionMode %frag_main OriginUpperLeft
OpExecutionMode %comp_main LocalSize 1 1 1
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 %SimParams "SimParams"
OpMemberName %tint_symbol_1 0 "tint_symbol"
OpName %tint_symbol_1 "tint_symbol_1"
OpMemberName %Particle 0 "pos"
OpMemberName %Particle 1 "vel"
OpName %Particle "Particle"
OpMemberName %Particles 0 "particles"
OpName %Particles "Particles"
OpMemberName %tint_symbol_3 0 "tint_symbol_2"
OpName %tint_symbol_3 "tint_symbol_3"
OpMemberName %tint_symbol_5 0 "tint_symbol_4"
OpName %tint_symbol_5 "tint_symbol_5"
OpName %vert_main_loc0_Input "vert_main_loc0_Input"
OpName %vert_main_loc1_Input "vert_main_loc1_Input"
OpName %vert_main_loc2_Input "vert_main_loc2_Input"
OpName %vert_main_position_Output "vert_main_position_Output"
OpName %vert_main___point_size_Output "vert_main___point_size_Output"
OpName %frag_main_loc0_Output "frag_main_loc0_Output"
OpName %comp_main_global_invocation_id_Input "comp_main_global_invocation_id_Input"
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 %frag_main_inner "frag_main_inner"
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 %vert_main "vert_main"
OpName %frag_main "frag_main"
OpName %comp_main "comp_main"
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
OpMemberDecorate %tint_symbol_1 0 Offset 0
OpDecorate %tint_symbol_1 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 0 Offset 0
OpMemberDecorate %tint_symbol_3 0 Offset 0
OpDecorate %tint_symbol_3 Block
OpDecorate %6 DescriptorSet 0
OpDecorate %6 Binding 1
OpDecorate %6 Coherent
OpMemberDecorate %tint_symbol_5 0 Offset 0
OpDecorate %tint_symbol_5 Block
OpDecorate %15 DescriptorSet 0
OpDecorate %15 Binding 2
OpDecorate %15 Coherent
OpDecorate %vert_main_loc0_Input Location 0
OpDecorate %vert_main_loc1_Input Location 1
OpDecorate %vert_main_loc2_Input Location 2
OpDecorate %vert_main_position_Output BuiltIn Position
OpDecorate %vert_main___point_size_Output BuiltIn PointSize
OpDecorate %frag_main_loc0_Output Location 0
OpDecorate %comp_main_global_invocation_id_Input BuiltIn GlobalInvocationId
%float = OpTypeFloat 32
%SimParams = OpTypeStruct %float %float %float %float %float %float %float
%tint_symbol_1 = OpTypeStruct %SimParams
%_ptr_Uniform_tint_symbol_1 = OpTypePointer Uniform %tint_symbol_1
%1 = OpVariable %_ptr_Uniform_tint_symbol_1 Uniform
%v2float = OpTypeVector %float 2
%Particle = OpTypeStruct %v2float %v2float
%uint = OpTypeInt 32 0
%uint_5 = OpConstant %uint 5
%_arr_Particle_uint_5 = OpTypeArray %Particle %uint_5
%Particles = OpTypeStruct %_arr_Particle_uint_5
%tint_symbol_3 = OpTypeStruct %Particles
%_ptr_StorageBuffer_tint_symbol_3 = OpTypePointer StorageBuffer %tint_symbol_3
%6 = OpVariable %_ptr_StorageBuffer_tint_symbol_3 StorageBuffer
%tint_symbol_5 = OpTypeStruct %Particles
%_ptr_StorageBuffer_tint_symbol_5 = OpTypePointer StorageBuffer %tint_symbol_5
%15 = OpVariable %_ptr_StorageBuffer_tint_symbol_5 StorageBuffer
%_ptr_Input_v2float = OpTypePointer Input %v2float
%vert_main_loc0_Input = OpVariable %_ptr_Input_v2float Input
%vert_main_loc1_Input = OpVariable %_ptr_Input_v2float Input
%vert_main_loc2_Input = OpVariable %_ptr_Input_v2float Input
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%vert_main_position_Output = OpVariable %_ptr_Output_v4float Output
%_ptr_Output_float = OpTypePointer Output %float
%vert_main___point_size_Output = OpVariable %_ptr_Output_float Output
%frag_main_loc0_Output = OpVariable %_ptr_Output_v4float Output
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%comp_main_global_invocation_id_Input = OpVariable %_ptr_Input_v3uint Input
%35 = OpTypeFunction %v4float %v2float %v2float %v2float
%_ptr_Function_float = OpTypePointer Function %float
%_ptr_Function_v2float = OpTypePointer Function %v2float
%float_0 = OpConstant %float 0
%float_1 = OpConstant %float 1
%71 = OpTypeFunction %v4float
%73 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%void = OpTypeVoid
%77 = OpTypeFunction %void %v3uint
%_ptr_Function_uint = OpTypePointer Function %uint
%bool = OpTypeBool
%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float
%uint_0 = OpConstant %uint 0
%uint_1 = OpConstant %uint 1
%99 = OpConstantNull %v2float
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%int_0 = OpConstant %int 0
%_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
%264 = OpTypeFunction %void
%vert_main_inner = OpFunction %v4float None %35
%a_particlePos = OpFunctionParameter %v2float
%a_particleVel = OpFunctionParameter %v2float
%a_pos = OpFunctionParameter %v2float
%36 = OpLabel
%angle = OpVariable %_ptr_Function_float Function
%pos = OpVariable %_ptr_Function_v2float Function
%37 = OpCompositeExtract %float %a_particleVel 0
%38 = OpCompositeExtract %float %a_particleVel 1
%39 = OpExtInst %float %40 Atan2 %37 %38
%41 = OpFNegate %float %39
OpStore %angle %41
%44 = OpCompositeExtract %float %a_pos 0
%45 = OpLoad %float %angle None
%46 = OpExtInst %float %40 Cos %45
%47 = OpFMul %float %44 %46
%48 = OpCompositeExtract %float %a_pos 1
%49 = OpLoad %float %angle None
%50 = OpExtInst %float %40 Sin %49
%51 = OpFMul %float %48 %50
%52 = OpFSub %float %47 %51
%53 = OpCompositeExtract %float %a_pos 0
%54 = OpLoad %float %angle None
%55 = OpExtInst %float %40 Sin %54
%56 = OpFMul %float %53 %55
%57 = OpCompositeExtract %float %a_pos 1
%58 = OpLoad %float %angle None
%59 = OpExtInst %float %40 Cos %58
%60 = OpFMul %float %57 %59
%61 = OpFAdd %float %56 %60
%62 = OpCompositeConstruct %v2float %52 %61
OpStore %pos %62
%65 = OpLoad %v2float %pos None
%66 = OpFAdd %v2float %65 %a_particlePos
%67 = OpCompositeConstruct %v4float %66 %float_0 %float_1
OpReturnValue %67
OpFunctionEnd
%frag_main_inner = OpFunction %v4float None %71
%72 = OpLabel
OpReturnValue %73
OpFunctionEnd
%comp_main_inner = OpFunction %void None %77
%gl_GlobalInvocationID = OpFunctionParameter %v3uint
%78 = 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_0 = OpVariable %_ptr_Function_v2float Function %99
%vel = OpVariable %_ptr_Function_v2float Function %99
%i = OpVariable %_ptr_Function_uint Function
%79 = OpCompositeExtract %uint %gl_GlobalInvocationID 0
OpStore %index %79
%82 = OpLoad %uint %index None
%83 = OpUGreaterThanEqual %bool %82 %uint_5
OpSelectionMerge %85 None
OpBranchConditional %83 %86 %85
%86 = OpLabel
OpReturn
%85 = OpLabel
%87 = OpLoad %uint %index None
%88 = OpAccessChain %_ptr_StorageBuffer_v2float %6 %uint_0 %uint_0 %87 %uint_0
%91 = OpLoad %v2float %88 None
OpStore %vPos %91
%93 = OpLoad %uint %index None
%94 = OpAccessChain %_ptr_StorageBuffer_v2float %6 %uint_0 %uint_0 %93 %uint_1
%96 = OpLoad %v2float %94 None
OpStore %vVel %96
OpStore %cMass %99
OpStore %cVel %99
OpStore %colVel %99
OpStore %cMassCount %int_0
OpStore %cVelCount %int_0
OpBranch %109
%109 = OpLabel
OpStore %i %uint_0
OpBranch %112
%112 = OpLabel
OpLoopMerge %113 %111 None
OpBranch %110
%110 = OpLabel
%115 = OpLoad %uint %i None
%116 = OpULessThan %bool %115 %uint_5
OpSelectionMerge %117 None
OpBranchConditional %116 %117 %118
%118 = OpLabel
OpBranch %113
%117 = OpLabel
%119 = OpLoad %uint %i None
%120 = OpLoad %uint %index None
%121 = OpIEqual %bool %119 %120
OpSelectionMerge %122 None
OpBranchConditional %121 %123 %122
%123 = OpLabel
OpBranch %111
%122 = OpLabel
%124 = OpLoad %uint %i None
%125 = OpAccessChain %_ptr_StorageBuffer_v2float %6 %uint_0 %uint_0 %124 %uint_0
%126 = OpLoad %v2float %125 None
%127 = OpVectorShuffle %v2float %126 %126 0 1
OpStore %pos_0 %127 None
%128 = OpLoad %uint %i None
%129 = OpAccessChain %_ptr_StorageBuffer_v2float %6 %uint_0 %uint_0 %128 %uint_1
%130 = OpLoad %v2float %129 None
%131 = OpVectorShuffle %v2float %130 %130 0 1
OpStore %vel %131 None
%132 = OpLoad %v2float %pos_0 None
%133 = OpLoad %v2float %vPos None
%134 = OpExtInst %float %40 Distance %132 %133
%135 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_1
%137 = OpLoad %float %135 None
%138 = OpFOrdLessThan %bool %134 %137
OpSelectionMerge %139 None
OpBranchConditional %138 %140 %139
%140 = OpLabel
%141 = OpLoad %v2float %cMass None
%142 = OpLoad %v2float %pos_0 None
%143 = OpFAdd %v2float %141 %142
OpStore %cMass %143 None
%144 = OpLoad %int %cMassCount None
%145 = OpIAdd %int %144 %int_1
OpStore %cMassCount %145 None
OpBranch %139
%139 = OpLabel
%147 = OpLoad %v2float %pos_0 None
%148 = OpLoad %v2float %vPos None
%149 = OpExtInst %float %40 Distance %147 %148
%150 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_2
%152 = OpLoad %float %150 None
%153 = OpFOrdLessThan %bool %149 %152
OpSelectionMerge %154 None
OpBranchConditional %153 %155 %154
%155 = OpLabel
%156 = OpLoad %v2float %colVel None
%157 = OpLoad %v2float %pos_0 None
%158 = OpLoad %v2float %vPos None
%159 = OpFSub %v2float %157 %158
%160 = OpFSub %v2float %156 %159
OpStore %colVel %160 None
OpBranch %154
%154 = OpLabel
%161 = OpLoad %v2float %pos_0 None
%162 = OpLoad %v2float %vPos None
%163 = OpExtInst %float %40 Distance %161 %162
%164 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_3
%166 = OpLoad %float %164 None
%167 = OpFOrdLessThan %bool %163 %166
OpSelectionMerge %168 None
OpBranchConditional %167 %169 %168
%169 = OpLabel
%170 = OpLoad %v2float %cVel None
%171 = OpLoad %v2float %vel None
%172 = OpFAdd %v2float %170 %171
OpStore %cVel %172 None
%173 = OpLoad %int %cVelCount None
%174 = OpIAdd %int %173 %int_1
OpStore %cVelCount %174 None
OpBranch %168
%168 = OpLabel
OpBranch %111
%111 = OpLabel
%175 = OpLoad %uint %i None
%176 = OpIAdd %uint %175 %uint_1
OpStore %i %176 None
OpBranch %112
%113 = OpLabel
%177 = OpLoad %int %cMassCount None
%178 = OpSGreaterThan %bool %177 %int_0
OpSelectionMerge %179 None
OpBranchConditional %178 %180 %179
%180 = OpLabel
%181 = OpLoad %v2float %cMass None
%182 = OpLoad %int %cMassCount None
%183 = OpConvertSToF %float %182
%184 = OpLoad %int %cMassCount None
%185 = OpConvertSToF %float %184
%186 = OpCompositeConstruct %v2float %183 %185
%187 = OpFDiv %v2float %181 %186
%188 = OpLoad %v2float %vPos None
%189 = OpFSub %v2float %187 %188
OpStore %cMass %189 None
OpBranch %179
%179 = OpLabel
%190 = OpLoad %int %cVelCount None
%191 = OpSGreaterThan %bool %190 %int_0
OpSelectionMerge %192 None
OpBranchConditional %191 %193 %192
%193 = OpLabel
%194 = OpLoad %v2float %cVel None
%195 = OpLoad %int %cVelCount None
%196 = OpConvertSToF %float %195
%197 = OpLoad %int %cVelCount None
%198 = OpConvertSToF %float %197
%199 = OpCompositeConstruct %v2float %196 %198
%200 = OpFDiv %v2float %194 %199
OpStore %cVel %200 None
OpBranch %192
%192 = OpLabel
%201 = OpLoad %v2float %vVel None
%202 = OpLoad %v2float %cMass None
%203 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_4
%205 = OpLoad %float %203 None
%206 = OpVectorTimesScalar %v2float %202 %205
%207 = OpFAdd %v2float %201 %206
%208 = OpLoad %v2float %colVel None
%209 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_5
%210 = OpLoad %float %209 None
%211 = OpVectorTimesScalar %v2float %208 %210
%212 = OpFAdd %v2float %207 %211
%213 = OpLoad %v2float %cVel None
%214 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_6
%216 = OpLoad %float %214 None
%217 = OpVectorTimesScalar %v2float %213 %216
%218 = OpFAdd %v2float %212 %217
OpStore %vVel %218 None
%219 = OpLoad %v2float %vVel None
%220 = OpExtInst %v2float %40 Normalize %219
%221 = OpLoad %v2float %vVel None
%222 = OpExtInst %float %40 Length %221
%223 = OpExtInst %float %40 NClamp %222 %float_0 %float_0_100000001
%225 = OpVectorTimesScalar %v2float %220 %223
OpStore %vVel %225 None
%226 = OpLoad %v2float %vPos None
%227 = OpLoad %v2float %vVel None
%228 = OpAccessChain %_ptr_Uniform_float %1 %uint_0 %uint_0
%229 = OpLoad %float %228 None
%230 = OpVectorTimesScalar %v2float %227 %229
%231 = OpFAdd %v2float %226 %230
OpStore %vPos %231 None
%232 = OpAccessChain %_ptr_Function_float %vPos %uint_0
%233 = OpLoad %float %232 None
%234 = OpFOrdLessThan %bool %233 %float_n1
OpSelectionMerge %236 None
OpBranchConditional %234 %237 %236
%237 = OpLabel
%238 = OpAccessChain %_ptr_Function_float %vPos %uint_0
OpStore %238 %float_1 None
OpBranch %236
%236 = OpLabel
%239 = OpAccessChain %_ptr_Function_float %vPos %uint_0
%240 = OpLoad %float %239 None
%241 = OpFOrdGreaterThan %bool %240 %float_1
OpSelectionMerge %242 None
OpBranchConditional %241 %243 %242
%243 = OpLabel
%244 = OpAccessChain %_ptr_Function_float %vPos %uint_0
OpStore %244 %float_n1 None
OpBranch %242
%242 = OpLabel
%245 = OpAccessChain %_ptr_Function_float %vPos %uint_1
%246 = OpLoad %float %245 None
%247 = OpFOrdLessThan %bool %246 %float_n1
OpSelectionMerge %248 None
OpBranchConditional %247 %249 %248
%249 = OpLabel
%250 = OpAccessChain %_ptr_Function_float %vPos %uint_1
OpStore %250 %float_1 None
OpBranch %248
%248 = OpLabel
%251 = OpAccessChain %_ptr_Function_float %vPos %uint_1
%252 = OpLoad %float %251 None
%253 = OpFOrdGreaterThan %bool %252 %float_1
OpSelectionMerge %254 None
OpBranchConditional %253 %255 %254
%255 = OpLabel
%256 = OpAccessChain %_ptr_Function_float %vPos %uint_1
OpStore %256 %float_n1 None
OpBranch %254
%254 = OpLabel
%257 = OpLoad %uint %index None
%258 = OpAccessChain %_ptr_StorageBuffer_v2float %15 %uint_0 %uint_0 %257 %uint_0
%259 = OpLoad %v2float %vPos None
OpStore %258 %259 None
%260 = OpLoad %uint %index None
%261 = OpAccessChain %_ptr_StorageBuffer_v2float %15 %uint_0 %uint_0 %260 %uint_1
%262 = OpLoad %v2float %vVel None
OpStore %261 %262 None
OpReturn
OpFunctionEnd
%vert_main = OpFunction %void None %264
%265 = OpLabel
%266 = OpLoad %v2float %vert_main_loc0_Input None
%267 = OpLoad %v2float %vert_main_loc1_Input None
%268 = OpLoad %v2float %vert_main_loc2_Input None
%269 = OpFunctionCall %v4float %vert_main_inner %266 %267 %268
OpStore %vert_main_position_Output %269 None
OpStore %vert_main___point_size_Output %float_1 None
OpReturn
OpFunctionEnd
%frag_main = OpFunction %void None %264
%271 = OpLabel
%272 = OpFunctionCall %v4float %frag_main_inner
OpStore %frag_main_loc0_Output %272 None
OpReturn
OpFunctionEnd
%comp_main = OpFunction %void None %264
%274 = OpLabel
%275 = OpLoad %v3uint %comp_main_global_invocation_id_Input None
%276 = OpFunctionCall %void %comp_main_inner %275
OpReturn
OpFunctionEnd