blob: 957db0a5a5cf9bb4e3307570f76f0610ef2c9c10 [file] [log] [blame]
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 1
; Bound: 265
; Schema: 0
OpCapability Shader
OpCapability Sampled1D
OpCapability Float16
OpCapability UniformAndStorageBuffer16BitAccess
OpCapability StorageBuffer16BitAccess
OpCapability ImageQuery
%71 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %rgba32uintin "rgba32uintin"
OpEntryPoint Vertex %vertex_main "vertex_main" %vertex_main_position_Output %vertex_main___point_size_Output
OpEntryPoint Vertex %vs_main "vs_main" %vs_main_loc0_Input %vs_main_loc1_Input %vs_main_loc2_Input %vs_main_position_Output %vs_main_loc0_Output %vs_main_loc1_Output %vs_main___point_size_Output
OpEntryPoint GLCompute %simulate "simulate" %simulate_global_invocation_id_Input
OpEntryPoint GLCompute %export_level "export_level" %export_level_global_invocation_id_Input
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %rgba32uintin LocalSize 1 1 1
OpExecutionMode %simulate LocalSize 64 1 1
OpExecutionMode %export_level LocalSize 64 1 1
OpName %rand_seed "rand_seed"
OpMemberName %RenderParams 0 "modelViewProjectionMatrix"
OpMemberName %RenderParams 1 "right"
OpMemberName %RenderParams 2 "up"
OpName %RenderParams "RenderParams"
OpMemberName %render_params_block 0 "inner"
OpName %render_params_block "render_params_block"
OpMemberName %SimulationParams 0 "deltaTime"
OpMemberName %SimulationParams 1 "seed"
OpName %SimulationParams "SimulationParams"
OpMemberName %sim_params_block 0 "inner"
OpName %sim_params_block "sim_params_block"
OpMemberName %Particle 0 "position"
OpMemberName %Particle 1 "lifetime"
OpMemberName %Particle 2 "color"
OpMemberName %Particle 3 "velocity"
OpName %Particle "Particle"
OpMemberName %Particles 0 "particles"
OpName %Particles "Particles"
OpName %data "data"
OpName %texture "texture"
OpMemberName %UBO 0 "width"
OpName %UBO "UBO"
OpMemberName %ubo_block 0 "inner"
OpName %ubo_block "ubo_block"
OpMemberName %Buffer 0 "weights"
OpName %Buffer "Buffer"
OpName %buf_in "buf_in"
OpName %buf_out "buf_out"
OpName %tex_in "tex_in"
OpName %tex_out "tex_out"
OpName %vertex_main_position_Output "vertex_main_position_Output"
OpName %vertex_main___point_size_Output "vertex_main___point_size_Output"
OpName %vs_main_loc0_Input "vs_main_loc0_Input"
OpName %vs_main_loc1_Input "vs_main_loc1_Input"
OpName %vs_main_loc2_Input "vs_main_loc2_Input"
OpName %vs_main_position_Output "vs_main_position_Output"
OpName %vs_main_loc0_Output "vs_main_loc0_Output"
OpName %vs_main_loc1_Output "vs_main_loc1_Output"
OpName %vs_main___point_size_Output "vs_main___point_size_Output"
OpName %simulate_global_invocation_id_Input "simulate_global_invocation_id_Input"
OpName %export_level_global_invocation_id_Input "export_level_global_invocation_id_Input"
OpName %asinh_468a48 "asinh_468a48"
OpName %arg_0 "arg_0"
OpName %res "res"
OpName %vertex_main_inner "vertex_main_inner"
OpName %fragment_main "fragment_main"
OpName %rgba32uintin "rgba32uintin"
OpName %vs_main_inner "vs_main_inner"
OpMemberName %VertexOutput 0 "position"
OpMemberName %VertexOutput 1 "color"
OpMemberName %VertexOutput 2 "quad_pos"
OpName %VertexOutput "VertexOutput"
OpMemberName %VertexInput 0 "position"
OpMemberName %VertexInput 1 "color"
OpMemberName %VertexInput 2 "quad_pos"
OpName %VertexInput "VertexInput"
OpName %in "in"
OpName %quad_pos "quad_pos"
OpName %position "position"
OpName %out "out"
OpName %simulate_inner "simulate_inner"
OpName %GlobalInvocationID "GlobalInvocationID"
OpName %idx "idx"
OpName %particle "particle"
OpName %export_level_inner "export_level_inner"
OpName %coord "coord"
OpName %dst_offset "dst_offset"
OpName %src_offset "src_offset"
OpName %a "a"
OpName %b "b"
OpName %c "c"
OpName %d "d"
OpName %sum "sum"
OpName %probabilities "probabilities"
OpName %tint_store_and_preserve_padding "tint_store_and_preserve_padding"
OpName %target_indices "target_indices"
OpName %value_param "value_param"
OpName %vertex_main "vertex_main"
OpName %vs_main "vs_main"
OpName %simulate "simulate"
OpName %export_level "export_level"
OpMemberDecorate %RenderParams 0 Offset 0
OpMemberDecorate %RenderParams 0 ColMajor
OpMemberDecorate %RenderParams 0 MatrixStride 16
OpMemberDecorate %RenderParams 1 Offset 64
OpMemberDecorate %RenderParams 2 Offset 80
OpMemberDecorate %render_params_block 0 Offset 0
OpDecorate %render_params_block Block
OpDecorate %6 DescriptorSet 0
OpDecorate %6 Binding 5
OpDecorate %6 NonWritable
OpMemberDecorate %SimulationParams 0 Offset 0
OpMemberDecorate %SimulationParams 1 Offset 16
OpMemberDecorate %sim_params_block 0 Offset 0
OpDecorate %sim_params_block Block
OpDecorate %13 DescriptorSet 0
OpDecorate %13 Binding 0
OpDecorate %13 NonWritable
OpMemberDecorate %Particle 0 Offset 0
OpMemberDecorate %Particle 1 Offset 12
OpMemberDecorate %Particle 2 Offset 16
OpMemberDecorate %Particle 3 Offset 32
OpDecorate %_runtimearr_Particle ArrayStride 48
OpMemberDecorate %Particles 0 Offset 0
OpDecorate %Particles Block
OpDecorate %data DescriptorSet 0
OpDecorate %data Binding 1
OpDecorate %data Coherent
OpDecorate %texture DescriptorSet 0
OpDecorate %texture Binding 2
OpMemberDecorate %UBO 0 Offset 0
OpMemberDecorate %ubo_block 0 Offset 0
OpDecorate %ubo_block Block
OpDecorate %25 DescriptorSet 0
OpDecorate %25 Binding 3
OpDecorate %25 NonWritable
OpDecorate %_runtimearr_float ArrayStride 4
OpMemberDecorate %Buffer 0 Offset 0
OpDecorate %Buffer Block
OpDecorate %buf_in DescriptorSet 0
OpDecorate %buf_in Binding 4
OpDecorate %buf_in NonWritable
OpDecorate %buf_out DescriptorSet 0
OpDecorate %buf_out Binding 5
OpDecorate %buf_out Coherent
OpDecorate %tex_in DescriptorSet 0
OpDecorate %tex_in Binding 6
OpDecorate %tex_out DescriptorSet 0
OpDecorate %tex_out Binding 7
OpDecorate %tex_out NonReadable
OpDecorate %vertex_main_position_Output BuiltIn Position
OpDecorate %vertex_main___point_size_Output BuiltIn PointSize
OpDecorate %vs_main_loc0_Input Location 0
OpDecorate %vs_main_loc1_Input Location 1
OpDecorate %vs_main_loc2_Input Location 2
OpDecorate %vs_main_position_Output BuiltIn Position
OpDecorate %vs_main_loc0_Output Location 0
OpDecorate %vs_main_loc1_Output Location 1
OpDecorate %vs_main___point_size_Output BuiltIn PointSize
OpDecorate %simulate_global_invocation_id_Input BuiltIn GlobalInvocationId
OpDecorate %export_level_global_invocation_id_Input BuiltIn GlobalInvocationId
OpMemberDecorate %VertexOutput 0 Offset 0
OpMemberDecorate %VertexOutput 1 Offset 16
OpMemberDecorate %VertexOutput 2 Offset 32
OpMemberDecorate %VertexInput 0 Offset 0
OpMemberDecorate %VertexInput 1 Offset 16
OpMemberDecorate %VertexInput 2 Offset 32
OpDecorate %_arr_uint_uint_1 ArrayStride 4
%float = OpTypeFloat 32
%v2float = OpTypeVector %float 2
%_ptr_Private_v2float = OpTypePointer Private %v2float
%5 = OpConstantNull %v2float
%rand_seed = OpVariable %_ptr_Private_v2float Private %5
%v4float = OpTypeVector %float 4
%mat4v4float = OpTypeMatrix %v4float 4
%v3float = OpTypeVector %float 3
%RenderParams = OpTypeStruct %mat4v4float %v3float %v3float
%render_params_block = OpTypeStruct %RenderParams
%_ptr_Uniform_render_params_block = OpTypePointer Uniform %render_params_block
%6 = OpVariable %_ptr_Uniform_render_params_block Uniform
%SimulationParams = OpTypeStruct %float %v4float
%sim_params_block = OpTypeStruct %SimulationParams
%_ptr_Uniform_sim_params_block = OpTypePointer Uniform %sim_params_block
%13 = OpVariable %_ptr_Uniform_sim_params_block Uniform
%Particle = OpTypeStruct %v3float %float %v4float %v2float
%_runtimearr_Particle = OpTypeRuntimeArray %Particle
%Particles = OpTypeStruct %_runtimearr_Particle
%_ptr_StorageBuffer_Particles = OpTypePointer StorageBuffer %Particles
%data = OpVariable %_ptr_StorageBuffer_Particles StorageBuffer
%24 = OpTypeImage %float 1D 0 0 0 1 Unknown
%_ptr_UniformConstant_24 = OpTypePointer UniformConstant %24
%texture = OpVariable %_ptr_UniformConstant_24 UniformConstant
%uint = OpTypeInt 32 0
%UBO = OpTypeStruct %uint
%ubo_block = OpTypeStruct %UBO
%_ptr_Uniform_ubo_block = OpTypePointer Uniform %ubo_block
%25 = OpVariable %_ptr_Uniform_ubo_block Uniform
%_runtimearr_float = OpTypeRuntimeArray %float
%Buffer = OpTypeStruct %_runtimearr_float
%_ptr_StorageBuffer_Buffer = OpTypePointer StorageBuffer %Buffer
%buf_in = OpVariable %_ptr_StorageBuffer_Buffer StorageBuffer
%_ptr_StorageBuffer_Buffer_0 = OpTypePointer StorageBuffer %Buffer
%buf_out = OpVariable %_ptr_StorageBuffer_Buffer_0 StorageBuffer
%38 = OpTypeImage %float 2D 0 0 0 1 Unknown
%_ptr_UniformConstant_38 = OpTypePointer UniformConstant %38
%tex_in = OpVariable %_ptr_UniformConstant_38 UniformConstant
%41 = OpTypeImage %float 2D 0 0 0 2 Rgba8
%_ptr_UniformConstant_41 = OpTypePointer UniformConstant %41
%tex_out = OpVariable %_ptr_UniformConstant_41 UniformConstant
%_ptr_Output_v4float = OpTypePointer Output %v4float
%vertex_main_position_Output = OpVariable %_ptr_Output_v4float Output
%_ptr_Output_float = OpTypePointer Output %float
%vertex_main___point_size_Output = OpVariable %_ptr_Output_float Output
%_ptr_Input_v3float = OpTypePointer Input %v3float
%vs_main_loc0_Input = OpVariable %_ptr_Input_v3float Input
%_ptr_Input_v4float = OpTypePointer Input %v4float
%vs_main_loc1_Input = OpVariable %_ptr_Input_v4float Input
%_ptr_Input_v2float = OpTypePointer Input %v2float
%vs_main_loc2_Input = OpVariable %_ptr_Input_v2float Input
%vs_main_position_Output = OpVariable %_ptr_Output_v4float Output
%vs_main_loc0_Output = OpVariable %_ptr_Output_v4float Output
%_ptr_Output_v2float = OpTypePointer Output %v2float
%vs_main_loc1_Output = OpVariable %_ptr_Output_v2float Output
%vs_main___point_size_Output = OpVariable %_ptr_Output_float Output
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%simulate_global_invocation_id_Input = OpVariable %_ptr_Input_v3uint Input
%export_level_global_invocation_id_Input = OpVariable %_ptr_Input_v3uint Input
%void = OpTypeVoid
%63 = OpTypeFunction %void
%half = OpTypeFloat 16
%_ptr_Function_half = OpTypePointer Function %half
%half_0x0p_0 = OpConstant %half 0x0p+0
%74 = OpTypeFunction %v4float
%77 = OpConstantNull %v4float
%VertexOutput = OpTypeStruct %v4float %v4float %v2float
%VertexInput = OpTypeStruct %v3float %v4float %v2float
%88 = OpTypeFunction %VertexOutput %VertexInput
%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
%uint_0 = OpConstant %uint 0
%uint_1 = OpConstant %uint 1
%uint_2 = OpConstant %uint 2
%mat2v3float = OpTypeMatrix %v3float 2
%_ptr_Function_v3float = OpTypePointer Function %v3float
%float_0_00999999978 = OpConstant %float 0.00999999978
%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
%113 = OpConstantNull %VertexOutput
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Uniform_mat4v4float = OpTypePointer Uniform %mat4v4float
%float_1 = OpConstant %float 1
%_ptr_Function_v2float = OpTypePointer Function %v2float
%131 = OpTypeFunction %void %v3uint
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%v2uint = OpTypeVector %uint 2
%_ptr_StorageBuffer_Particle = OpTypePointer StorageBuffer %Particle
%_ptr_Function_Particle = OpTypePointer Function %Particle
%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
%bool = OpTypeBool
%v2bool = OpTypeVector %bool 2
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
%uint_31 = OpConstant %uint 31
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%208 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%_ptr_StorageBuffer_float_0 = OpTypePointer StorageBuffer %float
%float_4 = OpConstant %float 4
%float_0 = OpConstant %float 0
%int = OpTypeInt 32 1
%v2int = OpTypeVector %int 2
%229 = OpTypeFunction %void %_arr_uint_uint_1 %Particle
%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float
%uint_3 = OpConstant %uint 3
%asinh_468a48 = OpFunction %void None %63
%64 = OpLabel
%arg_0 = OpVariable %_ptr_Function_half Function
%res = OpVariable %_ptr_Function_half Function
OpStore %arg_0 %half_0x0p_0
%69 = OpLoad %half %arg_0 None
%70 = OpExtInst %half %71 Asinh %69
OpStore %res %70
OpReturn
OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %74
%75 = OpLabel
%76 = OpFunctionCall %void %asinh_468a48
OpReturnValue %77
OpFunctionEnd
%fragment_main = OpFunction %void None %63
%79 = OpLabel
%80 = OpFunctionCall %void %asinh_468a48
OpReturn
OpFunctionEnd
%rgba32uintin = OpFunction %void None %63
%82 = OpLabel
%83 = OpFunctionCall %void %asinh_468a48
OpReturn
OpFunctionEnd
%vs_main_inner = OpFunction %VertexOutput None %88
%in = OpFunctionParameter %VertexInput
%89 = OpLabel
%quad_pos = OpVariable %_ptr_Function_v3float Function
%position = OpVariable %_ptr_Function_v3float Function
%out = OpVariable %_ptr_Function_VertexOutput Function %113
%90 = OpAccessChain %_ptr_Uniform_v3float %6 %uint_0 %uint_1
%94 = OpLoad %v3float %90 None
%95 = OpAccessChain %_ptr_Uniform_v3float %6 %uint_0 %uint_2
%97 = OpLoad %v3float %95 None
%99 = OpCompositeConstruct %mat2v3float %94 %97
%100 = OpCompositeExtract %v2float %in 2
%101 = OpMatrixTimesVector %v3float %99 %100
OpStore %quad_pos %101
%104 = OpCompositeExtract %v3float %in 0
%105 = OpLoad %v3float %quad_pos None
%106 = OpCompositeConstruct %v3float %float_0_00999999978 %float_0_00999999978 %float_0_00999999978
%108 = OpFAdd %v3float %105 %106
%109 = OpFSub %v3float %104 %108
OpStore %position %109
%114 = OpAccessChain %_ptr_Function_v4float %out %uint_0
%116 = OpAccessChain %_ptr_Uniform_mat4v4float %6 %uint_0 %uint_0
%118 = OpLoad %mat4v4float %116 None
%119 = OpLoad %v3float %position None
%120 = OpCompositeConstruct %v4float %119 %float_1
%122 = OpMatrixTimesVector %v4float %118 %120
OpStore %114 %122 None
%123 = OpAccessChain %_ptr_Function_v4float %out %uint_1
%124 = OpCompositeExtract %v4float %in 1
OpStore %123 %124 None
%125 = OpAccessChain %_ptr_Function_v2float %out %uint_2
%127 = OpCompositeExtract %v2float %in 2
OpStore %125 %127 None
%128 = OpLoad %VertexOutput %out None
OpReturnValue %128
OpFunctionEnd
%simulate_inner = OpFunction %void None %131
%GlobalInvocationID = OpFunctionParameter %v3uint
%132 = OpLabel
%particle = OpVariable %_ptr_Function_Particle Function
%133 = OpAccessChain %_ptr_Uniform_v4float %13 %uint_0 %uint_1
%135 = OpLoad %v4float %133 None
%136 = OpVectorShuffle %v2float %135 %135 0 1
%137 = OpVectorShuffle %v2uint %GlobalInvocationID %GlobalInvocationID 0 1
%139 = OpConvertUToF %v2float %137
%140 = OpFMul %v2float %136 %139
%141 = OpAccessChain %_ptr_Uniform_v4float %13 %uint_0 %uint_1
%142 = OpLoad %v4float %141 None
%143 = OpVectorShuffle %v2float %142 %142 2 3
%144 = OpFMul %v2float %140 %143
OpStore %rand_seed %144 None
%idx = OpCompositeExtract %uint %GlobalInvocationID 0
%146 = OpAccessChain %_ptr_StorageBuffer_Particle %data %uint_0 %idx
%148 = OpLoad %Particle %146 None
OpStore %particle %148
%151 = OpLoad %Particle %particle None
%153 = OpCompositeConstruct %_arr_uint_uint_1 %idx
%154 = OpFunctionCall %void %tint_store_and_preserve_padding %153 %151
OpReturn
OpFunctionEnd
%export_level_inner = OpFunction %void None %131
%coord = OpFunctionParameter %v3uint
%158 = OpLabel
%159 = OpVectorShuffle %v2uint %coord %coord 0 1
%160 = OpLoad %41 %tex_out None
%161 = OpImageQuerySize %v2uint %160
%162 = OpULessThan %v2bool %159 %161
%165 = OpAll %bool %162
OpSelectionMerge %166 None
OpBranchConditional %165 %167 %166
%167 = OpLabel
%168 = OpCompositeExtract %uint %coord 0
%169 = OpCompositeExtract %uint %coord 1
%170 = OpAccessChain %_ptr_Uniform_uint %25 %uint_0 %uint_0
%172 = OpLoad %uint %170 None
%173 = OpIMul %uint %169 %172
%174 = OpBitwiseAnd %uint %173 %uint_31
%dst_offset = OpShiftLeftLogical %uint %168 %174
%177 = OpCompositeExtract %uint %coord 0
%178 = OpISub %uint %177 %uint_2
%179 = OpCompositeExtract %uint %coord 1
%180 = OpBitwiseAnd %uint %uint_2 %uint_31
%181 = OpShiftRightLogical %uint %179 %180
%182 = OpAccessChain %_ptr_Uniform_uint %25 %uint_0 %uint_0
%183 = OpLoad %uint %182 None
%184 = OpIMul %uint %181 %183
%src_offset = OpIAdd %uint %178 %184
%186 = OpBitwiseAnd %uint %uint_0 %uint_31
%187 = OpShiftLeftLogical %uint %src_offset %186
%188 = OpAccessChain %_ptr_StorageBuffer_float %buf_in %uint_0 %187
%a = OpLoad %float %188 None
%191 = OpIAdd %uint %src_offset %uint_1
%192 = OpAccessChain %_ptr_StorageBuffer_float %buf_in %uint_0 %191
%b = OpLoad %float %192 None
%194 = OpIAdd %uint %src_offset %uint_1
%195 = OpAccessChain %_ptr_Uniform_uint %25 %uint_0 %uint_0
%196 = OpLoad %uint %195 None
%197 = OpIAdd %uint %194 %196
%198 = OpAccessChain %_ptr_StorageBuffer_float %buf_in %uint_0 %197
%c = OpLoad %float %198 None
%200 = OpIAdd %uint %src_offset %uint_1
%201 = OpAccessChain %_ptr_Uniform_uint %25 %uint_0 %uint_0
%202 = OpLoad %uint %201 None
%203 = OpIAdd %uint %200 %202
%204 = OpAccessChain %_ptr_StorageBuffer_float %buf_in %uint_0 %203
%d = OpLoad %float %204 None
%206 = OpCompositeConstruct %v4float %a %b %c %d
%sum = OpDot %float %206 %208
%209 = OpAccessChain %_ptr_StorageBuffer_float_0 %buf_out %uint_0 %dst_offset
%211 = OpFRem %float %sum %float_4
OpStore %209 %211 None
%213 = OpFMul %float %a %b
%214 = OpFDiv %float %a %b
%215 = OpFAdd %float %214 %c
%216 = OpCompositeConstruct %v4float %a %213 %215 %sum
%217 = OpExtInst %float %71 FMax %sum %float_0
%219 = OpCompositeConstruct %v4float %217 %217 %217 %217
%probabilities = OpFAdd %v4float %216 %219
%221 = OpLoad %41 %tex_out None
%222 = OpVectorShuffle %v2uint %coord %coord 0 1
%225 = OpBitcast %v2int %222
OpImageWrite %221 %225 %probabilities None
OpBranch %166
%166 = OpLabel
OpReturn
OpFunctionEnd
%tint_store_and_preserve_padding = OpFunction %void None %229
%target_indices = OpFunctionParameter %_arr_uint_uint_1
%value_param = OpFunctionParameter %Particle
%230 = OpLabel
%231 = OpCompositeExtract %uint %target_indices 0
%232 = OpAccessChain %_ptr_StorageBuffer_v3float %data %uint_0 %231 %uint_0
%234 = OpCompositeExtract %v3float %value_param 0
OpStore %232 %234 None
%235 = OpAccessChain %_ptr_StorageBuffer_float_0 %data %uint_0 %231 %uint_1
%236 = OpCompositeExtract %float %value_param 1
OpStore %235 %236 None
%237 = OpAccessChain %_ptr_StorageBuffer_v4float %data %uint_0 %231 %uint_2
%239 = OpCompositeExtract %v4float %value_param 2
OpStore %237 %239 None
%240 = OpAccessChain %_ptr_StorageBuffer_v2float %data %uint_0 %231 %uint_3
%243 = OpCompositeExtract %v2float %value_param 3
OpStore %240 %243 None
OpReturn
OpFunctionEnd
%vertex_main = OpFunction %void None %63
%245 = OpLabel
%246 = OpFunctionCall %v4float %vertex_main_inner
OpStore %vertex_main_position_Output %246 None
OpStore %vertex_main___point_size_Output %float_1 None
OpReturn
OpFunctionEnd
%vs_main = OpFunction %void None %63
%248 = OpLabel
%249 = OpLoad %v3float %vs_main_loc0_Input None
%250 = OpLoad %v4float %vs_main_loc1_Input None
%251 = OpLoad %v2float %vs_main_loc2_Input None
%252 = OpCompositeConstruct %VertexInput %249 %250 %251
%253 = OpFunctionCall %VertexOutput %vs_main_inner %252
%254 = OpCompositeExtract %v4float %253 0
OpStore %vs_main_position_Output %254 None
%255 = OpCompositeExtract %v4float %253 1
OpStore %vs_main_loc0_Output %255 None
%256 = OpCompositeExtract %v2float %253 2
OpStore %vs_main_loc1_Output %256 None
OpStore %vs_main___point_size_Output %float_1 None
OpReturn
OpFunctionEnd
%simulate = OpFunction %void None %63
%258 = OpLabel
%259 = OpLoad %v3uint %simulate_global_invocation_id_Input None
%260 = OpFunctionCall %void %simulate_inner %259
OpReturn
OpFunctionEnd
%export_level = OpFunction %void None %63
%262 = OpLabel
%263 = OpLoad %v3uint %export_level_global_invocation_id_Input None
%264 = OpFunctionCall %void %export_level_inner %263
OpReturn
OpFunctionEnd