| ; SPIR-V |
| ; Version: 1.3 |
| ; Generator: Google Tint Compiler; 0 |
| ; Bound: 274 |
| ; Schema: 0 |
| OpCapability Shader |
| OpCapability Float16 |
| OpCapability UniformAndStorageBuffer16BitAccess |
| OpCapability StorageBuffer16BitAccess |
| OpCapability StorageInputOutput16 |
| OpCapability Sampled1D |
| OpCapability ImageQuery |
| %71 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Vertex %vertex_main "vertex_main" %value_1 %vertex_point_size |
| OpEntryPoint Fragment %fragment_main "fragment_main" |
| OpEntryPoint GLCompute %rgba32uintin "rgba32uintin" |
| OpEntryPoint Vertex %vs_main "vs_main" %position_1 %color_1 %quad_pos_1 %position_2 %color_2 %quad_pos_2 %vertex_point_size_1 |
| OpEntryPoint GLCompute %simulate "simulate" %GlobalInvocationID_1 |
| OpEntryPoint GLCompute %export_level "export_level" %coord_1 |
| OpExecutionMode %fragment_main OriginUpperLeft |
| OpExecutionMode %rgba32uintin LocalSize 1 1 1 |
| OpExecutionMode %simulate LocalSize 64 1 1 |
| OpExecutionMode %export_level LocalSize 64 1 1 |
| OpName %value_1 "value_1" |
| OpName %vertex_point_size "vertex_point_size" |
| OpName %position_1 "position_1" |
| OpName %color_1 "color_1" |
| OpName %quad_pos_1 "quad_pos_1" |
| OpName %position_2 "position_2" |
| OpName %color_2 "color_2" |
| OpName %quad_pos_2 "quad_pos_2" |
| OpName %vertex_point_size_1 "vertex_point_size_1" |
| OpName %GlobalInvocationID_1 "GlobalInvocationID_1" |
| OpName %coord_1 "coord_1" |
| OpName %rand_seed "rand_seed" |
| OpName %render_params_block "render_params_block" |
| OpMemberName %render_params_block 0 "inner" |
| OpName %RenderParams "RenderParams" |
| OpMemberName %RenderParams 0 "modelViewProjectionMatrix" |
| OpMemberName %RenderParams 1 "right" |
| OpMemberName %RenderParams 2 "up" |
| OpName %render_params "render_params" |
| OpName %sim_params_block "sim_params_block" |
| OpMemberName %sim_params_block 0 "inner" |
| OpName %SimulationParams "SimulationParams" |
| OpMemberName %SimulationParams 0 "deltaTime" |
| OpMemberName %SimulationParams 1 "seed" |
| OpName %sim_params "sim_params" |
| OpName %Particles "Particles" |
| OpMemberName %Particles 0 "particles" |
| OpName %Particle "Particle" |
| OpMemberName %Particle 0 "position" |
| OpMemberName %Particle 1 "lifetime" |
| OpMemberName %Particle 2 "color" |
| OpMemberName %Particle 3 "velocity" |
| OpName %data "data" |
| OpName %texture "texture" |
| OpName %ubo_block "ubo_block" |
| OpMemberName %ubo_block 0 "inner" |
| OpName %UBO "UBO" |
| OpMemberName %UBO 0 "width" |
| OpName %ubo "ubo" |
| OpName %Buffer "Buffer" |
| OpMemberName %Buffer 0 "weights" |
| OpName %buf_in "buf_in" |
| OpName %buf_out "buf_out" |
| OpName %tex_in "tex_in" |
| OpName %tex_out "tex_out" |
| OpName %asinh_468a48 "asinh_468a48" |
| OpName %arg_0 "arg_0" |
| OpName %res "res" |
| OpName %vertex_main_inner "vertex_main_inner" |
| OpName %vertex_main "vertex_main" |
| OpName %fragment_main "fragment_main" |
| OpName %rgba32uintin "rgba32uintin" |
| OpName %VertexOutput "VertexOutput" |
| OpMemberName %VertexOutput 0 "position" |
| OpMemberName %VertexOutput 1 "color" |
| OpMemberName %VertexOutput 2 "quad_pos" |
| OpName %VertexInput "VertexInput" |
| OpMemberName %VertexInput 0 "position" |
| OpMemberName %VertexInput 1 "color" |
| OpMemberName %VertexInput 2 "quad_pos" |
| OpName %vs_main_inner "vs_main_inner" |
| OpName %in "in" |
| OpName %quad_pos "quad_pos" |
| OpName %position "position" |
| OpName %out "out" |
| OpName %vs_main "vs_main" |
| OpName %assign_and_preserve_padding_data_particles_X "assign_and_preserve_padding_data_particles_X" |
| OpName %dest "dest" |
| OpName %value "value" |
| OpName %simulate_inner "simulate_inner" |
| OpName %GlobalInvocationID "GlobalInvocationID" |
| OpName %particle "particle" |
| OpName %simulate "simulate" |
| OpName %export_level_inner "export_level_inner" |
| OpName %coord "coord" |
| OpName %export_level "export_level" |
| OpDecorate %value_1 BuiltIn Position |
| OpDecorate %vertex_point_size BuiltIn PointSize |
| OpDecorate %position_1 Location 0 |
| OpDecorate %color_1 Location 1 |
| OpDecorate %quad_pos_1 Location 2 |
| OpDecorate %position_2 BuiltIn Position |
| OpDecorate %color_2 Location 0 |
| OpDecorate %quad_pos_2 Location 1 |
| OpDecorate %vertex_point_size_1 BuiltIn PointSize |
| OpDecorate %GlobalInvocationID_1 BuiltIn GlobalInvocationId |
| OpDecorate %coord_1 BuiltIn GlobalInvocationId |
| OpDecorate %render_params_block Block |
| OpMemberDecorate %render_params_block 0 Offset 0 |
| OpMemberDecorate %RenderParams 0 Offset 0 |
| OpMemberDecorate %RenderParams 0 ColMajor |
| OpMemberDecorate %RenderParams 0 MatrixStride 16 |
| OpMemberDecorate %RenderParams 1 Offset 64 |
| OpMemberDecorate %RenderParams 2 Offset 80 |
| OpDecorate %render_params NonWritable |
| OpDecorate %render_params Binding 5 |
| OpDecorate %render_params DescriptorSet 0 |
| OpDecorate %sim_params_block Block |
| OpMemberDecorate %sim_params_block 0 Offset 0 |
| OpMemberDecorate %SimulationParams 0 Offset 0 |
| OpMemberDecorate %SimulationParams 1 Offset 16 |
| OpDecorate %sim_params NonWritable |
| OpDecorate %sim_params Binding 0 |
| OpDecorate %sim_params DescriptorSet 0 |
| OpDecorate %Particles Block |
| OpMemberDecorate %Particles 0 Offset 0 |
| 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 |
| OpDecorate %data Binding 1 |
| OpDecorate %data DescriptorSet 0 |
| OpDecorate %texture Binding 2 |
| OpDecorate %texture DescriptorSet 0 |
| OpDecorate %ubo_block Block |
| OpMemberDecorate %ubo_block 0 Offset 0 |
| OpMemberDecorate %UBO 0 Offset 0 |
| OpDecorate %ubo NonWritable |
| OpDecorate %ubo Binding 3 |
| OpDecorate %ubo DescriptorSet 0 |
| OpDecorate %Buffer Block |
| OpMemberDecorate %Buffer 0 Offset 0 |
| OpDecorate %_runtimearr_float ArrayStride 4 |
| OpDecorate %buf_in NonWritable |
| OpDecorate %buf_in Binding 4 |
| OpDecorate %buf_in DescriptorSet 0 |
| OpDecorate %buf_out Binding 5 |
| OpDecorate %buf_out DescriptorSet 0 |
| OpDecorate %tex_in Binding 6 |
| OpDecorate %tex_in DescriptorSet 0 |
| OpDecorate %tex_out NonReadable |
| OpDecorate %tex_out Binding 7 |
| OpDecorate %tex_out DescriptorSet 0 |
| 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 |
| %v4float = OpTypeVector %float 4 |
| %_ptr_Output_v4float = OpTypePointer Output %v4float |
| %5 = OpConstantNull %v4float |
| %value_1 = OpVariable %_ptr_Output_v4float Output %5 |
| %_ptr_Output_float = OpTypePointer Output %float |
| %8 = OpConstantNull %float |
| %vertex_point_size = OpVariable %_ptr_Output_float Output %8 |
| %v3float = OpTypeVector %float 3 |
| %_ptr_Input_v3float = OpTypePointer Input %v3float |
| %position_1 = OpVariable %_ptr_Input_v3float Input |
| %_ptr_Input_v4float = OpTypePointer Input %v4float |
| %color_1 = OpVariable %_ptr_Input_v4float Input |
| %v2float = OpTypeVector %float 2 |
| %_ptr_Input_v2float = OpTypePointer Input %v2float |
| %quad_pos_1 = OpVariable %_ptr_Input_v2float Input |
| %position_2 = OpVariable %_ptr_Output_v4float Output %5 |
| %color_2 = OpVariable %_ptr_Output_v4float Output %5 |
| %_ptr_Output_v2float = OpTypePointer Output %v2float |
| %21 = OpConstantNull %v2float |
| %quad_pos_2 = OpVariable %_ptr_Output_v2float Output %21 |
| %vertex_point_size_1 = OpVariable %_ptr_Output_float Output %8 |
| %uint = OpTypeInt 32 0 |
| %v3uint = OpTypeVector %uint 3 |
| %_ptr_Input_v3uint = OpTypePointer Input %v3uint |
| %GlobalInvocationID_1 = OpVariable %_ptr_Input_v3uint Input |
| %coord_1 = OpVariable %_ptr_Input_v3uint Input |
| %_ptr_Private_v2float = OpTypePointer Private %v2float |
| %rand_seed = OpVariable %_ptr_Private_v2float Private %21 |
| %mat4v4float = OpTypeMatrix %v4float 4 |
| %RenderParams = OpTypeStruct %mat4v4float %v3float %v3float |
| %render_params_block = OpTypeStruct %RenderParams |
| %_ptr_Uniform_render_params_block = OpTypePointer Uniform %render_params_block |
| %render_params = 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 |
| %sim_params = 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 |
| %46 = OpTypeImage %float 1D 0 0 0 1 Unknown |
| %_ptr_UniformConstant_46 = OpTypePointer UniformConstant %46 |
| %texture = OpVariable %_ptr_UniformConstant_46 UniformConstant |
| %UBO = OpTypeStruct %uint |
| %ubo_block = OpTypeStruct %UBO |
| %_ptr_Uniform_ubo_block = OpTypePointer Uniform %ubo_block |
| %ubo = 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 |
| %buf_out = OpVariable %_ptr_StorageBuffer_Buffer StorageBuffer |
| %58 = OpTypeImage %float 2D 0 0 0 1 Unknown |
| %_ptr_UniformConstant_58 = OpTypePointer UniformConstant %58 |
| %tex_in = OpVariable %_ptr_UniformConstant_58 UniformConstant |
| %61 = OpTypeImage %float 2D 0 0 0 2 Rgba8 |
| %_ptr_UniformConstant_61 = OpTypePointer UniformConstant %61 |
| %tex_out = OpVariable %_ptr_UniformConstant_61 UniformConstant |
| %void = OpTypeVoid |
| %62 = OpTypeFunction %void |
| %half = OpTypeFloat 16 |
| %67 = OpConstantNull %half |
| %_ptr_Function_half = OpTypePointer Function %half |
| %74 = OpTypeFunction %v4float |
| %float_1 = OpConstant %float 1 |
| %VertexOutput = OpTypeStruct %v4float %v4float %v2float |
| %VertexInput = OpTypeStruct %v3float %v4float %v2float |
| %88 = OpTypeFunction %VertexOutput %VertexInput |
| %mat2v3float = OpTypeMatrix %v3float 2 |
| %uint_0 = OpConstant %uint 0 |
| %uint_1 = OpConstant %uint 1 |
| %_ptr_Uniform_v3float = OpTypePointer Uniform %v3float |
| %uint_2 = OpConstant %uint 2 |
| %_ptr_Function_v3float = OpTypePointer Function %v3float |
| %108 = OpConstantNull %v3float |
| %float_0_00999999978 = OpConstant %float 0.00999999978 |
| %_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput |
| %119 = OpConstantNull %VertexOutput |
| %_ptr_Function_v4float = OpTypePointer Function %v4float |
| %_ptr_Uniform_mat4v4float = OpTypePointer Uniform %mat4v4float |
| %_ptr_Function_v2float = OpTypePointer Function %v2float |
| %_arr_uint_uint_1 = OpTypeArray %uint %uint_1 |
| %147 = OpTypeFunction %void %_arr_uint_uint_1 %Particle |
| %int = OpTypeInt 32 1 |
| %154 = OpConstantNull %int |
| %_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float |
| %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float |
| %_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float |
| %uint_3 = OpConstant %uint 3 |
| %_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float |
| %172 = 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 |
| %194 = OpConstantNull %Particle |
| %bool = OpTypeBool |
| %v2bool = OpTypeVector %bool 2 |
| %_ptr_Uniform_uint = OpTypePointer Uniform %uint |
| %uint_31 = OpConstant %uint 31 |
| %232 = OpConstantNull %uint |
| %253 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1 |
| %float_4 = OpConstant %float 4 |
| %v2int = OpTypeVector %int 2 |
| %asinh_468a48 = OpFunction %void None %62 |
| %65 = OpLabel |
| %arg_0 = OpVariable %_ptr_Function_half Function %67 |
| %res = OpVariable %_ptr_Function_half Function %67 |
| OpStore %arg_0 %67 |
| %72 = OpLoad %half %arg_0 |
| %70 = OpExtInst %half %71 Asinh %72 |
| OpStore %res %70 |
| OpReturn |
| OpFunctionEnd |
| %vertex_main_inner = OpFunction %v4float None %74 |
| %76 = OpLabel |
| %77 = OpFunctionCall %void %asinh_468a48 |
| OpReturnValue %5 |
| OpFunctionEnd |
| %vertex_main = OpFunction %void None %62 |
| %79 = OpLabel |
| %80 = OpFunctionCall %v4float %vertex_main_inner |
| OpStore %value_1 %80 |
| OpStore %vertex_point_size %float_1 |
| OpReturn |
| OpFunctionEnd |
| %fragment_main = OpFunction %void None %62 |
| %83 = OpLabel |
| %84 = OpFunctionCall %void %asinh_468a48 |
| OpReturn |
| OpFunctionEnd |
| %rgba32uintin = OpFunction %void None %62 |
| %86 = OpLabel |
| %87 = OpFunctionCall %void %asinh_468a48 |
| OpReturn |
| OpFunctionEnd |
| %vs_main_inner = OpFunction %VertexOutput None %88 |
| %in = OpFunctionParameter %VertexInput |
| %93 = OpLabel |
| %quad_pos = OpVariable %_ptr_Function_v3float Function %108 |
| %113 = OpVariable %_ptr_Function_v3float Function %108 |
| %position = OpVariable %_ptr_Function_v3float Function %108 |
| %out = OpVariable %_ptr_Function_VertexOutput Function %119 |
| %98 = OpAccessChain %_ptr_Uniform_v3float %render_params %uint_0 %uint_1 |
| %99 = OpLoad %v3float %98 |
| %101 = OpAccessChain %_ptr_Uniform_v3float %render_params %uint_0 %uint_2 |
| %102 = OpLoad %v3float %101 |
| %103 = OpCompositeConstruct %mat2v3float %99 %102 |
| %104 = OpCompositeExtract %v2float %in 2 |
| %105 = OpMatrixTimesVector %v3float %103 %104 |
| OpStore %quad_pos %105 |
| %109 = OpCompositeExtract %v3float %in 0 |
| %110 = OpLoad %v3float %quad_pos |
| %114 = OpCompositeConstruct %v3float %float_0_00999999978 %float_0_00999999978 %float_0_00999999978 |
| %112 = OpFAdd %v3float %110 %114 |
| %115 = OpFSub %v3float %109 %112 |
| OpStore %position %115 |
| %121 = OpAccessChain %_ptr_Function_v4float %out %uint_0 |
| %123 = OpAccessChain %_ptr_Uniform_mat4v4float %render_params %uint_0 %uint_0 |
| %124 = OpLoad %mat4v4float %123 |
| %125 = OpLoad %v3float %position |
| %126 = OpCompositeExtract %float %125 0 |
| %127 = OpCompositeExtract %float %125 1 |
| %128 = OpCompositeExtract %float %125 2 |
| %129 = OpCompositeConstruct %v4float %126 %127 %128 %float_1 |
| %130 = OpMatrixTimesVector %v4float %124 %129 |
| OpStore %121 %130 |
| %131 = OpAccessChain %_ptr_Function_v4float %out %uint_1 |
| %132 = OpCompositeExtract %v4float %in 1 |
| OpStore %131 %132 |
| %134 = OpAccessChain %_ptr_Function_v2float %out %uint_2 |
| %135 = OpCompositeExtract %v2float %in 2 |
| OpStore %134 %135 |
| %136 = OpLoad %VertexOutput %out |
| OpReturnValue %136 |
| OpFunctionEnd |
| %vs_main = OpFunction %void None %62 |
| %138 = OpLabel |
| %140 = OpLoad %v3float %position_1 |
| %141 = OpLoad %v4float %color_1 |
| %142 = OpLoad %v2float %quad_pos_1 |
| %143 = OpCompositeConstruct %VertexInput %140 %141 %142 |
| %139 = OpFunctionCall %VertexOutput %vs_main_inner %143 |
| %144 = OpCompositeExtract %v4float %139 0 |
| OpStore %position_2 %144 |
| %145 = OpCompositeExtract %v4float %139 1 |
| OpStore %color_2 %145 |
| %146 = OpCompositeExtract %v2float %139 2 |
| OpStore %quad_pos_2 %146 |
| OpStore %vertex_point_size_1 %float_1 |
| OpReturn |
| OpFunctionEnd |
| %assign_and_preserve_padding_data_particles_X = OpFunction %void None %147 |
| %dest = OpFunctionParameter %_arr_uint_uint_1 |
| %value = OpFunctionParameter %Particle |
| %152 = OpLabel |
| %155 = OpCompositeExtract %uint %dest 0 |
| %157 = OpAccessChain %_ptr_StorageBuffer_v3float %data %uint_0 %155 %uint_0 |
| %158 = OpCompositeExtract %v3float %value 0 |
| OpStore %157 %158 |
| %159 = OpCompositeExtract %uint %dest 0 |
| %161 = OpAccessChain %_ptr_StorageBuffer_float %data %uint_0 %159 %uint_1 |
| %162 = OpCompositeExtract %float %value 1 |
| OpStore %161 %162 |
| %163 = OpCompositeExtract %uint %dest 0 |
| %165 = OpAccessChain %_ptr_StorageBuffer_v4float %data %uint_0 %163 %uint_2 |
| %166 = OpCompositeExtract %v4float %value 2 |
| OpStore %165 %166 |
| %167 = OpCompositeExtract %uint %dest 0 |
| %170 = OpAccessChain %_ptr_StorageBuffer_v2float %data %uint_0 %167 %uint_3 |
| %171 = OpCompositeExtract %v2float %value 3 |
| OpStore %170 %171 |
| OpReturn |
| OpFunctionEnd |
| %simulate_inner = OpFunction %void None %172 |
| %GlobalInvocationID = OpFunctionParameter %v3uint |
| %175 = OpLabel |
| %particle = OpVariable %_ptr_Function_Particle Function %194 |
| %177 = OpAccessChain %_ptr_Uniform_v4float %sim_params %uint_0 %uint_1 |
| %178 = OpLoad %v4float %177 |
| %179 = OpVectorShuffle %v2float %178 %178 0 1 |
| %182 = OpVectorShuffle %v2uint %GlobalInvocationID %GlobalInvocationID 0 1 |
| %180 = OpConvertUToF %v2float %182 |
| %183 = OpFMul %v2float %179 %180 |
| %184 = OpAccessChain %_ptr_Uniform_v4float %sim_params %uint_0 %uint_1 |
| %185 = OpLoad %v4float %184 |
| %186 = OpVectorShuffle %v2float %185 %185 2 3 |
| %187 = OpFMul %v2float %183 %186 |
| OpStore %rand_seed %187 |
| %188 = OpCompositeExtract %uint %GlobalInvocationID 0 |
| %190 = OpAccessChain %_ptr_StorageBuffer_Particle %data %uint_0 %188 |
| %191 = OpLoad %Particle %190 |
| OpStore %particle %191 |
| %196 = OpCompositeConstruct %_arr_uint_uint_1 %188 |
| %197 = OpLoad %Particle %particle |
| %195 = OpFunctionCall %void %assign_and_preserve_padding_data_particles_X %196 %197 |
| OpReturn |
| OpFunctionEnd |
| %simulate = OpFunction %void None %62 |
| %199 = OpLabel |
| %201 = OpLoad %v3uint %GlobalInvocationID_1 |
| %200 = OpFunctionCall %void %simulate_inner %201 |
| OpReturn |
| OpFunctionEnd |
| %export_level_inner = OpFunction %void None %172 |
| %coord = OpFunctionParameter %v3uint |
| %204 = OpLabel |
| %263 = OpVariable %_ptr_Function_v4float Function %5 |
| %207 = OpVectorShuffle %v2uint %coord %coord 0 1 |
| %210 = OpLoad %61 %tex_out |
| %209 = OpImageQuerySize %v2uint %210 |
| %211 = OpULessThan %v2bool %207 %209 |
| %205 = OpAll %bool %211 |
| OpSelectionMerge %213 None |
| OpBranchConditional %205 %214 %213 |
| %214 = OpLabel |
| %215 = OpCompositeExtract %uint %coord 0 |
| %216 = OpCompositeExtract %uint %coord 1 |
| %218 = OpAccessChain %_ptr_Uniform_uint %ubo %uint_0 %uint_0 |
| %219 = OpLoad %uint %218 |
| %220 = OpIMul %uint %216 %219 |
| %222 = OpBitwiseAnd %uint %220 %uint_31 |
| %223 = OpShiftLeftLogical %uint %215 %222 |
| %224 = OpCompositeExtract %uint %coord 0 |
| %225 = OpISub %uint %224 %uint_2 |
| %226 = OpCompositeExtract %uint %coord 1 |
| %227 = OpShiftRightLogical %uint %226 %uint_2 |
| %228 = OpAccessChain %_ptr_Uniform_uint %ubo %uint_0 %uint_0 |
| %229 = OpLoad %uint %228 |
| %230 = OpIMul %uint %227 %229 |
| %231 = OpIAdd %uint %225 %230 |
| %233 = OpShiftLeftLogical %uint %231 %232 |
| %234 = OpAccessChain %_ptr_StorageBuffer_float %buf_in %uint_0 %233 |
| %235 = OpLoad %float %234 |
| %236 = OpIAdd %uint %231 %uint_1 |
| %237 = OpAccessChain %_ptr_StorageBuffer_float %buf_in %uint_0 %236 |
| %238 = OpLoad %float %237 |
| %239 = OpIAdd %uint %231 %uint_1 |
| %240 = OpAccessChain %_ptr_Uniform_uint %ubo %uint_0 %uint_0 |
| %241 = OpLoad %uint %240 |
| %242 = OpIAdd %uint %239 %241 |
| %243 = OpAccessChain %_ptr_StorageBuffer_float %buf_in %uint_0 %242 |
| %244 = OpLoad %float %243 |
| %245 = OpIAdd %uint %231 %uint_1 |
| %246 = OpAccessChain %_ptr_Uniform_uint %ubo %uint_0 %uint_0 |
| %247 = OpLoad %uint %246 |
| %248 = OpIAdd %uint %245 %247 |
| %249 = OpAccessChain %_ptr_StorageBuffer_float %buf_in %uint_0 %248 |
| %250 = OpLoad %float %249 |
| %252 = OpCompositeConstruct %v4float %235 %238 %244 %250 |
| %251 = OpDot %float %252 %253 |
| %254 = OpAccessChain %_ptr_StorageBuffer_float %buf_out %uint_0 %223 |
| %256 = OpFRem %float %251 %float_4 |
| OpStore %254 %256 |
| %257 = OpFMul %float %235 %238 |
| %258 = OpFDiv %float %235 %238 |
| %259 = OpFAdd %float %258 %244 |
| %260 = OpCompositeConstruct %v4float %235 %257 %259 %251 |
| %261 = OpExtInst %float %71 NMax %251 %8 |
| %264 = OpCompositeConstruct %v4float %261 %261 %261 %261 |
| %262 = OpFAdd %v4float %260 %264 |
| %266 = OpLoad %61 %tex_out |
| %269 = OpVectorShuffle %v2uint %coord %coord 0 1 |
| %267 = OpBitcast %v2int %269 |
| OpImageWrite %266 %267 %262 |
| OpBranch %213 |
| %213 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| %export_level = OpFunction %void None %62 |
| %271 = OpLabel |
| %273 = OpLoad %v3uint %coord_1 |
| %272 = OpFunctionCall %void %export_level_inner %273 |
| OpReturn |
| OpFunctionEnd |