Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add SPIRV parsing test case with Embark Rust shaders #341

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

repi
Copy link

@repi repi commented Dec 19, 2020

This adds SPIRV binary shaders and a test case to reproduce the SPIRV parsing issues with a set of shaders we have here at Embark Studios as repro for gfx-rs/wgpu#4308. It is a single SPIRV binary module with multiple shaders inside it.

Since I filed the original we have switched from using GLSL for our shaders to use Rust and our new Rust GPU shader compiler backend which generates SPIRV. Note as this is a very young SPIRV compiler there may be SPIRV code generation issues in the resulting binary, but at least the shaders to work with Nvidia and AMD drivers on PC and Linux and render correctly in our engine.

The new test case here will fails to parse, initially with this error:

---- parse_embark_spv stdout ----
thread 'parse_embark_spv' panicked at 'Module parsing failed: UnsupportedCapability(VulkanMemoryModel)', tests\parse_embark.rs:12:14

But as described in issue gfx-rs/wgpu#4308 there likely are additional SPIRV input parsing issues as well.

We could potentially merge this in but with the test marked as #[ignored] so it is not run by default (and as such fail), so one can do incremental fixes and improvements to the SPIRV parsing to get this running?

@kvark
Copy link
Member

kvark commented Dec 21, 2020

Thank you for providing the shader! It does use a hell lot of features that are not supported by WebGPU (multiview, variable pointers).
That doesn't mean Naga will not be able to process it, but it means we can't prioritize support for these at this moment.

@kvark
Copy link
Member

kvark commented Dec 21, 2020

We could potentially merge this in but with the test marked as #[ignored] so it is not run by default (and as such fail), so one can do incremental fixes and improvements to the SPIRV parsing to get this running?

I think it's ok to keep this PR open and link it to progress we make towards supporting that test.

@kvark kvark marked this pull request as draft January 22, 2021 16:22
@ColdIce1605
Copy link

Didn't we add VkMEMModel support?
Should we test these again?
So this should work right?

@kvark
Copy link
Member

kvark commented Apr 19, 2021

It was just the first blocker out of an unknown number. We are a few steps closer now.

@teoxoy
Copy link
Member

teoxoy commented May 2, 2022

Current blockers seem to be:

  • nested pointers (and multiple corresponding load/stores)

            %149 = OpTypeImage %float 2D 0 0 0 1 Unknown
    %_ptr_Uniform_149 = OpTypePointer Uniform %149
    %_ptr_Function__ptr_Uniform_149 = OpTypePointer Function %_ptr_Uniform_149
    
  • variable with pointer to image type

    %149 = OpTypeImage %float 2D 0 0 0 1 Unknown
    %_ptr_Uniform_149 = OpTypePointer Uniform %149
    ...
     %in_texture = OpVariable %_ptr_Uniform_149 Uniform
    
Full Disassembled Shader
; SPIR-V
; Version: 1.5
; Generator: Google rspirv; 0
; Bound: 2829
; Schema: 0
               OpCapability Shader
               OpCapability VulkanMemoryModel
               OpCapability VariablePointers
               OpCapability MultiView
               OpCapability DerivativeControl
               OpExtension "SPV_KHR_multiview"
          %1 = OpExtInstImport "GLSL.std.450"
               OpMemoryModel Logical Vulkan
               OpEntryPoint Vertex %2 "line::main_vs" %view_idx %in_pos %in_color %global_uniforms %diffuse_color %builtin_pos
               OpEntryPoint Fragment %9 "line::main_fs" %diffuse_color_0 %out_color
               OpEntryPoint Vertex %12 "imgui::main_vs" %in_pos_0 %in_uv %in_color_0 %out_uv %out_color_0 %proj_matrix %builtin_pos_0
               OpEntryPoint Fragment %20 "imgui::main_fs" %output %in_uv_0 %in_color_1 %in_texture %sampler
               OpEntryPoint Vertex %26 "sky::main_vs" %vertex_idx %view_idx_0 %out_world_pos %sky_uniforms %builtin_pos_1
               OpEntryPoint Fragment %32 "sky::main_fs" %output_0 %in_world_pos %sky_uniforms_0
               OpEntryPoint Vertex %36 "fullscreen_triangle" %vert_idx %view_index %out_pos %out_uv_0
               OpEntryPoint Fragment %41 "gaussian_blur::main_fs" %input %output_1 %direction %in_image %sampler_0
               OpEntryPoint Fragment %47 "spectate::main_fs" %uv %output_2 %in_texture_0 %sampler_1
               OpEntryPoint Vertex %52 "canvas::main_vs" %in_pos_1 %in_uv_1 %in_color_2 %push_constants %out_uv_1 %out_color_1 %builtin_pos_2
               OpEntryPoint Fragment %60 "canvas::main_fs" %font_tex %font_sampler %in_uv_2 %in_color_3 %out_color_2
               OpEntryPoint Fragment %66 "downsample::main_fs" %input_0 %output_3 %in_texture_1 %sampler_2
               OpEntryPoint Fragment %71 "downsample::main_fs_stereo" %input_1 %output_4 %in_texture_2 %sampler_3
               OpEntryPoint Fragment %76 "tonemap::main_fs" %in_frag_coord %uv_0 %output_5 %img %bloom %sampler_4 %push_constants_0
               OpEntryPoint Fragment %84 "tonemap::main_fs_stereo" %uv_1 %output_l %output_r %img_0 %bloom_0 %sampler_5 %push_constants_1
               OpExecutionMode %9 OriginUpperLeft
               OpExecutionMode %20 OriginUpperLeft
               OpExecutionMode %32 OriginUpperLeft
               OpExecutionMode %41 OriginUpperLeft
               OpExecutionMode %47 OriginUpperLeft
               OpExecutionMode %60 OriginUpperLeft
               OpExecutionMode %66 OriginUpperLeft
               OpExecutionMode %71 OriginUpperLeft
               OpExecutionMode %76 OriginUpperLeft
               OpExecutionMode %84 OriginUpperLeft
               OpName %macaw__Vec3 "macaw::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %ark_shaders__color__decode_srgb "ark_shaders::color::decode_srgb"
               OpName %ark_shaders__color__decode_srgba "ark_shaders::color::decode_srgba"
               OpName %macaw__Mat4 "macaw::Mat4"
               OpMemberName %macaw__Mat4 0 "x_axis"
               OpMemberName %macaw__Mat4 1 "y_axis"
               OpMemberName %macaw__Mat4 2 "z_axis"
               OpMemberName %macaw__Mat4 3 "w_axis"
               OpName %line__GlobalUniforms "line::GlobalUniforms"
               OpMemberName %line__GlobalUniforms 0 "view_proj_matrix"
               OpMemberName %line__GlobalUniforms 1 "view_proj_matrix_stereo"
               OpName %view_idx "view_idx"
               OpName %in_pos "in_pos"
               OpName %in_color "in_color"
               OpName %global_uniforms "global_uniforms"
               OpName %diffuse_color "diffuse_color"
               OpName %builtin_pos "builtin_pos"
               OpName %diffuse_color_0 "diffuse_color"
               OpName %out_color "out_color"
               OpName %macaw__Mat4 "macaw::Mat4"
               OpMemberName %macaw__Mat4 0 "x_axis"
               OpMemberName %macaw__Mat4 1 "y_axis"
               OpMemberName %macaw__Mat4 2 "z_axis"
               OpMemberName %macaw__Mat4 3 "w_axis"
               OpName %in_pos_0 "in_pos"
               OpName %in_uv "in_uv"
               OpName %in_color_0 "in_color"
               OpName %out_uv "out_uv"
               OpName %out_color_0 "out_color"
               OpName %proj_matrix "proj_matrix"
               OpName %builtin_pos_0 "builtin_pos"
               OpName %output "output"
               OpName %in_uv_0 "in_uv"
               OpName %in_color_1 "in_color"
               OpName %in_texture "in_texture"
               OpName %sampler "sampler"
               OpName %macaw__Vec3 "macaw::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %macaw__Mat4 "macaw::Mat4"
               OpMemberName %macaw__Mat4 0 "x_axis"
               OpMemberName %macaw__Mat4 1 "y_axis"
               OpMemberName %macaw__Mat4 2 "z_axis"
               OpMemberName %macaw__Mat4 3 "w_axis"
               OpName %sky__SkyUniforms "sky::SkyUniforms"
               OpMemberName %sky__SkyUniforms 0 "view_proj_inverse"
               OpMemberName %sky__SkyUniforms 1 "view_proj_inverse_stereo"
               OpMemberName %sky__SkyUniforms 2 "sun_dir"
               OpMemberName %sky__SkyUniforms 3 "sun_color"
               OpMemberName %sky__SkyUniforms 4 "ground_color"
               OpMemberName %sky__SkyUniforms 5 "sky_color"
               OpMemberName %sky__SkyUniforms 6 "horizon_color"
               OpName %vertex_idx "vertex_idx"
               OpName %view_idx_0 "view_idx"
               OpName %out_world_pos "out_world_pos"
               OpName %sky_uniforms "sky_uniforms"
               OpName %builtin_pos_1 "builtin_pos"
               OpName %output_0 "output"
               OpName %in_world_pos "in_world_pos"
               OpName %sky_uniforms_0 "sky_uniforms"
               OpName %vert_idx "vert_idx"
               OpName %view_index "view_index"
               OpName %out_pos "out_pos"
               OpName %out_uv_0 "out_uv"
               OpName %input "input"
               OpName %output_1 "output"
               OpName %direction "direction"
               OpName %in_image "in_image"
               OpName %sampler_0 "sampler"
               OpName %uv "uv"
               OpName %output_2 "output"
               OpName %in_texture_0 "in_texture"
               OpName %sampler_1 "sampler"
               OpName %macaw__Vec3 "macaw::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %_glam__f32__vec4__Vec4_as_core__convert__Into_glam__f32__vec3__Vec3____into "<glam::f32::vec4::Vec4 as core::convert::Into<glam::f32::vec3::Vec3>>::into"
               OpName %macaw__Vec3 "macaw::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %macaw__Mat4 "macaw::Mat4"
               OpMemberName %macaw__Mat4 0 "x_axis"
               OpMemberName %macaw__Mat4 1 "y_axis"
               OpMemberName %macaw__Mat4 2 "z_axis"
               OpMemberName %macaw__Mat4 3 "w_axis"
               OpName %canvas__Constants "canvas::Constants"
               OpMemberName %canvas__Constants 0 "projection_matrix"
               OpName %in_pos_1 "in_pos"
               OpName %in_uv_1 "in_uv"
               OpName %in_color_2 "in_color"
               OpName %push_constants "push_constants"
               OpName %out_uv_1 "out_uv"
               OpName %out_color_1 "out_color"
               OpName %builtin_pos_2 "builtin_pos"
               OpName %font_tex "font_tex"
               OpName %font_sampler "font_sampler"
               OpName %in_uv_2 "in_uv"
               OpName %in_color_3 "in_color"
               OpName %out_color_2 "out_color"
               OpName %input_0 "input"
               OpName %output_3 "output"
               OpName %in_texture_1 "in_texture"
               OpName %sampler_2 "sampler"
               OpName %input_1 "input"
               OpName %output_4 "output"
               OpName %in_texture_2 "in_texture"
               OpName %sampler_3 "sampler"
               OpName %macaw__Vec3 "macaw::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %tonemap__TonemapConstants "tonemap::TonemapConstants"
               OpName %ark_shaders__tonemap__calculate_luma "ark_shaders::tonemap::calculate_luma"
               OpName %ark_shaders__tonemap__vignette "ark_shaders::tonemap::vignette"
               OpName %ark_shaders__tonemap__tonemap_neutral "ark_shaders::tonemap::tonemap_neutral"
               OpName %ark_shaders__tonemap__dither_pattern_at_coordinate "ark_shaders::tonemap::dither_pattern_at_coordinate"
               OpName %in_frag_coord "in_frag_coord"
               OpName %uv_0 "uv"
               OpName %output_5 "output"
               OpName %img "img"
               OpName %bloom "bloom"
               OpName %sampler_4 "sampler"
               OpName %push_constants_0 "push_constants"
               OpName %uv_1 "uv"
               OpName %output_l "output_l"
               OpName %output_r "output_r"
               OpName %img_0 "img"
               OpName %bloom_0 "bloom"
               OpName %sampler_5 "sampler"
               OpName %push_constants_1 "push_constants"
               OpName %_f32_as_macaw__float_ext__FloatExt___step_select "<f32 as macaw::float_ext::FloatExt>::step_select"
               OpName %macaw__Vec3 "glam::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %macaw__Mat4 "glam::Mat4"
               OpMemberName %macaw__Mat4 0 "x_axis"
               OpMemberName %macaw__Mat4 1 "y_axis"
               OpMemberName %macaw__Mat4 2 "z_axis"
               OpMemberName %macaw__Mat4 3 "w_axis"
               OpName %macaw__Vec3 "(f32, f32, f32)"
               OpMemberName %macaw__Vec3 0 "0"
               OpMemberName %macaw__Vec3 1 "1"
               OpMemberName %macaw__Vec3 2 "2"
               OpName %macaw__Vec3 "glam::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %macaw__Mat4 "glam::Mat4"
               OpMemberName %macaw__Mat4 0 "x_axis"
               OpMemberName %macaw__Mat4 1 "y_axis"
               OpMemberName %macaw__Mat4 2 "z_axis"
               OpMemberName %macaw__Mat4 3 "w_axis"
               OpName %macaw__Vec3 "glam::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %macaw__Vec3 "glam::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %macaw__Vec3 "glam::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %macaw__Mat4 "glam::Mat4"
               OpMemberName %macaw__Mat4 0 "x_axis"
               OpMemberName %macaw__Mat4 1 "y_axis"
               OpMemberName %macaw__Mat4 2 "z_axis"
               OpMemberName %macaw__Mat4 3 "w_axis"
               OpName %macaw__Vec3 "glam::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %_glam__f32__vec3__Vec3_as_macaw__vec3_ext__Vec3Ext___step_select "<glam::f32::vec3::Vec3 as macaw::vec3_ext::Vec3Ext>::step_select"
               OpName %macaw__Vec3 "glam::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %macaw__Vec3 "(f32, f32, f32)"
               OpMemberName %macaw__Vec3 0 "0"
               OpMemberName %macaw__Vec3 1 "1"
               OpMemberName %macaw__Vec3 2 "2"
               OpName %macaw__Vec3 "glam::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %_spirv_std__textures__Image2d___sample "<spirv_std::textures::Image2d>::sample"
               OpName %_spirv_std__textures__Image2dArray___sample "<spirv_std::textures::Image2dArray>::sample"
               OpName %tonemap__TonemapConstants "(f32, f32)"
               OpName %macaw__Vec3 "f32::vec3::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %macaw__Mat4 "f32::mat4::Mat4"
               OpMemberName %macaw__Mat4 0 "x_axis"
               OpMemberName %macaw__Mat4 1 "y_axis"
               OpMemberName %macaw__Mat4 2 "z_axis"
               OpMemberName %macaw__Mat4 3 "w_axis"
               OpName %macaw__Vec3 "(f32, f32, f32)"
               OpMemberName %macaw__Vec3 0 "0"
               OpMemberName %macaw__Vec3 1 "1"
               OpMemberName %macaw__Vec3 2 "2"
               OpName %macaw__Vec3 "(f32, f32, f32)"
               OpMemberName %macaw__Vec3 0 "0"
               OpMemberName %macaw__Vec3 1 "1"
               OpMemberName %macaw__Vec3 2 "2"
               OpName %macaw__Vec3 "(f32, f32, f32)"
               OpMemberName %macaw__Vec3 0 "0"
               OpMemberName %macaw__Vec3 1 "1"
               OpMemberName %macaw__Vec3 2 "2"
               OpName %macaw__Vec3 "f32::vec3::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %macaw__Vec3 "f32::vec3::Vec3"
               OpMemberName %macaw__Vec3 0 "x"
               OpMemberName %macaw__Vec3 1 "y"
               OpMemberName %macaw__Vec3 2 "z"
               OpName %tonemap__TonemapConstants "(f32, f32)"
               OpName %tonemap__TonemapConstants "(f32, f32)"
               OpName %tonemap__TonemapConstants "(f32, f32)"
               OpMemberDecorate %macaw__Vec3 0 Offset 0
               OpMemberDecorate %macaw__Vec3 1 Offset 4
               OpMemberDecorate %macaw__Vec3 2 Offset 8
               OpMemberDecorate %macaw__Mat4 0 Offset 0
               OpMemberDecorate %macaw__Mat4 1 Offset 16
               OpMemberDecorate %macaw__Mat4 2 Offset 32
               OpMemberDecorate %macaw__Mat4 3 Offset 48
               OpMemberDecorate %line__GlobalUniforms 0 Offset 0
               OpMemberDecorate %line__GlobalUniforms 1 Offset 64
               OpDecorate %view_idx BuiltIn ViewIndex
               OpDecorate %in_pos Location 0
               OpDecorate %in_color Location 1
               OpDecorate %global_uniforms DescriptorSet 0
               OpDecorate %global_uniforms Binding 0
               OpDecorate %diffuse_color Location 0
               OpDecorate %builtin_pos BuiltIn Position
               OpDecorate %diffuse_color_0 Location 0
               OpDecorate %out_color Location 0
               OpDecorate %in_pos_0 Location 0
               OpDecorate %in_uv Location 1
               OpDecorate %in_color_0 Location 2
               OpDecorate %out_uv Location 0
               OpDecorate %out_color_0 Location 1
               OpDecorate %builtin_pos_0 BuiltIn Position
               OpDecorate %output Location 0
               OpDecorate %in_uv_0 Location 0
               OpDecorate %in_color_1 Location 1
               OpDecorate %in_texture DescriptorSet 0
               OpDecorate %in_texture Binding 0
               OpDecorate %sampler DescriptorSet 0
               OpDecorate %sampler Binding 1
               OpMemberDecorate %sky__SkyUniforms 0 Offset 0
               OpMemberDecorate %sky__SkyUniforms 1 Offset 64
               OpMemberDecorate %sky__SkyUniforms 2 Offset 128
               OpMemberDecorate %sky__SkyUniforms 3 Offset 144
               OpMemberDecorate %sky__SkyUniforms 4 Offset 160
               OpMemberDecorate %sky__SkyUniforms 5 Offset 176
               OpMemberDecorate %sky__SkyUniforms 6 Offset 192
               OpDecorate %vertex_idx BuiltIn VertexIndex
               OpDecorate %view_idx_0 BuiltIn ViewIndex
               OpDecorate %out_world_pos Location 0
               OpDecorate %sky_uniforms DescriptorSet 0
               OpDecorate %sky_uniforms Binding 0
               OpDecorate %builtin_pos_1 BuiltIn Position
               OpDecorate %output_0 Location 0
               OpDecorate %in_world_pos Location 0
               OpDecorate %sky_uniforms_0 DescriptorSet 0
               OpDecorate %sky_uniforms_0 Binding 0
               OpDecorate %vert_idx BuiltIn VertexIndex
               OpDecorate %view_index BuiltIn ViewIndex
               OpDecorate %out_pos BuiltIn Position
               OpDecorate %out_uv_0 Location 0
               OpDecorate %input Location 0
               OpDecorate %output_1 Location 0
               OpDecorate %in_image DescriptorSet 0
               OpDecorate %in_image Binding 0
               OpDecorate %sampler_0 DescriptorSet 0
               OpDecorate %sampler_0 Binding 1
               OpDecorate %_arr_float_uint_18 ArrayStride 4
               OpDecorate %uv Location 0
               OpDecorate %output_2 Location 0
               OpDecorate %in_texture_0 DescriptorSet 0
               OpDecorate %in_texture_0 Binding 0
               OpDecorate %sampler_1 DescriptorSet 0
               OpDecorate %sampler_1 Binding 1
               OpMemberDecorate %canvas__Constants 0 Offset 0
               OpDecorate %canvas__Constants Block
               OpDecorate %in_pos_1 Location 0
               OpDecorate %in_uv_1 Location 1
               OpDecorate %in_color_2 Location 2
               OpDecorate %out_uv_1 Location 0
               OpDecorate %out_color_1 Location 1
               OpDecorate %builtin_pos_2 BuiltIn Position
               OpDecorate %font_tex DescriptorSet 0
               OpDecorate %font_tex Binding 0
               OpDecorate %font_sampler DescriptorSet 0
               OpDecorate %font_sampler Binding 1
               OpDecorate %in_uv_2 Location 0
               OpDecorate %in_color_3 Location 1
               OpDecorate %out_color_2 Location 0
               OpDecorate %input_0 Location 0
               OpDecorate %output_3 Location 0
               OpDecorate %in_texture_1 DescriptorSet 0
               OpDecorate %in_texture_1 Binding 0
               OpDecorate %sampler_2 DescriptorSet 0
               OpDecorate %sampler_2 Binding 1
               OpDecorate %input_1 Location 0
               OpDecorate %output_4 Location 0
               OpDecorate %in_texture_2 DescriptorSet 0
               OpDecorate %in_texture_2 Binding 0
               OpDecorate %sampler_3 DescriptorSet 0
               OpDecorate %sampler_3 Binding 1
               OpMemberDecorate %tonemap__TonemapConstants 0 Offset 0
               OpMemberDecorate %tonemap__TonemapConstants 1 Offset 4
               OpDecorate %in_frag_coord BuiltIn FragCoord
               OpDecorate %uv_0 Location 0
               OpDecorate %output_5 Location 0
               OpDecorate %img DescriptorSet 0
               OpDecorate %img Binding 0
               OpDecorate %bloom DescriptorSet 0
               OpDecorate %bloom Binding 1
               OpDecorate %sampler_4 DescriptorSet 0
               OpDecorate %sampler_4 Binding 2
               OpDecorate %uv_1 Location 0
               OpDecorate %output_l Location 0
               OpDecorate %output_r Location 1
               OpDecorate %img_0 DescriptorSet 0
               OpDecorate %img_0 Binding 0
               OpDecorate %bloom_0 DescriptorSet 0
               OpDecorate %bloom_0 Binding 1
               OpDecorate %sampler_5 DescriptorSet 0
               OpDecorate %sampler_5 Binding 2
               OpDecorate %_arr_int_uint_16 ArrayStride 4
      %float = OpTypeFloat 32
%macaw__Vec3 = OpTypeStruct %float %float %float
%_ptr_Function_macaw__Vec3 = OpTypePointer Function %macaw__Vec3
       %void = OpTypeVoid
    %v4float = OpTypeVector %float 4
%_ptr_Function_v4float = OpTypePointer Function %v4float
        %116 = OpTypeFunction %void %_ptr_Function_macaw__Vec3 %_ptr_Function_v4float
        %117 = OpTypeFunction %void %_ptr_Function_macaw__Vec3 %_ptr_Function_macaw__Vec3
        %118 = OpTypeFunction %void %_ptr_Function_v4float %_ptr_Function_v4float
%_ptr_Function_float = OpTypePointer Function %float
       %uint = OpTypeInt 32 0
     %uint_0 = OpConstant %uint 0
     %uint_1 = OpConstant %uint 1
     %uint_2 = OpConstant %uint 2
     %uint_3 = OpConstant %uint 3
    %uint_12 = OpConstant %uint 12
%float_12_9200001 = OpConstant %float 12.9200001
%float_0_0549999997 = OpConstant %float 0.0549999997
%float_2_4000001 = OpConstant %float 2.4000001
%float_0_0404499993 = OpConstant %float 0.0404499993
        %130 = OpTypeFunction %void %_ptr_Function_macaw__Vec3 %_ptr_Function_macaw__Vec3 %_ptr_Function_macaw__Vec3 %_ptr_Function_macaw__Vec3 %_ptr_Function_macaw__Vec3
    %v3float = OpTypeVector %float 3
%_ptr_Function_v3float = OpTypePointer Function %v3float
%macaw__Mat4 = OpTypeStruct %v4float %v4float %v4float %v4float
%line__GlobalUniforms = OpTypeStruct %macaw__Mat4 %macaw__Mat4
%_ptr_Function_line__GlobalUniforms = OpTypePointer Function %line__GlobalUniforms
%_ptr_Uniform_line__GlobalUniforms = OpTypePointer Uniform %line__GlobalUniforms
%_ptr_Function__ptr_Uniform_line__GlobalUniforms = OpTypePointer Function %_ptr_Uniform_line__GlobalUniforms
%_ptr_Output_v4float = OpTypePointer Output %v4float
%_ptr_Function__ptr_Output_v4float = OpTypePointer Function %_ptr_Output_v4float
%_ptr_Input_v4float = OpTypePointer Input %v4float
%_ptr_Function__ptr_Input_v4float = OpTypePointer Function %_ptr_Input_v4float
%_ptr_Input_v3float = OpTypePointer Input %v3float
%_ptr_Function__ptr_Input_v3float = OpTypePointer Function %_ptr_Input_v3float
%_ptr_Input_uint = OpTypePointer Input %uint
%_ptr_Function__ptr_Input_uint = OpTypePointer Function %_ptr_Input_uint
%_ptr_Function_macaw__Mat4 = OpTypePointer Function %macaw__Mat4
        %145 = OpTypeFunction %void
   %view_idx = OpVariable %_ptr_Input_uint Input
     %in_pos = OpVariable %_ptr_Input_v3float Input
   %in_color = OpVariable %_ptr_Input_v4float Input
%global_uniforms = OpVariable %_ptr_Uniform_line__GlobalUniforms Uniform
%diffuse_color = OpVariable %_ptr_Output_v4float Output
%builtin_pos = OpVariable %_ptr_Output_v4float Output
%diffuse_color_0 = OpVariable %_ptr_Input_v4float Input
  %out_color = OpVariable %_ptr_Output_v4float Output
%_ptr_Function_uint = OpTypePointer Function %uint
       %bool = OpTypeBool
    %float_1 = OpConstant %float 1
        %149 = OpTypeImage %float 2D 0 0 0 1 Unknown
%_ptr_Uniform_149 = OpTypePointer Uniform %149
%_ptr_Function__ptr_Uniform_149 = OpTypePointer Function %_ptr_Uniform_149
        %152 = OpTypeSampler
%_ptr_Uniform_152 = OpTypePointer Uniform %152
%_ptr_Function__ptr_Uniform_152 = OpTypePointer Function %_ptr_Uniform_152
    %v2float = OpTypeVector %float 2
%_ptr_Output_v2float = OpTypePointer Output %v2float
%_ptr_Function__ptr_Output_v2float = OpTypePointer Function %_ptr_Output_v2float
%_ptr_Function_v2float = OpTypePointer Function %v2float
%_ptr_Input_v2float = OpTypePointer Input %v2float
%_ptr_Function__ptr_Input_v2float = OpTypePointer Function %_ptr_Input_v2float
%_ptr_PushConstant_macaw__Mat4 = OpTypePointer PushConstant %macaw__Mat4
%_ptr_Function__ptr_PushConstant_macaw__Mat4 = OpTypePointer Function %_ptr_PushConstant_macaw__Mat4
   %in_pos_0 = OpVariable %_ptr_Input_v2float Input
      %in_uv = OpVariable %_ptr_Input_v2float Input
 %in_color_0 = OpVariable %_ptr_Input_v4float Input
     %out_uv = OpVariable %_ptr_Output_v2float Output
%out_color_0 = OpVariable %_ptr_Output_v4float Output
%proj_matrix = OpVariable %_ptr_PushConstant_macaw__Mat4 PushConstant
%builtin_pos_0 = OpVariable %_ptr_Output_v4float Output
     %output = OpVariable %_ptr_Output_v4float Output
    %in_uv_0 = OpVariable %_ptr_Input_v2float Input
 %in_color_1 = OpVariable %_ptr_Input_v4float Input
 %in_texture = OpVariable %_ptr_Uniform_149 Uniform
    %sampler = OpVariable %_ptr_Uniform_152 Uniform
%_ptr_Function_149 = OpTypePointer Function %149
%_ptr_Function_152 = OpTypePointer Function %152
    %float_0 = OpConstant %float 0
        %166 = OpTypeFunction %void %_ptr_Function_v4float %_ptr_Function_149 %152 %_ptr_Function_v2float
        %167 = OpTypeFunction %float %_ptr_Function_macaw__Vec3
%sky__SkyUniforms = OpTypeStruct %macaw__Mat4 %macaw__Mat4 %v4float %v4float %v4float %v4float %v4float
%_ptr_Function_sky__SkyUniforms = OpTypePointer Function %sky__SkyUniforms
%_ptr_Uniform_sky__SkyUniforms = OpTypePointer Uniform %sky__SkyUniforms
%_ptr_Function__ptr_Uniform_sky__SkyUniforms = OpTypePointer Function %_ptr_Uniform_sky__SkyUniforms
        %int = OpTypeInt 32 1
%_ptr_Input_int = OpTypePointer Input %int
%_ptr_Function__ptr_Input_int = OpTypePointer Function %_ptr_Input_int
 %vertex_idx = OpVariable %_ptr_Input_int Input
 %view_idx_0 = OpVariable %_ptr_Input_uint Input
%out_world_pos = OpVariable %_ptr_Output_v4float Output
%sky_uniforms = OpVariable %_ptr_Uniform_sky__SkyUniforms Uniform
%builtin_pos_1 = OpVariable %_ptr_Output_v4float Output
   %output_0 = OpVariable %_ptr_Output_v4float Output
%in_world_pos = OpVariable %_ptr_Input_v4float Input
%sky_uniforms_0 = OpVariable %_ptr_Uniform_sky__SkyUniforms Uniform
%_ptr_Function_int = OpTypePointer Function %int
      %int_1 = OpConstant %int 1
      %int_2 = OpConstant %int 2
     %int_31 = OpConstant %int 31
   %float_n1 = OpConstant %float -1
     %uint_6 = OpConstant %uint 6
     %uint_5 = OpConstant %uint 5
     %uint_4 = OpConstant %uint 4
%float_0_998000026 = OpConstant %float 0.998000026
%float_0_00199997425 = OpConstant %float 0.00199997425
   %float_30 = OpConstant %float 30
%float_0_920000017 = OpConstant %float 0.920000017
%float_0_0799999833 = OpConstant %float 0.0799999833
    %float_3 = OpConstant %float 3
  %float_0_5 = OpConstant %float 0.5
%_ptr_Output_v3float = OpTypePointer Output %v3float
%_ptr_Function__ptr_Output_v3float = OpTypePointer Function %_ptr_Output_v3float
   %vert_idx = OpVariable %_ptr_Input_int Input
 %view_index = OpVariable %_ptr_Input_int Input
    %out_pos = OpVariable %_ptr_Output_v4float Output
   %out_uv_0 = OpVariable %_ptr_Output_v3float Output
        %191 = OpTypeImage %float 2D 0 1 0 1 Unknown
%_ptr_Uniform_191 = OpTypePointer Uniform %191
%_ptr_Function__ptr_Uniform_191 = OpTypePointer Function %_ptr_Uniform_191
%_ptr_PushConstant_v2float = OpTypePointer PushConstant %v2float
%_ptr_Function__ptr_PushConstant_v2float = OpTypePointer Function %_ptr_PushConstant_v2float
      %input = OpVariable %_ptr_Input_v3float Input
   %output_1 = OpVariable %_ptr_Output_v4float Output
  %direction = OpVariable %_ptr_PushConstant_v2float PushConstant
   %in_image = OpVariable %_ptr_Uniform_191 Uniform
  %sampler_0 = OpVariable %_ptr_Uniform_152 Uniform
%_ptr_Function_191 = OpTypePointer Function %191
    %uint_18 = OpConstant %uint 18
%_arr_float_uint_18 = OpTypeArray %float %uint_18
%_ptr_Function__arr_float_uint_18 = OpTypePointer Function %_arr_float_uint_18
        %199 = OpTypeFunction %void %_ptr_Function_v4float %_ptr_Function_191 %152 %_ptr_Function_v3float
%float_0_0500140004 = OpConstant %float 0.0500140004
%float_1_49411798 = OpConstant %float 1.49411798
%float_3_48627496 = OpConstant %float 3.48627496
%float_5_47843122 = OpConstant %float 5.47843122
%float_7_47058821 = OpConstant %float 7.47058821
%float_9_46274471 = OpConstant %float 9.46274471
%float_11_4549017 = OpConstant %float 11.4549017
%float_13_4470587 = OpConstant %float 13.4470587
%float_15_4392157 = OpConstant %float 15.4392157
%float_17_4313736 = OpConstant %float 17.4313736
%float_19_4235287 = OpConstant %float 19.4235287
%float_21_4156857 = OpConstant %float 21.4156857
%float_23_4078426 = OpConstant %float 23.4078426
%float_25_3999996 = OpConstant %float 25.3999996
%float_27_3921566 = OpConstant %float 27.3921566
%float_29_3843136 = OpConstant %float 29.3843136
%float_31_3764706 = OpConstant %float 31.3764706
%float_33_3686256 = OpConstant %float 33.3686256
        %218 = OpConstantComposite %_arr_float_uint_18 %float_0 %float_1_49411798 %float_3_48627496 %float_5_47843122 %float_7_47058821 %float_9_46274471 %float_11_4549017 %float_13_4470587 %float_15_4392157 %float_17_4313736 %float_19_4235287 %float_21_4156857 %float_23_4078426 %float_25_3999996 %float_27_3921566 %float_29_3843136 %float_31_3764706 %float_33_3686256
%float_0_098093003 = OpConstant %float 0.098093003
%float_0_0907210037 = OpConstant %float 0.0907210037
%float_0_0788149983 = OpConstant %float 0.0788149983
%float_0_0643149987 = OpConstant %float 0.0643149987
%float_0_0492930003 = OpConstant %float 0.0492930003
%float_0_0354779996 = OpConstant %float 0.0354779996
%float_0_0239749998 = OpConstant %float 0.0239749998
%float_0_0152099999 = OpConstant %float 0.0152099999
%float_0_00905600004 = OpConstant %float 0.00905600004
%float_0_0050590001 = OpConstant %float 0.0050590001
%float_0_00265099993 = OpConstant %float 0.00265099993
%float_0_00130300003 = OpConstant %float 0.00130300003
%float_0_000600000028 = OpConstant %float 0.000600000028
%float_0_000258999993 = OpConstant %float 0.000258999993
%float_0_000104999999 = OpConstant %float 0.000104999999
%float_3_9999999en05 = OpConstant %float 3.9999999e-05
%float_1_40000002en05 = OpConstant %float 1.40000002e-05
        %236 = OpConstantComposite %_arr_float_uint_18 %float_0_0500140004 %float_0_098093003 %float_0_0907210037 %float_0_0788149983 %float_0_0643149987 %float_0_0492930003 %float_0_0354779996 %float_0_0239749998 %float_0_0152099999 %float_0_00905600004 %float_0_0050590001 %float_0_00265099993 %float_0_00130300003 %float_0_000600000028 %float_0_000258999993 %float_0_000104999999 %float_3_9999999en05 %float_1_40000002en05
         %uv = OpVariable %_ptr_Input_v3float Input
   %output_2 = OpVariable %_ptr_Output_v4float Output
%in_texture_0 = OpVariable %_ptr_Uniform_191 Uniform
  %sampler_1 = OpVariable %_ptr_Uniform_152 Uniform
%canvas__Constants = OpTypeStruct %macaw__Mat4
%_ptr_Function_canvas__Constants = OpTypePointer Function %canvas__Constants
%_ptr_PushConstant_canvas__Constants = OpTypePointer PushConstant %canvas__Constants
%_ptr_Function__ptr_PushConstant_canvas__Constants = OpTypePointer Function %_ptr_PushConstant_canvas__Constants
   %in_pos_1 = OpVariable %_ptr_Input_v2float Input
    %in_uv_1 = OpVariable %_ptr_Input_v2float Input
 %in_color_2 = OpVariable %_ptr_Input_v4float Input
%push_constants = OpVariable %_ptr_PushConstant_canvas__Constants PushConstant
   %out_uv_1 = OpVariable %_ptr_Output_v2float Output
%out_color_1 = OpVariable %_ptr_Output_v4float Output
%builtin_pos_2 = OpVariable %_ptr_Output_v4float Output
   %font_tex = OpVariable %_ptr_Uniform_149 Uniform
%font_sampler = OpVariable %_ptr_Uniform_152 Uniform
    %in_uv_2 = OpVariable %_ptr_Input_v2float Input
 %in_color_3 = OpVariable %_ptr_Input_v4float Input
%out_color_2 = OpVariable %_ptr_Output_v4float Output
    %input_0 = OpVariable %_ptr_Input_v3float Input
   %output_3 = OpVariable %_ptr_Output_v4float Output
%in_texture_1 = OpVariable %_ptr_Uniform_149 Uniform
  %sampler_2 = OpVariable %_ptr_Uniform_152 Uniform
    %input_1 = OpVariable %_ptr_Input_v3float Input
   %output_4 = OpVariable %_ptr_Output_v4float Output
%in_texture_2 = OpVariable %_ptr_Uniform_191 Uniform
  %sampler_3 = OpVariable %_ptr_Uniform_152 Uniform
%tonemap__TonemapConstants = OpTypeStruct %float %float
%_ptr_PushConstant_tonemap__TonemapConstants = OpTypePointer PushConstant %tonemap__TonemapConstants
%_ptr_Function__ptr_PushConstant_tonemap__TonemapConstants = OpTypePointer Function %_ptr_PushConstant_tonemap__TonemapConstants
        %242 = OpTypeFunction %float %_ptr_Function_v2float %float %float
        %243 = OpTypeFunction %float %_ptr_Function_v2float
%in_frag_coord = OpVariable %_ptr_Input_v4float Input
       %uv_0 = OpVariable %_ptr_Input_v3float Input
   %output_5 = OpVariable %_ptr_Output_v4float Output
        %img = OpVariable %_ptr_Uniform_149 Uniform
      %bloom = OpVariable %_ptr_Uniform_191 Uniform
  %sampler_4 = OpVariable %_ptr_Uniform_152 Uniform
%push_constants_0 = OpVariable %_ptr_PushConstant_tonemap__TonemapConstants PushConstant
       %uv_1 = OpVariable %_ptr_Input_v3float Input
   %output_l = OpVariable %_ptr_Output_v4float Output
   %output_r = OpVariable %_ptr_Output_v4float Output
      %img_0 = OpVariable %_ptr_Uniform_191 Uniform
    %bloom_0 = OpVariable %_ptr_Uniform_191 Uniform
  %sampler_5 = OpVariable %_ptr_Uniform_152 Uniform
%push_constants_1 = OpVariable %_ptr_PushConstant_tonemap__TonemapConstants PushConstant
        %244 = OpConstantComposite %v2float %float_1 %float_1
        %245 = OpConstantComposite %macaw__Vec3 %float_1 %float_1 %float_1
%_ptr_Function_tonemap__TonemapConstants = OpTypePointer Function %tonemap__TonemapConstants
%_ptr_PushConstant_float = OpTypePointer PushConstant %float
        %248 = OpUndef %tonemap__TonemapConstants
%float_0_212599993 = OpConstant %float 0.212599993
%float_0_715200007 = OpConstant %float 0.715200007
%float_0_0722000003 = OpConstant %float 0.0722000003
    %float_2 = OpConstant %float 2
%float_9_99999975en06 = OpConstant %float 9.99999975e-06
    %uint_16 = OpConstant %uint 16
%_arr_int_uint_16 = OpTypeArray %int %uint_16
%_ptr_Function__arr_int_uint_16 = OpTypePointer Function %_arr_int_uint_16
      %int_0 = OpConstant %int 0
      %int_8 = OpConstant %int 8
     %int_10 = OpConstant %int 10
     %int_12 = OpConstant %int 12
      %int_4 = OpConstant %int 4
     %int_14 = OpConstant %int 14
      %int_6 = OpConstant %int 6
     %uint_7 = OpConstant %uint 7
      %int_3 = OpConstant %int 3
     %uint_8 = OpConstant %uint 8
     %int_11 = OpConstant %int 11
     %uint_9 = OpConstant %uint 9
    %uint_10 = OpConstant %uint 10
      %int_9 = OpConstant %int 9
    %uint_11 = OpConstant %uint 11
     %int_15 = OpConstant %int 15
      %int_7 = OpConstant %int 7
    %uint_13 = OpConstant %uint 13
     %int_13 = OpConstant %int 13
    %uint_14 = OpConstant %uint 14
      %int_5 = OpConstant %int 5
    %uint_15 = OpConstant %uint 15
%uint_3472883712 = OpConstant %uint 3472883712
%uint_1325400063 = OpConstant %uint 1325400063
%int_2147483647 = OpConstant %int 2147483647
%int_n2147483648 = OpConstant %int -2147483648
  %float_7_5 = OpConstant %float 7.5
 %float_3825 = OpConstant %float 3825
%float_0_0599999987 = OpConstant %float 0.0599999987
%float_0_100000001 = OpConstant %float 0.100000001
        %286 = OpTypeFunction %float %float %float %float %float
        %287 = OpTypeSampledImage %149
        %288 = OpTypeSampledImage %191
      %false = OpConstantFalse %bool
       %true = OpConstantTrue %bool
    %false_0 = OpConstantFalse %bool
     %true_0 = OpConstantTrue %bool
    %false_1 = OpConstantFalse %bool
     %true_1 = OpConstantTrue %bool
    %false_2 = OpConstantFalse %bool
     %true_2 = OpConstantTrue %bool
    %false_3 = OpConstantFalse %bool
     %true_3 = OpConstantTrue %bool
    %false_4 = OpConstantFalse %bool
     %true_4 = OpConstantTrue %bool
    %false_5 = OpConstantFalse %bool
     %true_5 = OpConstantTrue %bool
    %false_6 = OpConstantFalse %bool
     %true_6 = OpConstantTrue %bool
    %false_7 = OpConstantFalse %bool
     %true_7 = OpConstantTrue %bool
    %false_8 = OpConstantFalse %bool
     %true_8 = OpConstantTrue %bool
    %false_9 = OpConstantFalse %bool
     %true_9 = OpConstantTrue %bool
   %false_10 = OpConstantFalse %bool
    %true_10 = OpConstantTrue %bool
        %313 = OpUndef %macaw__Vec3
        %314 = OpUndef %v4float
        %315 = OpUndef %v3float
        %316 = OpUndef %float
        %317 = OpUndef %v2float
%ark_shaders__color__decode_srgb = OpFunction %void None %117
        %318 = OpFunctionParameter %_ptr_Function_macaw__Vec3
        %319 = OpFunctionParameter %_ptr_Function_macaw__Vec3
        %320 = OpLabel
        %321 = OpVariable %_ptr_Function_macaw__Vec3 Function
        %322 = OpVariable %_ptr_Function_macaw__Vec3 Function
        %323 = OpVariable %_ptr_Function_macaw__Vec3 Function
        %324 = OpVariable %_ptr_Function_macaw__Vec3 Function
        %325 = OpVariable %_ptr_Function_macaw__Vec3 Function
        %326 = OpVariable %_ptr_Function_macaw__Vec3 Function
        %327 = OpVariable %_ptr_Function_macaw__Vec3 Function
        %328 = OpVariable %_ptr_Function_macaw__Vec3 Function
               OpCopyMemory %322 %319
        %329 = OpAccessChain %_ptr_Function_float %322 %uint_0
        %330 = OpLoad %float %329
        %331 = OpFDiv %float %330 %float_12_9200001
        %332 = OpAccessChain %_ptr_Function_float %322 %uint_1
        %333 = OpLoad %float %332
        %334 = OpFDiv %float %333 %float_12_9200001
        %335 = OpAccessChain %_ptr_Function_float %322 %uint_2
        %336 = OpLoad %float %335
        %337 = OpFDiv %float %336 %float_12_9200001
        %338 = OpAccessChain %_ptr_Function_float %321 %uint_0
               OpStore %338 %331
        %339 = OpAccessChain %_ptr_Function_float %321 %uint_1
               OpStore %339 %334
        %340 = OpAccessChain %_ptr_Function_float %321 %uint_2
               OpStore %340 %337
               OpCopyMemory %324 %319
        %341 = OpCompositeInsert %macaw__Vec3 %float_0_0549999997 %313 0
        %342 = OpCompositeInsert %macaw__Vec3 %float_0_0549999997 %341 1
        %343 = OpCompositeInsert %macaw__Vec3 %float_0_0549999997 %342 2
        %344 = OpAccessChain %_ptr_Function_float %324 %uint_0
        %345 = OpLoad %float %344
        %346 = OpCompositeExtract %float %343 0
        %347 = OpFAdd %float %345 %346
        %348 = OpAccessChain %_ptr_Function_float %324 %uint_1
        %349 = OpLoad %float %348
        %350 = OpCompositeExtract %float %343 1
        %351 = OpFAdd %float %349 %350
        %352 = OpAccessChain %_ptr_Function_float %324 %uint_2
        %353 = OpLoad %float %352
        %354 = OpCompositeExtract %float %343 2
        %355 = OpFAdd %float %353 %354
        %356 = OpCompositeInsert %macaw__Vec3 %347 %313 0
        %357 = OpCompositeInsert %macaw__Vec3 %351 %356 1
        %358 = OpCompositeInsert %macaw__Vec3 %355 %357 2
        %359 = OpCompositeExtract %float %358 0
        %360 = OpExtInst %float %1 Pow %359 %float_2_4000001
        %361 = OpCompositeExtract %float %358 1
        %362 = OpExtInst %float %1 Pow %361 %float_2_4000001
        %363 = OpCompositeExtract %float %358 2
        %364 = OpExtInst %float %1 Pow %363 %float_2_4000001
        %365 = OpAccessChain %_ptr_Function_float %323 %uint_0
               OpStore %365 %360
        %366 = OpAccessChain %_ptr_Function_float %323 %uint_1
               OpStore %366 %362
        %367 = OpAccessChain %_ptr_Function_float %323 %uint_2
               OpStore %367 %364
               OpCopyMemory %325 %319
        %368 = OpAccessChain %_ptr_Function_float %326 %uint_0
               OpStore %368 %float_0_0404499993
        %369 = OpAccessChain %_ptr_Function_float %326 %uint_1
               OpStore %369 %float_0_0404499993
        %370 = OpAccessChain %_ptr_Function_float %326 %uint_2
               OpStore %370 %float_0_0404499993
               OpCopyMemory %327 %321
               OpCopyMemory %328 %323
        %371 = OpFunctionCall %void %_glam__f32__vec3__Vec3_as_macaw__vec3_ext__Vec3Ext___step_select %318 %325 %326 %327 %328
               OpReturn
               OpFunctionEnd
%ark_shaders__color__decode_srgba = OpFunction %void None %118
        %372 = OpFunctionParameter %_ptr_Function_v4float
        %373 = OpFunctionParameter %_ptr_Function_v4float
        %374 = OpLabel
        %375 = OpVariable %_ptr_Function_macaw__Vec3 Function
        %376 = OpVariable %_ptr_Function_macaw__Vec3 Function
        %377 = OpVariable %_ptr_Function_v4float Function
        %378 = OpLoad %v4float %373
               OpStore %377 %378
        %379 = OpFunctionCall %void %_glam__f32__vec4__Vec4_as_core__convert__Into_glam__f32__vec3__Vec3____into %376 %377
        %380 = OpFunctionCall %void %ark_shaders__color__decode_srgb %375 %376
        %381 = OpAccessChain %_ptr_Function_float %373 %uint_3
        %382 = OpLoad %float %381
        %383 = OpAccessChain %_ptr_Function_float %375 %uint_0
        %384 = OpLoad %float %383
        %385 = OpAccessChain %_ptr_Function_float %375 %uint_1
        %386 = OpLoad %float %385
        %387 = OpAccessChain %_ptr_Function_float %375 %uint_2
        %388 = OpLoad %float %387
        %389 = OpAccessChain %_ptr_Function_float %372 %uint_0
               OpStore %389 %384
        %390 = OpAccessChain %_ptr_Function_float %372 %uint_1
               OpStore %390 %386
        %391 = OpAccessChain %_ptr_Function_float %372 %uint_2
               OpStore %391 %388
        %392 = OpAccessChain %_ptr_Function_float %372 %uint_3
               OpStore %392 %382
               OpReturn
               OpFunctionEnd
          %2 = OpFunction %void None %145
        %393 = OpLabel
        %394 = OpVariable %_ptr_Function_line__GlobalUniforms Function
        %395 = OpVariable %_ptr_Function_macaw__Mat4 Function
        %396 = OpVariable %_ptr_Function_macaw__Mat4 Function
               OpCopyMemory %394 %global_uniforms
        %397 = OpLoad %v3float %in_pos
        %398 = OpLoad %v4float %in_color
               OpStore %diffuse_color %398
        %399 = OpLoad %uint %view_idx
        %400 = OpIEqual %bool %399 %uint_0
               OpSelectionMerge %401 None
               OpBranchConditional %400 %402 %403
        %402 = OpLabel
        %404 = OpAccessChain %_ptr_Function_macaw__Mat4 %394 %uint_0
               OpCopyMemory %395 %404
        %405 = OpCompositeExtract %float %397 0
        %406 = OpCompositeExtract %float %397 1
        %407 = OpCompositeExtract %float %397 2
        %408 = OpCompositeInsert %v4float %405 %314 0
        %409 = OpCompositeInsert %v4float %406 %408 1
        %410 = OpCompositeInsert %v4float %407 %409 2
        %411 = OpCompositeInsert %v4float %float_1 %410 3
        %412 = OpAccessChain %_ptr_Function_v4float %395 %uint_0
        %413 = OpLoad %v4float %412
        %414 = OpCompositeExtract %float %411 0
        %415 = OpCompositeExtract %float %411 0
        %416 = OpCompositeExtract %float %411 0
        %417 = OpCompositeExtract %float %411 0
        %418 = OpCompositeInsert %v4float %414 %314 0
        %419 = OpCompositeInsert %v4float %415 %418 1
        %420 = OpCompositeInsert %v4float %416 %419 2
        %421 = OpCompositeInsert %v4float %417 %420 3
        %422 = OpCompositeExtract %float %413 0
        %423 = OpCompositeExtract %float %421 0
        %424 = OpFMul %float %422 %423
        %425 = OpCompositeExtract %float %413 1
        %426 = OpCompositeExtract %float %421 1
        %427 = OpFMul %float %425 %426
        %428 = OpCompositeExtract %float %413 2
        %429 = OpCompositeExtract %float %421 2
        %430 = OpFMul %float %428 %429
        %431 = OpCompositeExtract %float %413 3
        %432 = OpCompositeExtract %float %421 3
        %433 = OpFMul %float %431 %432
        %434 = OpCompositeInsert %v4float %424 %314 0
        %435 = OpCompositeInsert %v4float %427 %434 1
        %436 = OpCompositeInsert %v4float %430 %435 2
        %437 = OpCompositeInsert %v4float %433 %436 3
        %438 = OpAccessChain %_ptr_Function_v4float %395 %uint_1
        %439 = OpLoad %v4float %438
        %440 = OpCompositeExtract %float %411 1
        %441 = OpCompositeExtract %float %411 1
        %442 = OpCompositeExtract %float %411 1
        %443 = OpCompositeExtract %float %411 1
        %444 = OpCompositeInsert %v4float %440 %314 0
        %445 = OpCompositeInsert %v4float %441 %444 1
        %446 = OpCompositeInsert %v4float %442 %445 2
        %447 = OpCompositeInsert %v4float %443 %446 3
        %448 = OpCompositeExtract %float %439 0
        %449 = OpCompositeExtract %float %447 0
        %450 = OpFMul %float %448 %449
        %451 = OpCompositeExtract %float %437 0
        %452 = OpFAdd %float %450 %451
        %453 = OpCompositeExtract %float %439 1
        %454 = OpCompositeExtract %float %447 1
        %455 = OpFMul %float %453 %454
        %456 = OpCompositeExtract %float %437 1
        %457 = OpFAdd %float %455 %456
        %458 = OpCompositeExtract %float %439 2
        %459 = OpCompositeExtract %float %447 2
        %460 = OpFMul %float %458 %459
        %461 = OpCompositeExtract %float %437 2
        %462 = OpFAdd %float %460 %461
        %463 = OpCompositeExtract %float %439 3
        %464 = OpCompositeExtract %float %447 3
        %465 = OpFMul %float %463 %464
        %466 = OpCompositeExtract %float %437 3
        %467 = OpFAdd %float %465 %466
        %468 = OpCompositeInsert %v4float %452 %314 0
        %469 = OpCompositeInsert %v4float %457 %468 1
        %470 = OpCompositeInsert %v4float %462 %469 2
        %471 = OpCompositeInsert %v4float %467 %470 3
        %472 = OpAccessChain %_ptr_Function_v4float %395 %uint_2
        %473 = OpLoad %v4float %472
        %474 = OpCompositeExtract %float %411 2
        %475 = OpCompositeExtract %float %411 2
        %476 = OpCompositeExtract %float %411 2
        %477 = OpCompositeExtract %float %411 2
        %478 = OpCompositeInsert %v4float %474 %314 0
        %479 = OpCompositeInsert %v4float %475 %478 1
        %480 = OpCompositeInsert %v4float %476 %479 2
        %481 = OpCompositeInsert %v4float %477 %480 3
        %482 = OpCompositeExtract %float %473 0
        %483 = OpCompositeExtract %float %481 0
        %484 = OpFMul %float %482 %483
        %485 = OpCompositeExtract %float %471 0
        %486 = OpFAdd %float %484 %485
        %487 = OpCompositeExtract %float %473 1
        %488 = OpCompositeExtract %float %481 1
        %489 = OpFMul %float %487 %488
        %490 = OpCompositeExtract %float %471 1
        %491 = OpFAdd %float %489 %490
        %492 = OpCompositeExtract %float %473 2
        %493 = OpCompositeExtract %float %481 2
        %494 = OpFMul %float %492 %493
        %495 = OpCompositeExtract %float %471 2
        %496 = OpFAdd %float %494 %495
        %497 = OpCompositeExtract %float %473 3
        %498 = OpCompositeExtract %float %481 3
        %499 = OpFMul %float %497 %498
        %500 = OpCompositeExtract %float %471 3
        %501 = OpFAdd %float %499 %500
        %502 = OpCompositeInsert %v4float %486 %314 0
        %503 = OpCompositeInsert %v4float %491 %502 1
        %504 = OpCompositeInsert %v4float %496 %503 2
        %505 = OpCompositeInsert %v4float %501 %504 3
        %506 = OpAccessChain %_ptr_Function_v4float %395 %uint_3
        %507 = OpLoad %v4float %506
        %508 = OpCompositeExtract %float %411 3
        %509 = OpCompositeExtract %float %411 3
        %510 = OpCompositeExtract %float %411 3
        %511 = OpCompositeExtract %float %411 3
        %512 = OpCompositeInsert %v4float %508 %314 0
        %513 = OpCompositeInsert %v4float %509 %512 1
        %514 = OpCompositeInsert %v4float %510 %513 2
        %515 = OpCompositeInsert %v4float %511 %514 3
        %516 = OpCompositeExtract %float %507 0
        %517 = OpCompositeExtract %float %515 0
        %518 = OpFMul %float %516 %517
        %519 = OpCompositeExtract %float %505 0
        %520 = OpFAdd %float %518 %519
        %521 = OpCompositeExtract %float %507 1
        %522 = OpCompositeExtract %float %515 1
        %523 = OpFMul %float %521 %522
        %524 = OpCompositeExtract %float %505 1
        %525 = OpFAdd %float %523 %524
        %526 = OpCompositeExtract %float %507 2
        %527 = OpCompositeExtract %float %515 2
        %528 = OpFMul %float %526 %527
        %529 = OpCompositeExtract %float %505 2
        %530 = OpFAdd %float %528 %529
        %531 = OpCompositeExtract %float %507 3
        %532 = OpCompositeExtract %float %515 3
        %533 = OpFMul %float %531 %532
        %534 = OpCompositeExtract %float %505 3
        %535 = OpFAdd %float %533 %534
        %536 = OpCompositeInsert %v4float %520 %314 0
        %537 = OpCompositeInsert %v4float %525 %536 1
        %538 = OpCompositeInsert %v4float %530 %537 2
        %539 = OpCompositeInsert %v4float %535 %538 3
               OpBranch %401
        %403 = OpLabel
        %540 = OpAccessChain %_ptr_Function_macaw__Mat4 %394 %uint_1
               OpCopyMemory %396 %540
        %541 = OpCompositeExtract %float %397 0
        %542 = OpCompositeExtract %float %397 1
        %543 = OpCompositeExtract %float %397 2
        %544 = OpCompositeInsert %v4float %541 %314 0
        %545 = OpCompositeInsert %v4float %542 %544 1
        %546 = OpCompositeInsert %v4float %543 %545 2
        %547 = OpCompositeInsert %v4float %float_1 %546 3
        %548 = OpAccessChain %_ptr_Function_v4float %396 %uint_0
        %549 = OpLoad %v4float %548
        %550 = OpCompositeExtract %float %547 0
        %551 = OpCompositeExtract %float %547 0
        %552 = OpCompositeExtract %float %547 0
        %553 = OpCompositeExtract %float %547 0
        %554 = OpCompositeInsert %v4float %550 %314 0
        %555 = OpCompositeInsert %v4float %551 %554 1
        %556 = OpCompositeInsert %v4float %552 %555 2
        %557 = OpCompositeInsert %v4float %553 %556 3
        %558 = OpCompositeExtract %float %549 0
        %559 = OpCompositeExtract %float %557 0
        %560 = OpFMul %float %558 %559
        %561 = OpCompositeExtract %float %549 1
        %562 = OpCompositeExtract %float %557 1
        %563 = OpFMul %float %561 %562
        %564 = OpCompositeExtract %float %549 2
        %565 = OpCompositeExtract %float %557 2
        %566 = OpFMul %float %564 %565
        %567 = OpCompositeExtract %float %549 3
        %568 = OpCompositeExtract %float %557 3
        %569 = OpFMul %float %567 %568
        %570 = OpCompositeInsert %v4float %560 %314 0
        %571 = OpCompositeInsert %v4float %563 %570 1
        %572 = OpCompositeInsert %v4float %566 %571 2
        %573 = OpCompositeInsert %v4float %569 %572 3
        %574 = OpAccessChain %_ptr_Function_v4float %396 %uint_1
        %575 = OpLoad %v4float %574
        %576 = OpCompositeExtract %float %547 1
        %577 = OpCompositeExtract %float %547 1
        %578 = OpCompositeExtract %float %547 1
        %579 = OpCompositeExtract %float %547 1
        %580 = OpCompositeInsert %v4float %576 %314 0
        %581 = OpCompositeInsert %v4float %577 %580 1
        %582 = OpCompositeInsert %v4float %578 %581 2
        %583 = OpCompositeInsert %v4float %579 %582 3
        %584 = OpCompositeExtract %float %575 0
        %585 = OpCompositeExtract %float %583 0
        %586 = OpFMul %float %584 %585
        %587 = OpCompositeExtract %float %573 0
        %588 = OpFAdd %float %586 %587
        %589 = OpCompositeExtract %float %575 1
        %590 = OpCompositeExtract %float %583 1
        %591 = OpFMul %float %589 %590
        %592 = OpCompositeExtract %float %573 1
        %593 = OpFAdd %float %591 %592
        %594 = OpCompositeExtract %float %575 2
        %595 = OpCompositeExtract %float %583 2
        %596 = OpFMul %float %594 %595
        %597 = OpCompositeExtract %float %573 2
        %598 = OpFAdd %float %596 %597
        %599 = OpCompositeExtract %float %575 3
        %600 = OpCompositeExtract %float %583 3
        %601 = OpFMul %float %599 %600
        %602 = OpCompositeExtract %float %573 3
        %603 = OpFAdd %float %601 %602
        %604 = OpCompositeInsert %v4float %588 %314 0
        %605 = OpCompositeInsert %v4float %593 %604 1
        %606 = OpCompositeInsert %v4float %598 %605 2
        %607 = OpCompositeInsert %v4float %603 %606 3
        %608 = OpAccessChain %_ptr_Function_v4float %396 %uint_2
        %609 = OpLoad %v4float %608
        %610 = OpCompositeExtract %float %547 2
        %611 = OpCompositeExtract %float %547 2
        %612 = OpCompositeExtract %float %547 2
        %613 = OpCompositeExtract %float %547 2
        %614 = OpCompositeInsert %v4float %610 %314 0
        %615 = OpCompositeInsert %v4float %611 %614 1
        %616 = OpCompositeInsert %v4float %612 %615 2
        %617 = OpCompositeInsert %v4float %613 %616 3
        %618 = OpCompositeExtract %float %609 0
        %619 = OpCompositeExtract %float %617 0
        %620 = OpFMul %float %618 %619
        %621 = OpCompositeExtract %float %607 0
        %622 = OpFAdd %float %620 %621
        %623 = OpCompositeExtract %float %609 1
        %624 = OpCompositeExtract %float %617 1
        %625 = OpFMul %float %623 %624
        %626 = OpCompositeExtract %float %607 1
        %627 = OpFAdd %float %625 %626
        %628 = OpCompositeExtract %float %609 2
        %629 = OpCompositeExtract %float %617 2
        %630 = OpFMul %float %628 %629
        %631 = OpCompositeExtract %float %607 2
        %632 = OpFAdd %float %630 %631
        %633 = OpCompositeExtract %float %609 3
        %634 = OpCompositeExtract %float %617 3
        %635 = OpFMul %float %633 %634
        %636 = OpCompositeExtract %float %607 3
        %637 = OpFAdd %float %635 %636
        %638 = OpCompositeInsert %v4float %622 %314 0
        %639 = OpCompositeInsert %v4float %627 %638 1
        %640 = OpCompositeInsert %v4float %632 %639 2
        %641 = OpCompositeInsert %v4float %637 %640 3
        %642 = OpAccessChain %_ptr_Function_v4float %396 %uint_3
        %643 = OpLoad %v4float %642
        %644 = OpCompositeExtract %float %547 3
        %645 = OpCompositeExtract %float %547 3
        %646 = OpCompositeExtract %float %547 3
        %647 = OpCompositeExtract %float %547 3
        %648 = OpCompositeInsert %v4float %644 %314 0
        %649 = OpCompositeInsert %v4float %645 %648 1
        %650 = OpCompositeInsert %v4float %646 %649 2
        %651 = OpCompositeInsert %v4float %647 %650 3
        %652 = OpCompositeExtract %float %643 0
        %653 = OpCompositeExtract %float %651 0
        %654 = OpFMul %float %652 %653
        %655 = OpCompositeExtract %float %641 0
        %656 = OpFAdd %float %654 %655
        %657 = OpCompositeExtract %float %643 1
        %658 = OpCompositeExtract %float %651 1
        %659 = OpFMul %float %657 %658
        %660 = OpCompositeExtract %float %641 1
        %661 = OpFAdd %float %659 %660
        %662 = OpCompositeExtract %float %643 2
        %663 = OpCompositeExtract %float %651 2
        %664 = OpFMul %float %662 %663
        %665 = OpCompositeExtract %float %641 2
        %666 = OpFAdd %float %664 %665
        %667 = OpCompositeExtract %float %643 3
        %668 = OpCompositeExtract %float %651 3
        %669 = OpFMul %float %667 %668
        %670 = OpCompositeExtract %float %641 3
        %671 = OpFAdd %float %669 %670
        %672 = OpCompositeInsert %v4float %656 %314 0
        %673 = OpCompositeInsert %v4float %661 %672 1
        %674 = OpCompositeInsert %v4float %666 %673 2
        %675 = OpCompositeInsert %v4float %671 %674 3
               OpBranch %401
        %401 = OpLabel
        %676 = OpPhi %v4float %314 %402 %641 %403
        %677 = OpPhi %v4float %314 %402 %651 %403
        %678 = OpPhi %v4float %314 %402 %643 %403
        %679 = OpPhi %v4float %314 %402 %675 %403
        %680 = OpPhi %v4float %314 %402 %547 %403
        %681 = OpPhi %v4float %314 %402 %651 %403
        %682 = OpPhi %v4float %314 %402 %607 %403
        %683 = OpPhi %v4float %314 %402 %617 %403
        %684 = OpPhi %v4float %314 %402 %609 %403
        %685 = OpPhi %v4float %314 %402 %641 %403
        %686 = OpPhi %v4float %314 %402 %547 %403
        %687 = OpPhi %v4float %314 %402 %617 %403
        %688 = OpPhi %v4float %314 %402 %573 %403
        %689 = OpPhi %v4float %314 %402 %583 %403
        %690 = OpPhi %v4float %314 %402 %575 %403
        %691 = OpPhi %v4float %314 %402 %607 %403
        %692 = OpPhi %v4float %314 %402 %547 %403
        %693 = OpPhi %v4float %314 %402 %583 %403
        %694 = OpPhi %v4float %314 %402 %557 %403
        %695 = OpPhi %v4float %314 %402 %549 %403
        %696 = OpPhi %v4float %314 %402 %547 %403
        %697 = OpPhi %v4float %314 %402 %557 %403
        %698 = OpPhi %v4float %314 %402 %547 %403
        %699 = OpPhi %v4float %505 %402 %314 %403
        %700 = OpPhi %v4float %515 %402 %314 %403
        %701 = OpPhi %v4float %507 %402 %314 %403
        %702 = OpPhi %v4float %539 %402 %314 %403
        %703 = OpPhi %v4float %411 %402 %314 %403
        %704 = OpPhi %v4float %515 %402 %314 %403
        %705 = OpPhi %v4float %471 %402 %314 %403
        %706 = OpPhi %v4float %481 %402 %314 %403
        %707 = OpPhi %v4float %473 %402 %314 %403
        %708 = OpPhi %v4float %505 %402 %314 %403
        %709 = OpPhi %v4float %411 %402 %314 %403
        %710 = OpPhi %v4float %481 %402 %314 %403
        %711 = OpPhi %v4float %437 %402 %314 %403
        %712 = OpPhi %v4float %447 %402 %314 %403
        %713 = OpPhi %v4float %439 %402 %314 %403
        %714 = OpPhi %v4float %471 %402 %314 %403
        %715 = OpPhi %v4float %411 %402 %314 %403
        %716 = OpPhi %v4float %447 %402 %314 %403
        %717 = OpPhi %v4float %421 %402 %314 %403
        %718 = OpPhi %v4float %413 %402 %314 %403
        %719 = OpPhi %v4float %411 %402 %314 %403
        %720 = OpPhi %v4float %421 %402 %314 %403
        %721 = OpPhi %v4float %411 %402 %314 %403
        %722 = OpPhi %v4float %411 %402 %314 %403
        %723 = OpPhi %v3float %397 %402 %315 %403
        %724 = OpPhi %v4float %411 %402 %314 %403
        %725 = OpPhi %v4float %314 %402 %547 %403
        %726 = OpPhi %v3float %315 %402 %397 %403
        %727 = OpPhi %v4float %314 %402 %547 %403
        %728 = OpPhi %v4float %539 %402 %675 %403
        %729 = OpCompositeExtract %float %728 1
        %730 = OpFNegate %float %729
        %731 = OpCompositeInsert %v4float %730 %728 1
               OpStore %builtin_pos %731
               OpReturn
               OpFunctionEnd
          %9 = OpFunction %void None %145
        %732 = OpLabel
        %733 = OpLoad %v4float %diffuse_color_0
               OpStore %out_color %733
               OpReturn
               OpFunctionEnd
         %12 = OpFunction %void None %145
        %734 = OpLabel
        %735 = OpVariable %_ptr_Function_macaw__Mat4 Function
        %736 = OpVariable %_ptr_Function_v4float Function
        %737 = OpVariable %_ptr_Function_v4float Function
        %738 = OpLoad %v2float %in_pos_0
               OpCopyMemory %735 %proj_matrix
        %739 = OpCompositeExtract %float %738 0
        %740 = OpCompositeExtract %float %738 1
        %741 = OpCompositeInsert %v4float %739 %314 0
        %742 = OpCompositeInsert %v4float %740 %741 1
        %743 = OpCompositeInsert %v4float %float_0 %742 2
        %744 = OpCompositeInsert %v4float %float_1 %743 3
        %745 = OpAccessChain %_ptr_Function_v4float %735 %uint_0
        %746 = OpLoad %v4float %745
        %747 = OpCompositeExtract %float %744 0
        %748 = OpCompositeExtract %float %744 0
        %749 = OpCompositeExtract %float %744 0
        %750 = OpCompositeExtract %float %744 0
        %751 = OpCompositeInsert %v4float %747 %314 0
        %752 = OpCompositeInsert %v4float %748 %751 1
        %753 = OpCompositeInsert %v4float %749 %752 2
        %754 = OpCompositeInsert %v4float %750 %753 3
        %755 = OpCompositeExtract %float %746 0
        %756 = OpCompositeExtract %float %754 0
        %757 = OpFMul %float %755 %756
        %758 = OpCompositeExtract %float %746 1
        %759 = OpCompositeExtract %float %754 1
        %760 = OpFMul %float %758 %759
        %761 = OpCompositeExtract %float %746 2
        %762 = OpCompositeExtract %float %754 2
        %763 = OpFMul %float %761 %762
        %764 = OpCompositeExtract %float %746 3
        %765 = OpCompositeExtract %float %754 3
        %766 = OpFMul %float %764 %765
        %767 = OpCompositeInsert %v4float %757 %314 0
        %768 = OpCompositeInsert %v4float %760 %767 1
        %769 = OpCompositeInsert %v4float %763 %768 2
        %770 = OpCompositeInsert %v4float %766 %769 3
        %771 = OpAccessChain %_ptr_Function_v4float %735 %uint_1
        %772 = OpLoad %v4float %771
        %773 = OpCompositeExtract %float %744 1
        %774 = OpCompositeExtract %float %744 1
        %775 = OpCompositeExtract %float %744 1
        %776 = OpCompositeExtract %float %744 1
        %777 = OpCompositeInsert %v4float %773 %314 0
        %778 = OpCompositeInsert %v4float %774 %777 1
        %779 = OpCompositeInsert %v4float %775 %778 2
        %780 = OpCompositeInsert %v4float %776 %779 3
        %781 = OpCompositeExtract %float %772 0
        %782 = OpCompositeExtract %float %780 0
        %783 = OpFMul %float %781 %782
        %784 = OpCompositeExtract %float %770 0
        %785 = OpFAdd %float %783 %784
        %786 = OpCompositeExtract %float %772 1
        %787 = OpCompositeExtract %float %780 1
        %788 = OpFMul %float %786 %787
        %789 = OpCompositeExtract %float %770 1
        %790 = OpFAdd %float %788 %789
        %791 = OpCompositeExtract %float %772 2
        %792 = OpCompositeExtract %float %780 2
        %793 = OpFMul %float %791 %792
        %794 = OpCompositeExtract %float %770 2
        %795 = OpFAdd %float %793 %794
        %796 = OpCompositeExtract %float %772 3
        %797 = OpCompositeExtract %float %780 3
        %798 = OpFMul %float %796 %797
        %799 = OpCompositeExtract %float %770 3
        %800 = OpFAdd %float %798 %799
        %801 = OpCompositeInsert %v4float %785 %314 0
        %802 = OpCompositeInsert %v4float %790 %801 1
        %803 = OpCompositeInsert %v4float %795 %802 2
        %804 = OpCompositeInsert %v4float %800 %803 3
        %805 = OpAccessChain %_ptr_Function_v4float %735 %uint_2
        %806 = OpLoad %v4float %805
        %807 = OpCompositeExtract %float %744 2
        %808 = OpCompositeExtract %float %744 2
        %809 = OpCompositeExtract %float %744 2
        %810 = OpCompositeExtract %float %744 2
        %811 = OpCompositeInsert %v4float %807 %314 0
        %812 = OpCompositeInsert %v4float %808 %811 1
        %813 = OpCompositeInsert %v4float %809 %812 2
        %814 = OpCompositeInsert %v4float %810 %813 3
        %815 = OpCompositeExtract %float %806 0
        %816 = OpCompositeExtract %float %814 0
        %817 = OpFMul %float %815 %816
        %818 = OpCompositeExtract %float %804 0
        %819 = OpFAdd %float %817 %818
        %820 = OpCompositeExtract %float %806 1
        %821 = OpCompositeExtract %float %814 1
        %822 = OpFMul %float %820 %821
        %823 = OpCompositeExtract %float %804 1
        %824 = OpFAdd %float %822 %823
        %825 = OpCompositeExtract %float %806 2
        %826 = OpCompositeExtract %float %814 2
        %827 = OpFMul %float %825 %826
        %828 = OpCompositeExtract %float %804 2
        %829 = OpFAdd %float %827 %828
        %830 = OpCompositeExtract %float %806 3
        %831 = OpCompositeExtract %float %814 3
        %832 = OpFMul %float %830 %831
        %833 = OpCompositeExtract %float %804 3
        %834 = OpFAdd %float %832 %833
        %835 = OpCompositeInsert %v4float %819 %314 0
        %836 = OpCompositeInsert %v4float %824 %835 1
        %837 = OpCompositeInsert %v4float %829 %836 2
        %838 = OpCompositeInsert %v4float %834 %837 3
        %839 = OpAccessChain %_ptr_Function_v4float %735 %uint_3
        %840 = OpLoad %v4float %839
        %841 = OpCompositeExtract %float %744 3
        %842 = OpCompositeExtract %float %744 3
        %843 = OpCompositeExtract %float %744 3
        %844 = OpCompositeExtract %float %744 3
        %845 = OpCompositeInsert %v4float %841 %314 0
        %846 = OpCompositeInsert %v4float %842 %845 1
        %847 = OpCompositeInsert %v4float %843 %846 2
        %848 = OpCompositeInsert %v4float %844 %847 3
        %849 = OpCompositeExtract %float %840 0
        %850 = OpCompositeExtract %float %848 0
        %851 = OpFMul %float %849 %850
        %852 = OpCompositeExtract %float %838 0
        %853 = OpFAdd %float %851 %852
        %854 = OpCompositeExtract %float %840 1
        %855 = OpCompositeExtract %float %848 1
        %856 = OpFMul %float %854 %855
        %857 = OpCompositeExtract %float %838 1
        %858 = OpFAdd %float %856 %857
        %859 = OpCompositeExtract %float %840 2
        %860 = OpCompositeExtract %float %848 2
        %861 = OpFMul %float %859 %860
        %862 = OpCompositeExtract %float %838 2
        %863 = OpFAdd %float %861 %862
        %864 = OpCompositeExtract %float %840 3
        %865 = OpCompositeExtract %float %848 3
        %866 = OpFMul %float %864 %865
        %867 = OpCompositeExtract %float %838 3
        %868 = OpFAdd %float %866 %867
        %869 = OpCompositeInsert %v4float %853 %314 0
        %870 = OpCompositeInsert %v4float %858 %869 1
        %871 = OpCompositeInsert %v4float %863 %870 2
        %872 = OpCompositeInsert %v4float %868 %871 3
        %873 = OpCompositeExtract %float %872 1
        %874 = OpFNegate %float %873
        %875 = OpCompositeInsert %v4float %874 %872 1
        %876 = OpLoad %v2float %in_uv
               OpStore %out_uv %876
        %877 = OpLoad %v4float %in_color_0
               OpStore %737 %877
        %878 = OpFunctionCall %void %ark_shaders__color__decode_srgba %736 %737
        %879 = OpLoad %v4float %736
               OpStore %out_color_0 %879
               OpStore %builtin_pos_0 %875
               OpReturn
               OpFunctionEnd
         %20 = OpFunction %void None %145
        %880 = OpLabel
        %881 = OpVariable %_ptr_Function_149 Function
        %882 = OpVariable %_ptr_Function_v4float Function
        %883 = OpVariable %_ptr_Function_v2float Function
        %884 = OpLoad %149 %in_texture
               OpStore %881 %884
        %885 = OpLoad %152 %sampler
        %886 = OpLoad %v2float %in_uv_0
               OpStore %883 %886
        %887 = OpFunctionCall %void %_spirv_std__textures__Image2d___sample %882 %881 %885 %883
        %888 = OpLoad %v4float %882
        %889 = OpLoad %v4float %in_color_1
        %890 = OpCompositeExtract %float %889 0
        %891 = OpCompositeExtract %float %888 0
        %892 = OpFMul %float %890 %891
        %893 = OpCompositeExtract %float %889 1
        %894 = OpCompositeExtract %float %888 1
        %895 = OpFMul %float %893 %894
        %896 = OpCompositeExtract %float %889 2
        %897 = OpCompositeExtract %float %888 2
        %898 = OpFMul %float %896 %897
        %899 = OpCompositeExtract %float %889 3
        %900 = OpCompositeExtract %float %888 3
        %901 = OpFMul %float %899 %900
        %902 = OpCompositeInsert %v4float %892 %314 0
        %903 = OpCompositeInsert %v4float %895 %902 1
        %904 = OpCompositeInsert %v4float %898 %903 2
        %905 = OpCompositeInsert %v4float %901 %904 3
               OpStore %output %905
               OpReturn
               OpFunctionEnd
         %26 = OpFunction %void None %145
        %906 = OpLabel
        %907 = OpVariable %_ptr_Function_sky__SkyUniforms Function
        %908 = OpVariable %_ptr_Function_macaw__Mat4 Function
        %909 = OpVariable %_ptr_Function_macaw__Mat4 Function
        %910 = OpLoad %uint %view_idx_0
        %911 = OpLoad %int %vertex_idx
               OpCopyMemory %907 %sky_uniforms
        %912 = OpBitwiseAnd %int %911 %int_1
        %913 = OpBitwiseAnd %int %int_2 %int_31
        %914 = OpShiftLeftLogical %int %912 %913
        %915 = OpConvertSToF %float %914
        %916 = OpFAdd %float %float_n1 %915
        %917 = OpBitwiseAnd %int %911 %int_2
        %918 = OpBitwiseAnd %int %int_1 %int_31
        %919 = OpShiftLeftLogical %int %917 %918
        %920 = OpConvertSToF %float %919
        %921 = OpFAdd %float %float_n1 %920
        %922 = OpCompositeInsert %v4float %916 %314 0
        %923 = OpCompositeInsert %v4float %921 %922 1
        %924 = OpCompositeInsert %v4float %float_0 %923 2
        %925 = OpCompositeInsert %v4float %float_1 %924 3
        %926 = OpIEqual %bool %910 %uint_0
               OpSelectionMerge %927 None
               OpBranchConditional %926 %928 %929
        %928 = OpLabel
        %930 = OpAccessChain %_ptr_Function_macaw__Mat4 %907 %uint_0
               OpCopyMemory %908 %930
        %931 = OpAccessChain %_ptr_Function_v4float %908 %uint_0
        %932 = OpLoad %v4float %931
        %933 = OpCompositeExtract %float %925 0
        %934 = OpCompositeExtract %float %925 0
        %935 = OpCompositeExtract %float %925 0
        %936 = OpCompositeExtract %float %925 0
        %937 = OpCompositeInsert %v4float %933 %314 0
        %938 = OpCompositeInsert %v4float %934 %937 1
        %939 = OpCompositeInsert %v4float %935 %938 2
        %940 = OpCompositeInsert %v4float %936 %939 3
        %941 = OpCompositeExtract %float %932 0
        %942 = OpCompositeExtract %float %940 0
        %943 = OpFMul %float %941 %942
        %944 = OpCompositeExtract %float %932 1
        %945 = OpCompositeExtract %float %940 1
        %946 = OpFMul %float %944 %945
        %947 = OpCompositeExtract %float %932 2
        %948 = OpCompositeExtract %float %940 2
        %949 = OpFMul %float %947 %948
        %950 = OpCompositeExtract %float %932 3
        %951 = OpCompositeExtract %float %940 3
        %952 = OpFMul %float %950 %951
        %953 = OpCompositeInsert %v4float %943 %314 0
        %954 = OpCompositeInsert %v4float %946 %953 1
        %955 = OpCompositeInsert %v4float %949 %954 2
        %956 = OpCompositeInsert %v4float %952 %955 3
        %957 = OpAccessChain %_ptr_Function_v4float %908 %uint_1
        %958 = OpLoad %v4float %957
        %959 = OpCompositeExtract %float %925 1
        %960 = OpCompositeExtract %float %925 1
        %961 = OpCompositeExtract %float %925 1
        %962 = OpCompositeExtract %float %925 1
        %963 = OpCompositeInsert %v4float %959 %314 0
        %964 = OpCompositeInsert %v4float %960 %963 1
        %965 = OpCompositeInsert %v4float %961 %964 2
        %966 = OpCompositeInsert %v4float %962 %965 3
        %967 = OpCompositeExtract %float %958 0
        %968 = OpCompositeExtract %float %966 0
        %969 = OpFMul %float %967 %968
        %970 = OpCompositeExtract %float %956 0
        %971 = OpFAdd %float %969 %970
        %972 = OpCompositeExtract %float %958 1
        %973 = OpCompositeExtract %float %966 1
        %974 = OpFMul %float %972 %973
        %975 = OpCompositeExtract %float %956 1
        %976 = OpFAdd %float %974 %975
        %977 = OpCompositeExtract %float %958 2
        %978 = OpCompositeExtract %float %966 2
        %979 = OpFMul %float %977 %978
        %980 = OpCompositeExtract %float %956 2
        %981 = OpFAdd %float %979 %980
        %982 = OpCompositeExtract %float %958 3
        %983 = OpCompositeExtract %float %966 3
        %984 = OpFMul %float %982 %983
        %985 = OpCompositeExtract %float %956 3
        %986 = OpFAdd %float %984 %985
        %987 = OpCompositeInsert %v4float %971 %314 0
        %988 = OpCompositeInsert %v4float %976 %987 1
        %989 = OpCompositeInsert %v4float %981 %988 2
        %990 = OpCompositeInsert %v4float %986 %989 3
        %991 = OpAccessChain %_ptr_Function_v4float %908 %uint_2
        %992 = OpLoad %v4float %991
        %993 = OpCompositeExtract %float %925 2
        %994 = OpCompositeExtract %float %925 2
        %995 = OpCompositeExtract %float %925 2
        %996 = OpCompositeExtract %float %925 2
        %997 = OpCompositeInsert %v4float %993 %314 0
        %998 = OpCompositeInsert %v4float %994 %997 1
        %999 = OpCompositeInsert %v4float %995 %998 2
       %1000 = OpCompositeInsert %v4float %996 %999 3
       %1001 = OpCompositeExtract %float %992 0
       %1002 = OpCompositeExtract %float %1000 0
       %1003 = OpFMul %float %1001 %1002
       %1004 = OpCompositeExtract %float %990 0
       %1005 = OpFAdd %float %1003 %1004
       %1006 = OpCompositeExtract %float %992 1
       %1007 = OpCompositeExtract %float %1000 1
       %1008 = OpFMul %float %1006 %1007
       %1009 = OpCompositeExtract %float %990 1
       %1010 = OpFAdd %float %1008 %1009
       %1011 = OpCompositeExtract %float %992 2
       %1012 = OpCompositeExtract %float %1000 2
       %1013 = OpFMul %float %1011 %1012
       %1014 = OpCompositeExtract %float %990 2
       %1015 = OpFAdd %float %1013 %1014
       %1016 = OpCompositeExtract %float %992 3
       %1017 = OpCompositeExtract %float %1000 3
       %1018 = OpFMul %float %1016 %1017
       %1019 = OpCompositeExtract %float %990 3
       %1020 = OpFAdd %float %1018 %1019
       %1021 = OpCompositeInsert %v4float %1005 %314 0
       %1022 = OpCompositeInsert %v4float %1010 %1021 1
       %1023 = OpCompositeInsert %v4float %1015 %1022 2
       %1024 = OpCompositeInsert %v4float %1020 %1023 3
       %1025 = OpAccessChain %_ptr_Function_v4float %908 %uint_3
       %1026 = OpLoad %v4float %1025
       %1027 = OpCompositeExtract %float %925 3
       %1028 = OpCompositeExtract %float %925 3
       %1029 = OpCompositeExtract %float %925 3
       %1030 = OpCompositeExtract %float %925 3
       %1031 = OpCompositeInsert %v4float %1027 %314 0
       %1032 = OpCompositeInsert %v4float %1028 %1031 1
       %1033 = OpCompositeInsert %v4float %1029 %1032 2
       %1034 = OpCompositeInsert %v4float %1030 %1033 3
       %1035 = OpCompositeExtract %float %1026 0
       %1036 = OpCompositeExtract %float %1034 0
       %1037 = OpFMul %float %1035 %1036
       %1038 = OpCompositeExtract %float %1024 0
       %1039 = OpFAdd %float %1037 %1038
       %1040 = OpCompositeExtract %float %1026 1
       %1041 = OpCompositeExtract %float %1034 1
       %1042 = OpFMul %float %1040 %1041
       %1043 = OpCompositeExtract %float %1024 1
       %1044 = OpFAdd %float %1042 %1043
       %1045 = OpCompositeExtract %float %1026 2
       %1046 = OpCompositeExtract %float %1034 2
       %1047 = OpFMul %float %1045 %1046
       %1048 = OpCompositeExtract %float %1024 2
       %1049 = OpFAdd %float %1047 %1048
       %1050 = OpCompositeExtract %float %1026 3
       %1051 = OpCompositeExtract %float %1034 3
       %1052 = OpFMul %float %1050 %1051
       %1053 = OpCompositeExtract %float %1024 3
       %1054 = OpFAdd %float %1052 %1053
       %1055 = OpCompositeInsert %v4float %1039 %314 0
       %1056 = OpCompositeInsert %v4float %1044 %1055 1
       %1057 = OpCompositeInsert %v4float %1049 %1056 2
       %1058 = OpCompositeInsert %v4float %1054 %1057 3
               OpBranch %927
        %929 = OpLabel
       %1059 = OpAccessChain %_ptr_Function_macaw__Mat4 %907 %uint_1
               OpCopyMemory %909 %1059
       %1060 = OpAccessChain %_ptr_Function_v4float %909 %uint_0
       %1061 = OpLoad %v4float %1060
       %1062 = OpCompositeExtract %float %925 0
       %1063 = OpCompositeExtract %float %925 0
       %1064 = OpCompositeExtract %float %925 0
       %1065 = OpCompositeExtract %float %925 0
       %1066 = OpCompositeInsert %v4float %1062 %314 0
       %1067 = OpCompositeInsert %v4float %1063 %1066 1
       %1068 = OpCompositeInsert %v4float %1064 %1067 2
       %1069 = OpCompositeInsert %v4float %1065 %1068 3
       %1070 = OpCompositeExtract %float %1061 0
       %1071 = OpCompositeExtract %float %1069 0
       %1072 = OpFMul %float %1070 %1071
       %1073 = OpCompositeExtract %float %1061 1
       %1074 = OpCompositeExtract %float %1069 1
       %1075 = OpFMul %float %1073 %1074
       %1076 = OpCompositeExtract %float %1061 2
       %1077 = OpCompositeExtract %float %1069 2
       %1078 = OpFMul %float %1076 %1077
       %1079 = OpCompositeExtract %float %1061 3
       %1080 = OpCompositeExtract %float %1069 3
       %1081 = OpFMul %float %1079 %1080
       %1082 = OpCompositeInsert %v4float %1072 %314 0
       %1083 = OpCompositeInsert %v4float %1075 %1082 1
       %1084 = OpCompositeInsert %v4float %1078 %1083 2
       %1085 = OpCompositeInsert %v4float %1081 %1084 3
       %1086 = OpAccessChain %_ptr_Function_v4float %909 %uint_1
       %1087 = OpLoad %v4float %1086
       %1088 = OpCompositeExtract %float %925 1
       %1089 = OpCompositeExtract %float %925 1
       %1090 = OpCompositeExtract %float %925 1
       %1091 = OpCompositeExtract %float %925 1
       %1092 = OpCompositeInsert %v4float %1088 %314 0
       %1093 = OpCompositeInsert %v4float %1089 %1092 1
       %1094 = OpCompositeInsert %v4float %1090 %1093 2
       %1095 = OpCompositeInsert %v4float %1091 %1094 3
       %1096 = OpCompositeExtract %float %1087 0
       %1097 = OpCompositeExtract %float %1095 0
       %1098 = OpFMul %float %1096 %1097
       %1099 = OpCompositeExtract %float %1085 0
       %1100 = OpFAdd %float %1098 %1099
       %1101 = OpCompositeExtract %float %1087 1
       %1102 = OpCompositeExtract %float %1095 1
       %1103 = OpFMul %float %1101 %1102
       %1104 = OpCompositeExtract %float %1085 1
       %1105 = OpFAdd %float %1103 %1104
       %1106 = OpCompositeExtract %float %1087 2
       %1107 = OpCompositeExtract %float %1095 2
       %1108 = OpFMul %float %1106 %1107
       %1109 = OpCompositeExtract %float %1085 2
       %1110 = OpFAdd %float %1108 %1109
       %1111 = OpCompositeExtract %float %1087 3
       %1112 = OpCompositeExtract %float %1095 3
       %1113 = OpFMul %float %1111 %1112
       %1114 = OpCompositeExtract %float %1085 3
       %1115 = OpFAdd %float %1113 %1114
       %1116 = OpCompositeInsert %v4float %1100 %314 0
       %1117 = OpCompositeInsert %v4float %1105 %1116 1
       %1118 = OpCompositeInsert %v4float %1110 %1117 2
       %1119 = OpCompositeInsert %v4float %1115 %1118 3
       %1120 = OpAccessChain %_ptr_Function_v4float %909 %uint_2
       %1121 = OpLoad %v4float %1120
       %1122 = OpCompositeExtract %float %925 2
       %1123 = OpCompositeExtract %float %925 2
       %1124 = OpCompositeExtract %float %925 2
       %1125 = OpCompositeExtract %float %925 2
       %1126 = OpCompositeInsert %v4float %1122 %314 0
       %1127 = OpCompositeInsert %v4float %1123 %1126 1
       %1128 = OpCompositeInsert %v4float %1124 %1127 2
       %1129 = OpCompositeInsert %v4float %1125 %1128 3
       %1130 = OpCompositeExtract %float %1121 0
       %1131 = OpCompositeExtract %float %1129 0
       %1132 = OpFMul %float %1130 %1131
       %1133 = OpCompositeExtract %float %1119 0
       %1134 = OpFAdd %float %1132 %1133
       %1135 = OpCompositeExtract %float %1121 1
       %1136 = OpCompositeExtract %float %1129 1
       %1137 = OpFMul %float %1135 %1136
       %1138 = OpCompositeExtract %float %1119 1
       %1139 = OpFAdd %float %1137 %1138
       %1140 = OpCompositeExtract %float %1121 2
       %1141 = OpCompositeExtract %float %1129 2
       %1142 = OpFMul %float %1140 %1141
       %1143 = OpCompositeExtract %float %1119 2
       %1144 = OpFAdd %float %1142 %1143
       %1145 = OpCompositeExtract %float %1121 3
       %1146 = OpCompositeExtract %float %1129 3
       %1147 = OpFMul %float %1145 %1146
       %1148 = OpCompositeExtract %float %1119 3
       %1149 = OpFAdd %float %1147 %1148
       %1150 = OpCompositeInsert %v4float %1134 %314 0
       %1151 = OpCompositeInsert %v4float %1139 %1150 1
       %1152 = OpCompositeInsert %v4float %1144 %1151 2
       %1153 = OpCompositeInsert %v4float %1149 %1152 3
       %1154 = OpAccessChain %_ptr_Function_v4float %909 %uint_3
       %1155 = OpLoad %v4float %1154
       %1156 = OpCompositeExtract %float %925 3
       %1157 = OpCompositeExtract %float %925 3
       %1158 = OpCompositeExtract %float %925 3
       %1159 = OpCompositeExtract %float %925 3
       %1160 = OpCompositeInsert %v4float %1156 %314 0
       %1161 = OpCompositeInsert %v4float %1157 %1160 1
       %1162 = OpCompositeInsert %v4float %1158 %1161 2
       %1163 = OpCompositeInsert %v4float %1159 %1162 3
       %1164 = OpCompositeExtract %float %1155 0
       %1165 = OpCompositeExtract %float %1163 0
       %1166 = OpFMul %float %1164 %1165
       %1167 = OpCompositeExtract %float %1153 0
       %1168 = OpFAdd %float %1166 %1167
       %1169 = OpCompositeExtract %float %1155 1
       %1170 = OpCompositeExtract %float %1163 1
       %1171 = OpFMul %float %1169 %1170
       %1172 = OpCompositeExtract %float %1153 1
       %1173 = OpFAdd %float %1171 %1172
       %1174 = OpCompositeExtract %float %1155 2
       %1175 = OpCompositeExtract %float %1163 2
       %1176 = OpFMul %float %1174 %1175
       %1177 = OpCompositeExtract %float %1153 2
       %1178 = OpFAdd %float %1176 %1177
       %1179 = OpCompositeExtract %float %1155 3
       %1180 = OpCompositeExtract %float %1163 3
       %1181 = OpFMul %float %1179 %1180
       %1182 = OpCompositeExtract %float %1153 3
       %1183 = OpFAdd %float %1181 %1182
       %1184 = OpCompositeInsert %v4float %1168 %314 0
       %1185 = OpCompositeInsert %v4float %1173 %1184 1
       %1186 = OpCompositeInsert %v4float %1178 %1185 2
       %1187 = OpCompositeInsert %v4float %1183 %1186 3
               OpBranch %927
        %927 = OpLabel
       %1188 = OpPhi %v4float %1024 %928 %314 %929
       %1189 = OpPhi %v4float %1034 %928 %314 %929
       %1190 = OpPhi %v4float %1026 %928 %314 %929
       %1191 = OpPhi %v4float %1058 %928 %314 %929
       %1192 = OpPhi %v4float %925 %928 %314 %929
       %1193 = OpPhi %v4float %1034 %928 %314 %929
       %1194 = OpPhi %v4float %990 %928 %314 %929
       %1195 = OpPhi %v4float %1000 %928 %314 %929
       %1196 = OpPhi %v4float %992 %928 %314 %929
       %1197 = OpPhi %v4float %1024 %928 %314 %929
       %1198 = OpPhi %v4float %925 %928 %314 %929
       %1199 = OpPhi %v4float %1000 %928 %314 %929
       %1200 = OpPhi %v4float %956 %928 %314 %929
       %1201 = OpPhi %v4float %966 %928 %314 %929
       %1202 = OpPhi %v4float %958 %928 %314 %929
       %1203 = OpPhi %v4float %990 %928 %314 %929
       %1204 = OpPhi %v4float %925 %928 %314 %929
       %1205 = OpPhi %v4float %966 %928 %314 %929
       %1206 = OpPhi %v4float %940 %928 %314 %929
       %1207 = OpPhi %v4float %932 %928 %314 %929
       %1208 = OpPhi %v4float %925 %928 %314 %929
       %1209 = OpPhi %v4float %940 %928 %314 %929
       %1210 = OpPhi %v4float %925 %928 %314 %929
       %1211 = OpPhi %v4float %314 %928 %1153 %929
       %1212 = OpPhi %v4float %314 %928 %1163 %929
       %1213 = OpPhi %v4float %314 %928 %1155 %929
       %1214 = OpPhi %v4float %314 %928 %1187 %929
       %1215 = OpPhi %v4float %314 %928 %925 %929
       %1216 = OpPhi %v4float %314 %928 %1163 %929
       %1217 = OpPhi %v4float %314 %928 %1119 %929
       %1218 = OpPhi %v4float %314 %928 %1129 %929
       %1219 = OpPhi %v4float %314 %928 %1121 %929
       %1220 = OpPhi %v4float %314 %928 %1153 %929
       %1221 = OpPhi %v4float %314 %928 %925 %929
       %1222 = OpPhi %v4float %314 %928 %1129 %929
       %1223 = OpPhi %v4float %314 %928 %1085 %929
       %1224 = OpPhi %v4float %314 %928 %1095 %929
       %1225 = OpPhi %v4float %314 %928 %1087 %929
       %1226 = OpPhi %v4float %314 %928 %1119 %929
       %1227 = OpPhi %v4float %314 %928 %925 %929
       %1228 = OpPhi %v4float %314 %928 %1095 %929
       %1229 = OpPhi %v4float %314 %928 %1069 %929
       %1230 = OpPhi %v4float %314 %928 %1061 %929
       %1231 = OpPhi %v4float %314 %928 %925 %929
       %1232 = OpPhi %v4float %314 %928 %1069 %929
       %1233 = OpPhi %v4float %314 %928 %925 %929
       %1234 = OpPhi %v4float %925 %928 %314 %929
       %1235 = OpPhi %v4float %314 %928 %925 %929
       %1236 = OpPhi %v4float %1058 %928 %1187 %929
               OpStore %out_world_pos %1236
       %1237 = OpCompositeExtract %float %925 1
       %1238 = OpFNegate %float %1237
       %1239 = OpCompositeInsert %v4float %1238 %925 1
               OpStore %builtin_pos_1 %1239
               OpReturn
               OpFunctionEnd
         %32 = OpFunction %void None %145
       %1240 = OpLabel
       %1241 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1242 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1243 = OpVariable %_ptr_Function_sky__SkyUniforms Function
       %1244 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1245 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1246 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1247 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1248 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1249 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1250 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1251 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1252 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1253 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1254 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1255 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1256 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1257 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1258 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1259 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1260 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1261 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1262 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1263 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1264 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1265 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1266 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1267 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1268 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1269 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1270 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1271 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1272 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1273 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1274 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1275 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1276 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %1277 = OpLoad %v4float %in_world_pos
       %1278 = OpCompositeExtract %float %1277 0
       %1279 = OpCompositeExtract %float %1277 1
       %1280 = OpCompositeExtract %float %1277 2
       %1281 = OpAccessChain %_ptr_Function_float %1242 %uint_0
               OpStore %1281 %1278
       %1282 = OpAccessChain %_ptr_Function_float %1242 %uint_1
               OpStore %1282 %1279
       %1283 = OpAccessChain %_ptr_Function_float %1242 %uint_2
               OpStore %1283 %1280
               OpCopyMemory %1261 %1242
               OpCopyMemory %1262 %1242
               OpCopyMemory %1263 %1262
               OpCopyMemory %1264 %1263
               OpCopyMemory %1265 %1263
       %1284 = OpAccessChain %_ptr_Function_float %1264 %uint_0
       %1285 = OpLoad %float %1284
       %1286 = OpAccessChain %_ptr_Function_float %1265 %uint_0
       %1287 = OpLoad %float %1286
       %1288 = OpFMul %float %1285 %1287
       %1289 = OpAccessChain %_ptr_Function_float %1264 %uint_1
       %1290 = OpLoad %float %1289
       %1291 = OpAccessChain %_ptr_Function_float %1265 %uint_1
       %1292 = OpLoad %float %1291
       %1293 = OpFMul %float %1290 %1292
       %1294 = OpFAdd %float %1288 %1293
       %1295 = OpAccessChain %_ptr_Function_float %1264 %uint_2
       %1296 = OpLoad %float %1295
       %1297 = OpAccessChain %_ptr_Function_float %1265 %uint_2
       %1298 = OpLoad %float %1297
       %1299 = OpFMul %float %1296 %1298
       %1300 = OpFAdd %float %1294 %1299
       %1301 = OpExtInst %float %1 Sqrt %1300
       %1302 = OpFDiv %float %float_1 %1301
       %1303 = OpAccessChain %_ptr_Function_float %1261 %uint_0
       %1304 = OpLoad %float %1303
       %1305 = OpFMul %float %1304 %1302
       %1306 = OpAccessChain %_ptr_Function_float %1261 %uint_1
       %1307 = OpLoad %float %1306
       %1308 = OpFMul %float %1307 %1302
       %1309 = OpAccessChain %_ptr_Function_float %1261 %uint_2
       %1310 = OpLoad %float %1309
       %1311 = OpFMul %float %1310 %1302
       %1312 = OpAccessChain %_ptr_Function_float %1241 %uint_0
               OpStore %1312 %1305
       %1313 = OpAccessChain %_ptr_Function_float %1241 %uint_1
               OpStore %1313 %1308
       %1314 = OpAccessChain %_ptr_Function_float %1241 %uint_2
               OpStore %1314 %1311
               OpCopyMemory %1243 %sky_uniforms_0
       %1315 = OpAccessChain %_ptr_Function_v4float %1243 %uint_6
       %1316 = OpLoad %v4float %1315
       %1317 = OpCompositeExtract %float %1316 0
       %1318 = OpCompositeExtract %float %1316 1
       %1319 = OpCompositeExtract %float %1316 2
       %1320 = OpAccessChain %_ptr_Function_float %1244 %uint_0
               OpStore %1320 %1317
       %1321 = OpAccessChain %_ptr_Function_float %1244 %uint_1
               OpStore %1321 %1318
       %1322 = OpAccessChain %_ptr_Function_float %1244 %uint_2
               OpStore %1322 %1319
       %1323 = OpAccessChain %_ptr_Function_v4float %1243 %uint_5
       %1324 = OpLoad %v4float %1323
       %1325 = OpCompositeExtract %float %1324 0
       %1326 = OpCompositeExtract %float %1324 1
       %1327 = OpCompositeExtract %float %1324 2
       %1328 = OpAccessChain %_ptr_Function_float %1245 %uint_0
               OpStore %1328 %1325
       %1329 = OpAccessChain %_ptr_Function_float %1245 %uint_1
               OpStore %1329 %1326
       %1330 = OpAccessChain %_ptr_Function_float %1245 %uint_2
               OpStore %1330 %1327
       %1331 = OpAccessChain %_ptr_Function_v4float %1243 %uint_4
       %1332 = OpLoad %v4float %1331
       %1333 = OpCompositeExtract %float %1332 0
       %1334 = OpCompositeExtract %float %1332 1
       %1335 = OpCompositeExtract %float %1332 2
       %1336 = OpAccessChain %_ptr_Function_float %1246 %uint_0
               OpStore %1336 %1333
       %1337 = OpAccessChain %_ptr_Function_float %1246 %uint_1
               OpStore %1337 %1334
       %1338 = OpAccessChain %_ptr_Function_float %1246 %uint_2
               OpStore %1338 %1335
       %1339 = OpAccessChain %_ptr_Function_float %1241 %uint_1
       %1340 = OpLoad %float %1339
       %1341 = OpFOrdGreaterThan %bool %1340 %float_0
               OpSelectionMerge %1342 None
               OpBranchConditional %1341 %1343 %1344
       %1343 = OpLabel
       %1345 = OpAccessChain %_ptr_Function_v4float %1243 %uint_2
       %1346 = OpLoad %v4float %1345
       %1347 = OpCompositeExtract %float %1346 0
       %1348 = OpCompositeExtract %float %1346 1
       %1349 = OpCompositeExtract %float %1346 2
       %1350 = OpAccessChain %_ptr_Function_float %1249 %uint_0
               OpStore %1350 %1347
       %1351 = OpAccessChain %_ptr_Function_float %1249 %uint_1
               OpStore %1351 %1348
       %1352 = OpAccessChain %_ptr_Function_float %1249 %uint_2
               OpStore %1352 %1349
               OpCopyMemory %1269 %1249
               OpCopyMemory %1270 %1249
               OpCopyMemory %1271 %1270
               OpCopyMemory %1272 %1271
               OpCopyMemory %1273 %1271
       %1353 = OpAccessChain %_ptr_Function_float %1272 %uint_0
       %1354 = OpLoad %float %1353
       %1355 = OpAccessChain %_ptr_Function_float %1273 %uint_0
       %1356 = OpLoad %float %1355
       %1357 = OpFMul %float %1354 %1356
       %1358 = OpAccessChain %_ptr_Function_float %1272 %uint_1
       %1359 = OpLoad %float %1358
       %1360 = OpAccessChain %_ptr_Function_float %1273 %uint_1
       %1361 = OpLoad %float %1360
       %1362 = OpFMul %float %1359 %1361
       %1363 = OpFAdd %float %1357 %1362
       %1364 = OpAccessChain %_ptr_Function_float %1272 %uint_2
       %1365 = OpLoad %float %1364
       %1366 = OpAccessChain %_ptr_Function_float %1273 %uint_2
       %1367 = OpLoad %float %1366
       %1368 = OpFMul %float %1365 %1367
       %1369 = OpFAdd %float %1363 %1368
       %1370 = OpExtInst %float %1 Sqrt %1369
       %1371 = OpFDiv %float %float_1 %1370
       %1372 = OpAccessChain %_ptr_Function_float %1269 %uint_0
       %1373 = OpLoad %float %1372
       %1374 = OpFMul %float %1373 %1371
       %1375 = OpAccessChain %_ptr_Function_float %1269 %uint_1
       %1376 = OpLoad %float %1375
       %1377 = OpFMul %float %1376 %1371
       %1378 = OpAccessChain %_ptr_Function_float %1269 %uint_2
       %1379 = OpLoad %float %1378
       %1380 = OpFMul %float %1379 %1371
       %1381 = OpAccessChain %_ptr_Function_float %1248 %uint_0
               OpStore %1381 %1374
       %1382 = OpAccessChain %_ptr_Function_float %1248 %uint_1
               OpStore %1382 %1377
       %1383 = OpAccessChain %_ptr_Function_float %1248 %uint_2
               OpStore %1383 %1380
               OpCopyMemory %1250 %1248
               OpCopyMemory %1251 %1241
       %1384 = OpAccessChain %_ptr_Function_float %1250 %uint_0
       %1385 = OpLoad %float %1384
       %1386 = OpAccessChain %_ptr_Function_float %1251 %uint_0
       %1387 = OpLoad %float %1386
       %1388 = OpFMul %float %1385 %1387
       %1389 = OpAccessChain %_ptr_Function_float %1250 %uint_1
       %1390 = OpLoad %float %1389
       %1391 = OpAccessChain %_ptr_Function_float %1251 %uint_1
       %1392 = OpLoad %float %1391
       %1393 = OpFMul %float %1390 %1392
       %1394 = OpFAdd %float %1388 %1393
       %1395 = OpAccessChain %_ptr_Function_float %1250 %uint_2
       %1396 = OpLoad %float %1395
       %1397 = OpAccessChain %_ptr_Function_float %1251 %uint_2
       %1398 = OpLoad %float %1397
       %1399 = OpFMul %float %1396 %1398
       %1400 = OpFAdd %float %1394 %1399
       %1401 = OpFSub %float %1400 %float_0_998000026
       %1402 = OpExtInst %float %1 FMax %1401 %float_0
       %1403 = OpFDiv %float %1402 %float_0_00199997425
       %1404 = OpFMul %float %1403 %float_30
               OpCopyMemory %1252 %1248
               OpCopyMemory %1253 %1241
       %1405 = OpAccessChain %_ptr_Function_float %1252 %uint_0
       %1406 = OpLoad %float %1405
       %1407 = OpAccessChain %_ptr_Function_float %1253 %uint_0
       %1408 = OpLoad %float %1407
       %1409 = OpFMul %float %1406 %1408
       %1410 = OpAccessChain %_ptr_Function_float %1252 %uint_1
       %1411 = OpLoad %float %1410
       %1412 = OpAccessChain %_ptr_Function_float %1253 %uint_1
       %1413 = OpLoad %float %1412
       %1414 = OpFMul %float %1411 %1413
       %1415 = OpFAdd %float %1409 %1414
       %1416 = OpAccessChain %_ptr_Function_float %1252 %uint_2
       %1417 = OpLoad %float %1416
       %1418 = OpAccessChain %_ptr_Function_float %1253 %uint_2
       %1419 = OpLoad %float %1418
       %1420 = OpFMul %float %1417 %1419
       %1421 = OpFAdd %float %1415 %1420
       %1422 = OpFSub %float %1421 %float_0_920000017
       %1423 = OpExtInst %float %1 FMax %1422 %float_0
       %1424 = OpFDiv %float %1423 %float_0_0799999833
       %1425 = OpExtInst %float %1 Pow %1424 %float_3
       %1426 = OpFMul %float %1425 %float_0_5
       %1427 = OpFAdd %float %1404 %1426
       %1428 = OpAccessChain %_ptr_Function_v4float %1243 %uint_3
       %1429 = OpLoad %v4float %1428
       %1430 = OpCompositeExtract %float %1429 0
       %1431 = OpCompositeExtract %float %1429 1
       %1432 = OpCompositeExtract %float %1429 2
       %1433 = OpCompositeInsert %macaw__Vec3 %1430 %313 0
       %1434 = OpCompositeInsert %macaw__Vec3 %1431 %1433 1
       %1435 = OpCompositeInsert %macaw__Vec3 %1432 %1434 2
       %1436 = OpCompositeExtract %float %1435 0
       %1437 = OpFMul %float %1436 %1427
       %1438 = OpCompositeExtract %float %1435 1
       %1439 = OpFMul %float %1438 %1427
       %1440 = OpCompositeExtract %float %1435 2
       %1441 = OpFMul %float %1440 %1427
       %1442 = OpCompositeInsert %macaw__Vec3 %1437 %313 0
       %1443 = OpCompositeInsert %macaw__Vec3 %1439 %1442 1
       %1444 = OpCompositeInsert %macaw__Vec3 %1441 %1443 2
       %1445 = OpCompositeExtract %float %1444 0
       %1446 = OpFMul %float %1445 %float_1
       %1447 = OpCompositeExtract %float %1444 1
       %1448 = OpFMul %float %1447 %float_1
       %1449 = OpCompositeExtract %float %1444 2
       %1450 = OpFMul %float %1449 %float_1
       %1451 = OpAccessChain %_ptr_Function_float %1254 %uint_0
               OpStore %1451 %1446
       %1452 = OpAccessChain %_ptr_Function_float %1254 %uint_1
               OpStore %1452 %1448
       %1453 = OpAccessChain %_ptr_Function_float %1254 %uint_2
               OpStore %1453 %1450
               OpCopyMemory %1255 %1244
               OpCopyMemory %1256 %1245
               OpCopyMemory %1274 %1255
               OpCopyMemory %1275 %1256
               OpCopyMemory %1276 %1255
       %1454 = OpAccessChain %_ptr_Function_float %1275 %uint_0
       %1455 = OpLoad %float %1454
       %1456 = OpAccessChain %_ptr_Function_float %1276 %uint_0
       %1457 = OpLoad %float %1456
       %1458 = OpFSub %float %1455 %1457
       %1459 = OpAccessChain %_ptr_Function_float %1275 %uint_1
       %1460 = OpLoad %float %1459
       %1461 = OpAccessChain %_ptr_Function_float %1276 %uint_1
       %1462 = OpLoad %float %1461
       %1463 = OpFSub %float %1460 %1462
       %1464 = OpAccessChain %_ptr_Function_float %1275 %uint_2
       %1465 = OpLoad %float %1464
       %1466 = OpAccessChain %_ptr_Function_float %1276 %uint_2
       %1467 = OpLoad %float %1466
       %1468 = OpFSub %float %1465 %1467
       %1469 = OpCompositeInsert %macaw__Vec3 %1458 %313 0
       %1470 = OpCompositeInsert %macaw__Vec3 %1463 %1469 1
       %1471 = OpCompositeInsert %macaw__Vec3 %1468 %1470 2
       %1472 = OpCompositeExtract %float %1471 0
       %1473 = OpFMul %float %1472 %1340
       %1474 = OpCompositeExtract %float %1471 1
       %1475 = OpFMul %float %1474 %1340
       %1476 = OpCompositeExtract %float %1471 2
       %1477 = OpFMul %float %1476 %1340
       %1478 = OpCompositeInsert %macaw__Vec3 %1473 %313 0
       %1479 = OpCompositeInsert %macaw__Vec3 %1475 %1478 1
       %1480 = OpCompositeInsert %macaw__Vec3 %1477 %1479 2
       %1481 = OpAccessChain %_ptr_Function_float %1274 %uint_0
       %1482 = OpLoad %float %1481
       %1483 = OpCompositeExtract %float %1480 0
       %1484 = OpFAdd %float %1482 %1483
       %1485 = OpAccessChain %_ptr_Function_float %1274 %uint_1
       %1486 = OpLoad %float %1485
       %1487 = OpCompositeExtract %float %1480 1
       %1488 = OpFAdd %float %1486 %1487
       %1489 = OpAccessChain %_ptr_Function_float %1274 %uint_2
       %1490 = OpLoad %float %1489
       %1491 = OpCompositeExtract %float %1480 2
       %1492 = OpFAdd %float %1490 %1491
       %1493 = OpCompositeInsert %macaw__Vec3 %1484 %313 0
       %1494 = OpCompositeInsert %macaw__Vec3 %1488 %1493 1
       %1495 = OpCompositeInsert %macaw__Vec3 %1492 %1494 2
               OpCopyMemory %1257 %1254
       %1496 = OpCompositeExtract %float %1495 0
       %1497 = OpAccessChain %_ptr_Function_float %1257 %uint_0
       %1498 = OpLoad %float %1497
       %1499 = OpFAdd %float %1496 %1498
       %1500 = OpCompositeExtract %float %1495 1
       %1501 = OpAccessChain %_ptr_Function_float %1257 %uint_1
       %1502 = OpLoad %float %1501
       %1503 = OpFAdd %float %1500 %1502
       %1504 = OpCompositeExtract %float %1495 2
       %1505 = OpAccessChain %_ptr_Function_float %1257 %uint_2
       %1506 = OpLoad %float %1505
       %1507 = OpFAdd %float %1504 %1506
       %1508 = OpAccessChain %_ptr_Function_float %1247 %uint_0
               OpStore %1508 %1499
       %1509 = OpAccessChain %_ptr_Function_float %1247 %uint_1
               OpStore %1509 %1503
       %1510 = OpAccessChain %_ptr_Function_float %1247 %uint_2
               OpStore %1510 %1507
               OpBranch %1342
       %1344 = OpLabel
       %1511 = OpFNegate %float %1340
               OpCopyMemory %1258 %1244
               OpCopyMemory %1259 %1246
       %1512 = OpFMul %float %1511 %1511
               OpCopyMemory %1266 %1258
               OpCopyMemory %1267 %1259
               OpCopyMemory %1268 %1258
       %1513 = OpAccessChain %_ptr_Function_float %1267 %uint_0
       %1514 = OpLoad %float %1513
       %1515 = OpAccessChain %_ptr_Function_float %1268 %uint_0
       %1516 = OpLoad %float %1515
       %1517 = OpFSub %float %1514 %1516
       %1518 = OpAccessChain %_ptr_Function_float %1267 %uint_1
       %1519 = OpLoad %float %1518
       %1520 = OpAccessChain %_ptr_Function_float %1268 %uint_1
       %1521 = OpLoad %float %1520
       %1522 = OpFSub %float %1519 %1521
       %1523 = OpAccessChain %_ptr_Function_float %1267 %uint_2
       %1524 = OpLoad %float %1523
       %1525 = OpAccessChain %_ptr_Function_float %1268 %uint_2
       %1526 = OpLoad %float %1525
       %1527 = OpFSub %float %1524 %1526
       %1528 = OpCompositeInsert %macaw__Vec3 %1517 %313 0
       %1529 = OpCompositeInsert %macaw__Vec3 %1522 %1528 1
       %1530 = OpCompositeInsert %macaw__Vec3 %1527 %1529 2
       %1531 = OpCompositeExtract %float %1530 0
       %1532 = OpFMul %float %1531 %1512
       %1533 = OpCompositeExtract %float %1530 1
       %1534 = OpFMul %float %1533 %1512
       %1535 = OpCompositeExtract %float %1530 2
       %1536 = OpFMul %float %1535 %1512
       %1537 = OpCompositeInsert %macaw__Vec3 %1532 %313 0
       %1538 = OpCompositeInsert %macaw__Vec3 %1534 %1537 1
       %1539 = OpCompositeInsert %macaw__Vec3 %1536 %1538 2
       %1540 = OpAccessChain %_ptr_Function_float %1266 %uint_0
       %1541 = OpLoad %float %1540
       %1542 = OpCompositeExtract %float %1539 0
       %1543 = OpFAdd %float %1541 %1542
       %1544 = OpAccessChain %_ptr_Function_float %1266 %uint_1
       %1545 = OpLoad %float %1544
       %1546 = OpCompositeExtract %float %1539 1
       %1547 = OpFAdd %float %1545 %1546
       %1548 = OpAccessChain %_ptr_Function_float %1266 %uint_2
       %1549 = OpLoad %float %1548
       %1550 = OpCompositeExtract %float %1539 2
       %1551 = OpFAdd %float %1549 %1550
       %1552 = OpAccessChain %_ptr_Function_float %1247 %uint_0
               OpStore %1552 %1543
       %1553 = OpAccessChain %_ptr_Function_float %1247 %uint_1
               OpStore %1553 %1547
       %1554 = OpAccessChain %_ptr_Function_float %1247 %uint_2
               OpStore %1554 %1551
               OpBranch %1342
       %1342 = OpLabel
       %1555 = OpPhi %macaw__Vec3 %1471 %1343 %313 %1344
       %1556 = OpPhi %macaw__Vec3 %1480 %1343 %313 %1344
       %1557 = OpPhi %float %1425 %1343 %316 %1344
       %1558 = OpPhi %float %1423 %1343 %316 %1344
       %1559 = OpPhi %float %1423 %1343 %316 %1344
       %1560 = OpPhi %float %1421 %1343 %316 %1344
       %1561 = OpPhi %float %1402 %1343 %316 %1344
       %1562 = OpPhi %float %1402 %1343 %316 %1344
       %1563 = OpPhi %float %1400 %1343 %316 %1344
       %1564 = OpPhi %float %1371 %1343 %316 %1344
       %1565 = OpPhi %float %1370 %1343 %316 %1344
       %1566 = OpPhi %float %1369 %1343 %316 %1344
       %1567 = OpPhi %float %1370 %1343 %316 %1344
       %1568 = OpPhi %float %1371 %1343 %316 %1344
       %1569 = OpPhi %macaw__Vec3 %313 %1343 %1530 %1344
       %1570 = OpPhi %macaw__Vec3 %313 %1343 %1539 %1344
       %1571 = OpPhi %v4float %1429 %1343 %314 %1344
       %1572 = OpPhi %v4float %1346 %1343 %314 %1344
       %1573 = OpPhi %macaw__Vec3 %1495 %1343 %313 %1344
       %1574 = OpPhi %macaw__Vec3 %1435 %1343 %313 %1344
       %1575 = OpPhi %macaw__Vec3 %1444 %1343 %313 %1344
       %1576 = OpPhi %float %1427 %1343 %316 %1344
       %1577 = OpPhi %float %1340 %1343 %1511 %1344
               OpCopyMemory %1260 %1247
       %1578 = OpAccessChain %_ptr_Function_float %1260 %uint_0
       %1579 = OpLoad %float %1578
       %1580 = OpAccessChain %_ptr_Function_float %1260 %uint_1
       %1581 = OpLoad %float %1580
       %1582 = OpAccessChain %_ptr_Function_float %1260 %uint_2
       %1583 = OpLoad %float %1582
       %1584 = OpCompositeInsert %v4float %1579 %314 0
       %1585 = OpCompositeInsert %v4float %1581 %1584 1
       %1586 = OpCompositeInsert %v4float %1583 %1585 2
       %1587 = OpCompositeInsert %v4float %float_1 %1586 3
               OpStore %output_0 %1587
               OpReturn
               OpFunctionEnd
         %36 = OpFunction %void None %145
       %1588 = OpLabel
       %1589 = OpLoad %int %vert_idx
       %1590 = OpBitwiseAnd %int %1589 %int_1
       %1591 = OpBitwiseAnd %int %int_2 %int_31
       %1592 = OpShiftLeftLogical %int %1590 %1591
       %1593 = OpConvertSToF %float %1592
       %1594 = OpFAdd %float %float_n1 %1593
       %1595 = OpBitwiseAnd %int %1589 %int_2
       %1596 = OpBitwiseAnd %int %int_1 %int_31
       %1597 = OpShiftLeftLogical %int %1595 %1596
       %1598 = OpConvertSToF %float %1597
       %1599 = OpFAdd %float %float_n1 %1598
       %1600 = OpCompositeInsert %v3float %1594 %315 0
       %1601 = OpCompositeInsert %v3float %1599 %1600 1
       %1602 = OpCompositeInsert %v3float %float_0 %1601 2
       %1603 = OpCompositeInsert %v3float %float_1 %315 0
       %1604 = OpCompositeInsert %v3float %float_1 %1603 1
       %1605 = OpCompositeInsert %v3float %float_1 %1604 2
       %1606 = OpCompositeExtract %float %1602 0
       %1607 = OpCompositeExtract %float %1605 0
       %1608 = OpFAdd %float %1606 %1607
       %1609 = OpCompositeExtract %float %1602 1
       %1610 = OpCompositeExtract %float %1605 1
       %1611 = OpFAdd %float %1609 %1610
       %1612 = OpCompositeExtract %float %1602 2
       %1613 = OpCompositeExtract %float %1605 2
       %1614 = OpFAdd %float %1612 %1613
       %1615 = OpCompositeInsert %v3float %1608 %315 0
       %1616 = OpCompositeInsert %v3float %1611 %1615 1
       %1617 = OpCompositeInsert %v3float %1614 %1616 2
       %1618 = OpCompositeExtract %float %1617 0
       %1619 = OpFMul %float %1618 %float_0_5
       %1620 = OpCompositeExtract %float %1617 1
       %1621 = OpFMul %float %1620 %float_0_5
       %1622 = OpCompositeExtract %float %1617 2
       %1623 = OpFMul %float %1622 %float_0_5
       %1624 = OpCompositeInsert %v3float %1619 %315 0
       %1625 = OpCompositeInsert %v3float %1621 %1624 1
       %1626 = OpCompositeInsert %v3float %1623 %1625 2
       %1627 = OpCompositeExtract %float %1626 1
       %1628 = OpFSub %float %float_1 %1627
       %1629 = OpCompositeInsert %v3float %1628 %1626 1
       %1630 = OpLoad %int %view_index
       %1631 = OpConvertSToF %float %1630
       %1632 = OpCompositeInsert %v3float %1631 %1629 2
       %1633 = OpCompositeInsert %v4float %1594 %314 0
       %1634 = OpCompositeInsert %v4float %1599 %1633 1
       %1635 = OpCompositeInsert %v4float %float_0 %1634 2
       %1636 = OpCompositeInsert %v4float %float_1 %1635 3
       %1637 = OpCompositeExtract %float %1636 1
       %1638 = OpFNegate %float %1637
       %1639 = OpCompositeInsert %v4float %1638 %1636 1
               OpStore %out_pos %1639
               OpStore %out_uv_0 %1632
               OpReturn
               OpFunctionEnd
         %41 = OpFunction %void None %145
       %1640 = OpLabel
       %1641 = OpVariable %_ptr_Function_191 Function
       %1642 = OpVariable %_ptr_Function__arr_float_uint_18 Function
       %1643 = OpVariable %_ptr_Function__arr_float_uint_18 Function
       %1644 = OpVariable %_ptr_Function__arr_float_uint_18 Function
       %1645 = OpVariable %_ptr_Function__arr_float_uint_18 Function
       %1646 = OpVariable %_ptr_Function_v4float Function
       %1647 = OpVariable %_ptr_Function_v3float Function
       %1648 = OpVariable %_ptr_Function_v4float Function
       %1649 = OpVariable %_ptr_Function_v3float Function
       %1650 = OpVariable %_ptr_Function_v4float Function
       %1651 = OpVariable %_ptr_Function_v3float Function
       %1652 = OpLoad %v3float %input
       %1653 = OpLoad %152 %sampler_0
       %1654 = OpLoad %v2float %direction
       %1655 = OpLoad %191 %in_image
               OpStore %1641 %1655
               OpStore %1647 %1652
       %1656 = OpFunctionCall %void %_spirv_std__textures__Image2dArray___sample %1646 %1641 %1653 %1647
       %1657 = OpLoad %v4float %1646
       %1658 = OpCompositeExtract %float %1657 0
       %1659 = OpFMul %float %1658 %float_0_0500140004
       %1660 = OpCompositeExtract %float %1657 1
       %1661 = OpFMul %float %1660 %float_0_0500140004
       %1662 = OpCompositeExtract %float %1657 2
       %1663 = OpFMul %float %1662 %float_0_0500140004
       %1664 = OpCompositeExtract %float %1657 3
       %1665 = OpFMul %float %1664 %float_0_0500140004
       %1666 = OpCompositeInsert %v4float %1659 %314 0
       %1667 = OpCompositeInsert %v4float %1661 %1666 1
       %1668 = OpCompositeInsert %v4float %1663 %1667 2
       %1669 = OpCompositeInsert %v4float %1665 %1668 3
       %1670 = OpCompositeExtract %float %1654 0
       %1671 = OpCompositeExtract %float %1654 1
       %1672 = OpCompositeInsert %v3float %1670 %315 0
       %1673 = OpCompositeInsert %v3float %1671 %1672 1
       %1674 = OpCompositeInsert %v3float %float_0 %1673 2
               OpBranch %1675
       %1675 = OpLabel
               OpBranch %1676
       %1676 = OpLabel
       %1677 = OpPhi %v4float %314 %1675 %1678 %1679
       %1680 = OpPhi %v4float %314 %1675 %1681 %1679
       %1682 = OpPhi %v4float %314 %1675 %1683 %1679
       %1684 = OpPhi %v3float %315 %1675 %1685 %1679
       %1686 = OpPhi %v3float %315 %1675 %1687 %1679
       %1688 = OpPhi %v3float %315 %1675 %1689 %1679
       %1690 = OpPhi %v3float %315 %1675 %1691 %1679
       %1692 = OpPhi %v3float %315 %1675 %1693 %1679
       %1694 = OpPhi %v4float %314 %1675 %1695 %1679
       %1696 = OpPhi %v4float %314 %1675 %1697 %1679
       %1698 = OpPhi %v4float %314 %1675 %1699 %1679
       %1700 = OpPhi %v3float %315 %1675 %1701 %1679
       %1702 = OpPhi %v3float %315 %1675 %1703 %1679
       %1704 = OpPhi %v3float %315 %1675 %1705 %1679
       %1706 = OpPhi %v3float %315 %1675 %1707 %1679
       %1708 = OpPhi %v3float %315 %1675 %1709 %1679
       %1710 = OpPhi %uint %uint_1 %1675 %1711 %1679
       %1712 = OpPhi %v4float %1669 %1675 %1713 %1679
       %1714 = OpPhi %bool %true_8 %1675 %1715 %1679
               OpLoopMerge %1716 %1679 None
               OpBranchConditional %1714 %1717 %1716
       %1717 = OpLabel
       %1718 = OpULessThan %bool %1710 %uint_18
               OpSelectionMerge %1719 None
               OpBranchConditional %1718 %1720 %1721
       %1720 = OpLabel
               OpStore %1642 %218
       %1722 = OpULessThan %bool %1710 %uint_18
               OpSelectionMerge %1723 None
               OpBranchConditional %1722 %1724 %1725
       %1724 = OpLabel
       %1726 = OpInBoundsAccessChain %_ptr_Function_float %1642 %1710
       %1727 = OpLoad %float %1726
       %1728 = OpCompositeExtract %float %1674 0
       %1729 = OpFMul %float %1728 %1727
       %1730 = OpCompositeExtract %float %1674 1
       %1731 = OpFMul %float %1730 %1727
       %1732 = OpCompositeExtract %float %1674 2
       %1733 = OpFMul %float %1732 %1727
       %1734 = OpCompositeInsert %v3float %1729 %1708 0
       %1735 = OpCompositeInsert %v3float %1731 %1734 1
       %1736 = OpCompositeInsert %v3float %1733 %1735 2
       %1737 = OpCompositeExtract %float %1652 0
       %1738 = OpCompositeExtract %float %1736 0
       %1739 = OpFAdd %float %1737 %1738
       %1740 = OpCompositeExtract %float %1652 1
       %1741 = OpCompositeExtract %float %1736 1
       %1742 = OpFAdd %float %1740 %1741
       %1743 = OpCompositeExtract %float %1652 2
       %1744 = OpCompositeExtract %float %1736 2
       %1745 = OpFAdd %float %1743 %1744
       %1746 = OpCompositeInsert %v3float %1739 %1704 0
       %1747 = OpCompositeInsert %v3float %1742 %1746 1
       %1748 = OpCompositeInsert %v3float %1745 %1747 2
               OpStore %1649 %1748
       %1749 = OpFunctionCall %void %_spirv_std__textures__Image2dArray___sample %1648 %1641 %1653 %1649
       %1750 = OpLoad %v4float %1648
               OpStore %1643 %236
       %1751 = OpULessThan %bool %1710 %uint_18
               OpSelectionMerge %1752 None
               OpBranchConditional %1751 %1753 %1754
       %1753 = OpLabel
       %1755 = OpInBoundsAccessChain %_ptr_Function_float %1643 %1710
       %1756 = OpLoad %float %1755
       %1757 = OpCompositeExtract %float %1750 0
       %1758 = OpFMul %float %1757 %1756
       %1759 = OpCompositeExtract %float %1750 1
       %1760 = OpFMul %float %1759 %1756
       %1761 = OpCompositeExtract %float %1750 2
       %1762 = OpFMul %float %1761 %1756
       %1763 = OpCompositeExtract %float %1750 3
       %1764 = OpFMul %float %1763 %1756
       %1765 = OpCompositeInsert %v4float %1758 %1698 0
       %1766 = OpCompositeInsert %v4float %1760 %1765 1
       %1767 = OpCompositeInsert %v4float %1762 %1766 2
       %1768 = OpCompositeInsert %v4float %1764 %1767 3
       %1769 = OpCompositeExtract %float %1768 0
       %1770 = OpCompositeExtract %float %1712 0
       %1771 = OpFAdd %float %1770 %1769
       %1772 = OpCompositeInsert %v4float %1771 %1712 0
       %1773 = OpCompositeExtract %float %1768 1
       %1774 = OpCompositeExtract %float %1772 1
       %1775 = OpFAdd %float %1774 %1773
       %1776 = OpCompositeInsert %v4float %1775 %1772 1
       %1777 = OpCompositeExtract %float %1768 2
       %1778 = OpCompositeExtract %float %1776 2
       %1779 = OpFAdd %float %1778 %1777
       %1780 = OpCompositeInsert %v4float %1779 %1776 2
       %1781 = OpCompositeExtract %float %1768 3
       %1782 = OpCompositeExtract %float %1780 3
       %1783 = OpFAdd %float %1782 %1781
       %1784 = OpCompositeInsert %v4float %1783 %1780 3
               OpStore %1644 %218
       %1785 = OpULessThan %bool %1710 %uint_18
               OpSelectionMerge %1786 None
               OpBranchConditional %1785 %1787 %1788
       %1787 = OpLabel
       %1789 = OpInBoundsAccessChain %_ptr_Function_float %1644 %1710
       %1790 = OpLoad %float %1789
       %1791 = OpCompositeExtract %float %1674 0
       %1792 = OpFMul %float %1791 %1790
       %1793 = OpCompositeExtract %float %1674 1
       %1794 = OpFMul %float %1793 %1790
       %1795 = OpCompositeExtract %float %1674 2
       %1796 = OpFMul %float %1795 %1790
       %1797 = OpCompositeInsert %v3float %1792 %1692 0
       %1798 = OpCompositeInsert %v3float %1794 %1797 1
       %1799 = OpCompositeInsert %v3float %1796 %1798 2
       %1800 = OpCompositeExtract %float %1652 0
       %1801 = OpCompositeExtract %float %1799 0
       %1802 = OpFSub %float %1800 %1801
       %1803 = OpCompositeExtract %float %1652 1
       %1804 = OpCompositeExtract %float %1799 1
       %1805 = OpFSub %float %1803 %1804
       %1806 = OpCompositeExtract %float %1652 2
       %1807 = OpCompositeExtract %float %1799 2
       %1808 = OpFSub %float %1806 %1807
       %1809 = OpCompositeInsert %v3float %1802 %1688 0
       %1810 = OpCompositeInsert %v3float %1805 %1809 1
       %1811 = OpCompositeInsert %v3float %1808 %1810 2
               OpStore %1651 %1811
       %1812 = OpFunctionCall %void %_spirv_std__textures__Image2dArray___sample %1650 %1641 %1653 %1651
       %1813 = OpLoad %v4float %1650
               OpStore %1645 %236
       %1814 = OpULessThan %bool %1710 %uint_18
               OpSelectionMerge %1815 None
               OpBranchConditional %1814 %1816 %1817
       %1816 = OpLabel
       %1818 = OpInBoundsAccessChain %_ptr_Function_float %1645 %1710
       %1819 = OpLoad %float %1818
       %1820 = OpCompositeExtract %float %1813 0
       %1821 = OpFMul %float %1820 %1819
       %1822 = OpCompositeExtract %float %1813 1
       %1823 = OpFMul %float %1822 %1819
       %1824 = OpCompositeExtract %float %1813 2
       %1825 = OpFMul %float %1824 %1819
       %1826 = OpCompositeExtract %float %1813 3
       %1827 = OpFMul %float %1826 %1819
       %1828 = OpCompositeInsert %v4float %1821 %1682 0
       %1829 = OpCompositeInsert %v4float %1823 %1828 1
       %1830 = OpCompositeInsert %v4float %1825 %1829 2
       %1831 = OpCompositeInsert %v4float %1827 %1830 3
       %1832 = OpCompositeExtract %float %1831 0
       %1833 = OpCompositeExtract %float %1784 0
       %1834 = OpFAdd %float %1833 %1832
       %1835 = OpCompositeInsert %v4float %1834 %1784 0
       %1836 = OpCompositeExtract %float %1831 1
       %1837 = OpCompositeExtract %float %1835 1
       %1838 = OpFAdd %float %1837 %1836
       %1839 = OpCompositeInsert %v4float %1838 %1835 1
       %1840 = OpCompositeExtract %float %1831 2
       %1841 = OpCompositeExtract %float %1839 2
       %1842 = OpFAdd %float %1841 %1840
       %1843 = OpCompositeInsert %v4float %1842 %1839 2
       %1844 = OpCompositeExtract %float %1831 3
       %1845 = OpCompositeExtract %float %1843 3
       %1846 = OpFAdd %float %1845 %1844
       %1847 = OpCompositeInsert %v4float %1846 %1843 3
       %1848 = OpIAdd %uint %1710 %uint_1
               OpBranch %1815
       %1817 = OpLabel
               OpBranch %1849
       %1849 = OpLabel
               OpBranch %1850
       %1850 = OpLabel
       %1851 = OpPhi %bool %true %1849 %true %1852
               OpLoopMerge %1853 %1852 None
               OpBranchConditional %1851 %1854 %1853
       %1854 = OpLabel
               OpBranch %1852
       %1852 = OpLabel
               OpBranch %1850
       %1853 = OpLabel
               OpUnreachable
       %1815 = OpLabel
       %1855 = OpPhi %v4float %1831 %1816
       %1856 = OpPhi %v4float %1813 %1816
       %1857 = OpPhi %v4float %1831 %1816
       %1858 = OpPhi %uint %1848 %1816
       %1859 = OpPhi %v4float %1847 %1816
       %1860 = OpPhi %bool %true_0 %1816
               OpBranch %1786
       %1788 = OpLabel
               OpBranch %1861
       %1861 = OpLabel
               OpBranch %1862
       %1862 = OpLabel
       %1863 = OpPhi %bool %true_1 %1861 %true_1 %1864
               OpLoopMerge %1865 %1864 None
               OpBranchConditional %1863 %1866 %1865
       %1866 = OpLabel
               OpBranch %1864
       %1864 = OpLabel
               OpBranch %1862
       %1865 = OpLabel
               OpUnreachable
       %1786 = OpLabel
       %1867 = OpPhi %v4float %1855 %1815
       %1868 = OpPhi %v4float %1856 %1815
       %1869 = OpPhi %v4float %1857 %1815
       %1870 = OpPhi %v3float %1799 %1815
       %1871 = OpPhi %v3float %1652 %1815
       %1872 = OpPhi %v3float %1811 %1815
       %1873 = OpPhi %v3float %1674 %1815
       %1874 = OpPhi %v3float %1799 %1815
       %1875 = OpPhi %uint %1858 %1815
       %1876 = OpPhi %v4float %1859 %1815
       %1877 = OpPhi %bool %1860 %1815
               OpBranch %1752
       %1754 = OpLabel
               OpBranch %1878
       %1878 = OpLabel
               OpBranch %1879
       %1879 = OpLabel
       %1880 = OpPhi %bool %true_3 %1878 %true_3 %1881
               OpLoopMerge %1882 %1881 None
               OpBranchConditional %1880 %1883 %1882
       %1883 = OpLabel
               OpBranch %1881
       %1881 = OpLabel
               OpBranch %1879
       %1882 = OpLabel
               OpUnreachable
       %1752 = OpLabel
       %1884 = OpPhi %v4float %1867 %1786
       %1885 = OpPhi %v4float %1868 %1786
       %1886 = OpPhi %v4float %1869 %1786
       %1887 = OpPhi %v3float %1870 %1786
       %1888 = OpPhi %v3float %1871 %1786
       %1889 = OpPhi %v3float %1872 %1786
       %1890 = OpPhi %v3float %1873 %1786
       %1891 = OpPhi %v3float %1874 %1786
       %1892 = OpPhi %v4float %1768 %1786
       %1893 = OpPhi %v4float %1750 %1786
       %1894 = OpPhi %v4float %1768 %1786
       %1895 = OpPhi %uint %1875 %1786
       %1896 = OpPhi %v4float %1876 %1786
       %1897 = OpPhi %bool %1877 %1786
               OpBranch %1723
       %1725 = OpLabel
               OpBranch %1898
       %1898 = OpLabel
               OpBranch %1899
       %1899 = OpLabel
       %1900 = OpPhi %bool %true_5 %1898 %true_5 %1901
               OpLoopMerge %1902 %1901 None
               OpBranchConditional %1900 %1903 %1902
       %1903 = OpLabel
               OpBranch %1901
       %1901 = OpLabel
               OpBranch %1899
       %1902 = OpLabel
               OpUnreachable
       %1723 = OpLabel
       %1904 = OpPhi %v4float %1884 %1752
       %1905 = OpPhi %v4float %1885 %1752
       %1906 = OpPhi %v4float %1886 %1752
       %1907 = OpPhi %v3float %1887 %1752
       %1908 = OpPhi %v3float %1888 %1752
       %1909 = OpPhi %v3float %1889 %1752
       %1910 = OpPhi %v3float %1890 %1752
       %1911 = OpPhi %v3float %1891 %1752
       %1912 = OpPhi %v4float %1892 %1752
       %1913 = OpPhi %v4float %1893 %1752
       %1914 = OpPhi %v4float %1894 %1752
       %1915 = OpPhi %v3float %1736 %1752
       %1916 = OpPhi %v3float %1652 %1752
       %1917 = OpPhi %v3float %1748 %1752
       %1918 = OpPhi %v3float %1674 %1752
       %1919 = OpPhi %v3float %1736 %1752
       %1920 = OpPhi %uint %1895 %1752
       %1921 = OpPhi %v4float %1896 %1752
       %1922 = OpPhi %bool %1897 %1752
               OpBranch %1719
       %1721 = OpLabel
               OpStore %output_1 %1712
               OpReturn
       %1719 = OpLabel
       %1678 = OpPhi %v4float %1904 %1723
       %1681 = OpPhi %v4float %1905 %1723
       %1683 = OpPhi %v4float %1906 %1723
       %1685 = OpPhi %v3float %1907 %1723
       %1687 = OpPhi %v3float %1908 %1723
       %1689 = OpPhi %v3float %1909 %1723
       %1691 = OpPhi %v3float %1910 %1723
       %1693 = OpPhi %v3float %1911 %1723
       %1695 = OpPhi %v4float %1912 %1723
       %1697 = OpPhi %v4float %1913 %1723
       %1699 = OpPhi %v4float %1914 %1723
       %1701 = OpPhi %v3float %1915 %1723
       %1703 = OpPhi %v3float %1916 %1723
       %1705 = OpPhi %v3float %1917 %1723
       %1707 = OpPhi %v3float %1918 %1723
       %1709 = OpPhi %v3float %1919 %1723
       %1711 = OpPhi %uint %1920 %1723
       %1713 = OpPhi %v4float %1921 %1723
       %1715 = OpPhi %bool %1922 %1723
               OpBranch %1679
       %1679 = OpLabel
               OpBranch %1676
       %1716 = OpLabel
               OpUnreachable
               OpFunctionEnd
         %47 = OpFunction %void None %145
       %1923 = OpLabel
       %1924 = OpVariable %_ptr_Function_191 Function
       %1925 = OpVariable %_ptr_Function_v4float Function
       %1926 = OpVariable %_ptr_Function_v3float Function
       %1927 = OpLoad %191 %in_texture_0
               OpStore %1924 %1927
       %1928 = OpLoad %152 %sampler_1
       %1929 = OpLoad %v3float %uv
       %1930 = OpCompositeExtract %float %1929 0
       %1931 = OpCompositeExtract %float %1929 1
       %1932 = OpCompositeExtract %float %1929 2
       %1933 = OpCompositeInsert %v4float %1930 %314 0
       %1934 = OpCompositeInsert %v4float %1931 %1933 1
       %1935 = OpCompositeInsert %v4float %1932 %1934 2
       %1936 = OpCompositeInsert %v4float %float_0 %1935 3
       %1937 = OpCompositeExtract %float %1936 0
       %1938 = OpCompositeExtract %float %1936 1
       %1939 = OpCompositeExtract %float %1936 2
       %1940 = OpCompositeInsert %v3float %1937 %315 0
       %1941 = OpCompositeInsert %v3float %1938 %1940 1
       %1942 = OpCompositeInsert %v3float %1939 %1941 2
               OpStore %1926 %1942
       %1943 = OpFunctionCall %void %_spirv_std__textures__Image2dArray___sample %1925 %1924 %1928 %1926
       %1944 = OpLoad %v4float %1925
               OpStore %output_2 %1944
               OpReturn
               OpFunctionEnd
%_glam__f32__vec4__Vec4_as_core__convert__Into_glam__f32__vec3__Vec3____into = OpFunction %void None %116
       %1945 = OpFunctionParameter %_ptr_Function_macaw__Vec3
       %1946 = OpFunctionParameter %_ptr_Function_v4float
       %1947 = OpLabel
       %1948 = OpLoad %v4float %1946
       %1949 = OpCompositeExtract %float %1948 0
       %1950 = OpCompositeExtract %float %1948 1
       %1951 = OpCompositeExtract %float %1948 2
       %1952 = OpAccessChain %_ptr_Function_float %1945 %uint_0
               OpStore %1952 %1949
       %1953 = OpAccessChain %_ptr_Function_float %1945 %uint_1
               OpStore %1953 %1950
       %1954 = OpAccessChain %_ptr_Function_float %1945 %uint_2
               OpStore %1954 %1951
               OpReturn
               OpFunctionEnd
         %52 = OpFunction %void None %145
       %1955 = OpLabel
       %1956 = OpVariable %_ptr_Function_canvas__Constants Function
       %1957 = OpVariable %_ptr_Function_macaw__Mat4 Function
       %1958 = OpVariable %_ptr_Function_v4float Function
       %1959 = OpVariable %_ptr_Function_v4float Function
       %1960 = OpLoad %v2float %in_pos_1
               OpCopyMemory %1956 %push_constants
       %1961 = OpLoad %v2float %in_uv_1
               OpStore %out_uv_1 %1961
       %1962 = OpLoad %v4float %in_color_2
               OpStore %1959 %1962
       %1963 = OpFunctionCall %void %ark_shaders__color__decode_srgba %1958 %1959
       %1964 = OpLoad %v4float %1958
               OpStore %out_color_1 %1964
       %1965 = OpAccessChain %_ptr_Function_macaw__Mat4 %1956 %uint_0
               OpCopyMemory %1957 %1965
       %1966 = OpCompositeExtract %float %1960 0
       %1967 = OpCompositeExtract %float %1960 1
       %1968 = OpCompositeInsert %macaw__Vec3 %1966 %313 0
       %1969 = OpCompositeInsert %macaw__Vec3 %1967 %1968 1
       %1970 = OpCompositeInsert %macaw__Vec3 %float_0 %1969 2
       %1971 = OpCompositeExtract %float %1970 0
       %1972 = OpCompositeExtract %float %1970 1
       %1973 = OpCompositeExtract %float %1970 2
       %1974 = OpCompositeInsert %v4float %1971 %314 0
       %1975 = OpCompositeInsert %v4float %1972 %1974 1
       %1976 = OpCompositeInsert %v4float %1973 %1975 2
       %1977 = OpCompositeInsert %v4float %float_1 %1976 3
       %1978 = OpAccessChain %_ptr_Function_v4float %1957 %uint_0
       %1979 = OpLoad %v4float %1978
       %1980 = OpCompositeExtract %float %1977 0
       %1981 = OpCompositeExtract %float %1977 0
       %1982 = OpCompositeExtract %float %1977 0
       %1983 = OpCompositeExtract %float %1977 0
       %1984 = OpCompositeInsert %v4float %1980 %314 0
       %1985 = OpCompositeInsert %v4float %1981 %1984 1
       %1986 = OpCompositeInsert %v4float %1982 %1985 2
       %1987 = OpCompositeInsert %v4float %1983 %1986 3
       %1988 = OpCompositeExtract %float %1979 0
       %1989 = OpCompositeExtract %float %1987 0
       %1990 = OpFMul %float %1988 %1989
       %1991 = OpCompositeExtract %float %1979 1
       %1992 = OpCompositeExtract %float %1987 1
       %1993 = OpFMul %float %1991 %1992
       %1994 = OpCompositeExtract %float %1979 2
       %1995 = OpCompositeExtract %float %1987 2
       %1996 = OpFMul %float %1994 %1995
       %1997 = OpCompositeExtract %float %1979 3
       %1998 = OpCompositeExtract %float %1987 3
       %1999 = OpFMul %float %1997 %1998
       %2000 = OpCompositeInsert %v4float %1990 %314 0
       %2001 = OpCompositeInsert %v4float %1993 %2000 1
       %2002 = OpCompositeInsert %v4float %1996 %2001 2
       %2003 = OpCompositeInsert %v4float %1999 %2002 3
       %2004 = OpAccessChain %_ptr_Function_v4float %1957 %uint_1
       %2005 = OpLoad %v4float %2004
       %2006 = OpCompositeExtract %float %1977 1
       %2007 = OpCompositeExtract %float %1977 1
       %2008 = OpCompositeExtract %float %1977 1
       %2009 = OpCompositeExtract %float %1977 1
       %2010 = OpCompositeInsert %v4float %2006 %314 0
       %2011 = OpCompositeInsert %v4float %2007 %2010 1
       %2012 = OpCompositeInsert %v4float %2008 %2011 2
       %2013 = OpCompositeInsert %v4float %2009 %2012 3
       %2014 = OpCompositeExtract %float %2005 0
       %2015 = OpCompositeExtract %float %2013 0
       %2016 = OpFMul %float %2014 %2015
       %2017 = OpCompositeExtract %float %2003 0
       %2018 = OpFAdd %float %2016 %2017
       %2019 = OpCompositeExtract %float %2005 1
       %2020 = OpCompositeExtract %float %2013 1
       %2021 = OpFMul %float %2019 %2020
       %2022 = OpCompositeExtract %float %2003 1
       %2023 = OpFAdd %float %2021 %2022
       %2024 = OpCompositeExtract %float %2005 2
       %2025 = OpCompositeExtract %float %2013 2
       %2026 = OpFMul %float %2024 %2025
       %2027 = OpCompositeExtract %float %2003 2
       %2028 = OpFAdd %float %2026 %2027
       %2029 = OpCompositeExtract %float %2005 3
       %2030 = OpCompositeExtract %float %2013 3
       %2031 = OpFMul %float %2029 %2030
       %2032 = OpCompositeExtract %float %2003 3
       %2033 = OpFAdd %float %2031 %2032
       %2034 = OpCompositeInsert %v4float %2018 %314 0
       %2035 = OpCompositeInsert %v4float %2023 %2034 1
       %2036 = OpCompositeInsert %v4float %2028 %2035 2
       %2037 = OpCompositeInsert %v4float %2033 %2036 3
       %2038 = OpAccessChain %_ptr_Function_v4float %1957 %uint_2
       %2039 = OpLoad %v4float %2038
       %2040 = OpCompositeExtract %float %1977 2
       %2041 = OpCompositeExtract %float %1977 2
       %2042 = OpCompositeExtract %float %1977 2
       %2043 = OpCompositeExtract %float %1977 2
       %2044 = OpCompositeInsert %v4float %2040 %314 0
       %2045 = OpCompositeInsert %v4float %2041 %2044 1
       %2046 = OpCompositeInsert %v4float %2042 %2045 2
       %2047 = OpCompositeInsert %v4float %2043 %2046 3
       %2048 = OpCompositeExtract %float %2039 0
       %2049 = OpCompositeExtract %float %2047 0
       %2050 = OpFMul %float %2048 %2049
       %2051 = OpCompositeExtract %float %2037 0
       %2052 = OpFAdd %float %2050 %2051
       %2053 = OpCompositeExtract %float %2039 1
       %2054 = OpCompositeExtract %float %2047 1
       %2055 = OpFMul %float %2053 %2054
       %2056 = OpCompositeExtract %float %2037 1
       %2057 = OpFAdd %float %2055 %2056
       %2058 = OpCompositeExtract %float %2039 2
       %2059 = OpCompositeExtract %float %2047 2
       %2060 = OpFMul %float %2058 %2059
       %2061 = OpCompositeExtract %float %2037 2
       %2062 = OpFAdd %float %2060 %2061
       %2063 = OpCompositeExtract %float %2039 3
       %2064 = OpCompositeExtract %float %2047 3
       %2065 = OpFMul %float %2063 %2064
       %2066 = OpCompositeExtract %float %2037 3
       %2067 = OpFAdd %float %2065 %2066
       %2068 = OpCompositeInsert %v4float %2052 %314 0
       %2069 = OpCompositeInsert %v4float %2057 %2068 1
       %2070 = OpCompositeInsert %v4float %2062 %2069 2
       %2071 = OpCompositeInsert %v4float %2067 %2070 3
       %2072 = OpAccessChain %_ptr_Function_v4float %1957 %uint_3
       %2073 = OpLoad %v4float %2072
       %2074 = OpCompositeExtract %float %1977 3
       %2075 = OpCompositeExtract %float %1977 3
       %2076 = OpCompositeExtract %float %1977 3
       %2077 = OpCompositeExtract %float %1977 3
       %2078 = OpCompositeInsert %v4float %2074 %314 0
       %2079 = OpCompositeInsert %v4float %2075 %2078 1
       %2080 = OpCompositeInsert %v4float %2076 %2079 2
       %2081 = OpCompositeInsert %v4float %2077 %2080 3
       %2082 = OpCompositeExtract %float %2073 0
       %2083 = OpCompositeExtract %float %2081 0
       %2084 = OpFMul %float %2082 %2083
       %2085 = OpCompositeExtract %float %2071 0
       %2086 = OpFAdd %float %2084 %2085
       %2087 = OpCompositeExtract %float %2073 1
       %2088 = OpCompositeExtract %float %2081 1
       %2089 = OpFMul %float %2087 %2088
       %2090 = OpCompositeExtract %float %2071 1
       %2091 = OpFAdd %float %2089 %2090
       %2092 = OpCompositeExtract %float %2073 2
       %2093 = OpCompositeExtract %float %2081 2
       %2094 = OpFMul %float %2092 %2093
       %2095 = OpCompositeExtract %float %2071 2
       %2096 = OpFAdd %float %2094 %2095
       %2097 = OpCompositeExtract %float %2073 3
       %2098 = OpCompositeExtract %float %2081 3
       %2099 = OpFMul %float %2097 %2098
       %2100 = OpCompositeExtract %float %2071 3
       %2101 = OpFAdd %float %2099 %2100
       %2102 = OpCompositeInsert %v4float %2086 %314 0
       %2103 = OpCompositeInsert %v4float %2091 %2102 1
       %2104 = OpCompositeInsert %v4float %2096 %2103 2
       %2105 = OpCompositeInsert %v4float %2101 %2104 3
       %2106 = OpCompositeExtract %float %2105 1
       %2107 = OpFNegate %float %2106
       %2108 = OpCompositeInsert %v4float %2107 %2105 1
               OpStore %builtin_pos_2 %2108
               OpReturn
               OpFunctionEnd
         %60 = OpFunction %void None %145
       %2109 = OpLabel
       %2110 = OpVariable %_ptr_Function_149 Function
       %2111 = OpVariable %_ptr_Function_v4float Function
       %2112 = OpVariable %_ptr_Function_v2float Function
       %2113 = OpLoad %v4float %in_color_3
       %2114 = OpLoad %149 %font_tex
               OpStore %2110 %2114
       %2115 = OpLoad %152 %font_sampler
       %2116 = OpLoad %v2float %in_uv_2
               OpStore %2112 %2116
       %2117 = OpFunctionCall %void %_spirv_std__textures__Image2d___sample %2111 %2110 %2115 %2112
       %2118 = OpLoad %v4float %2111
       %2119 = OpCompositeExtract %float %2113 0
       %2120 = OpCompositeExtract %float %2118 0
       %2121 = OpFMul %float %2119 %2120
       %2122 = OpCompositeExtract %float %2113 1
       %2123 = OpCompositeExtract %float %2118 1
       %2124 = OpFMul %float %2122 %2123
       %2125 = OpCompositeExtract %float %2113 2
       %2126 = OpCompositeExtract %float %2118 2
       %2127 = OpFMul %float %2125 %2126
       %2128 = OpCompositeExtract %float %2113 3
       %2129 = OpCompositeExtract %float %2118 3
       %2130 = OpFMul %float %2128 %2129
       %2131 = OpCompositeInsert %v4float %2121 %314 0
       %2132 = OpCompositeInsert %v4float %2124 %2131 1
       %2133 = OpCompositeInsert %v4float %2127 %2132 2
       %2134 = OpCompositeInsert %v4float %2130 %2133 3
               OpStore %out_color_2 %2134
               OpReturn
               OpFunctionEnd
         %66 = OpFunction %void None %145
       %2135 = OpLabel
       %2136 = OpVariable %_ptr_Function_149 Function
       %2137 = OpVariable %_ptr_Function_v4float Function
       %2138 = OpVariable %_ptr_Function_v2float Function
       %2139 = OpLoad %149 %in_texture_1
               OpStore %2136 %2139
       %2140 = OpLoad %152 %sampler_2
       %2141 = OpLoad %v3float %input_0
       %2142 = OpCompositeExtract %float %2141 0
       %2143 = OpCompositeExtract %float %2141 1
       %2144 = OpCompositeInsert %v2float %2142 %317 0
       %2145 = OpCompositeInsert %v2float %2143 %2144 1
               OpStore %2138 %2145
       %2146 = OpFunctionCall %void %_spirv_std__textures__Image2d___sample %2137 %2136 %2140 %2138
       %2147 = OpLoad %v4float %2137
               OpStore %output_3 %2147
               OpReturn
               OpFunctionEnd
         %71 = OpFunction %void None %145
       %2148 = OpLabel
       %2149 = OpVariable %_ptr_Function_191 Function
       %2150 = OpVariable %_ptr_Function_v4float Function
       %2151 = OpVariable %_ptr_Function_v3float Function
       %2152 = OpLoad %191 %in_texture_2
               OpStore %2149 %2152
       %2153 = OpLoad %152 %sampler_3
       %2154 = OpLoad %v3float %input_1
               OpStore %2151 %2154
       %2155 = OpFunctionCall %void %_spirv_std__textures__Image2dArray___sample %2150 %2149 %2153 %2151
       %2156 = OpLoad %v4float %2150
               OpStore %output_4 %2156
               OpReturn
               OpFunctionEnd
%ark_shaders__tonemap__calculate_luma = OpFunction %float None %167
       %2157 = OpFunctionParameter %_ptr_Function_macaw__Vec3
       %2158 = OpLabel
       %2159 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2160 = OpCompositeInsert %macaw__Vec3 %float_0_212599993 %313 0
       %2161 = OpCompositeInsert %macaw__Vec3 %float_0_715200007 %2160 1
       %2162 = OpCompositeInsert %macaw__Vec3 %float_0_0722000003 %2161 2
               OpCopyMemory %2159 %2157
       %2163 = OpCompositeExtract %float %2162 0
       %2164 = OpAccessChain %_ptr_Function_float %2159 %uint_0
       %2165 = OpLoad %float %2164
       %2166 = OpFMul %float %2163 %2165
       %2167 = OpCompositeExtract %float %2162 1
       %2168 = OpAccessChain %_ptr_Function_float %2159 %uint_1
       %2169 = OpLoad %float %2168
       %2170 = OpFMul %float %2167 %2169
       %2171 = OpFAdd %float %2166 %2170
       %2172 = OpCompositeExtract %float %2162 2
       %2173 = OpAccessChain %_ptr_Function_float %2159 %uint_2
       %2174 = OpLoad %float %2173
       %2175 = OpFMul %float %2172 %2174
       %2176 = OpFAdd %float %2171 %2175
               OpReturnValue %2176
               OpFunctionEnd
%ark_shaders__tonemap__vignette = OpFunction %float None %242
       %2177 = OpFunctionParameter %_ptr_Function_v2float
       %2178 = OpFunctionParameter %float
       %2179 = OpFunctionParameter %float
       %2180 = OpLabel
       %2181 = OpLoad %v2float %2177
       %2182 = OpCompositeExtract %float %2181 0
       %2183 = OpFMul %float %2182 %float_2
       %2184 = OpCompositeExtract %float %2181 1
       %2185 = OpFMul %float %2184 %float_2
       %2186 = OpCompositeInsert %v2float %2183 %317 0
       %2187 = OpCompositeInsert %v2float %2185 %2186 1
       %2188 = OpCompositeExtract %float %2187 0
       %2189 = OpCompositeExtract %float %244 0
       %2190 = OpFSub %float %2188 %2189
       %2191 = OpCompositeExtract %float %2187 1
       %2192 = OpCompositeExtract %float %244 1
       %2193 = OpFSub %float %2191 %2192
       %2194 = OpCompositeInsert %v2float %2190 %317 0
       %2195 = OpCompositeInsert %v2float %2193 %2194 1
       %2196 = OpCompositeExtract %float %2195 0
       %2197 = OpFMul %float %2196 %2178
       %2198 = OpCompositeInsert %v2float %2197 %2195 0
       %2199 = OpCompositeExtract %float %2198 0
       %2200 = OpCompositeExtract %float %2198 0
       %2201 = OpFMul %float %2199 %2200
       %2202 = OpCompositeExtract %float %2198 1
       %2203 = OpCompositeExtract %float %2198 1
       %2204 = OpFMul %float %2202 %2203
       %2205 = OpFAdd %float %2201 %2204
       %2206 = OpFMul %float %2205 %2179
       %2207 = OpFSub %float %float_1 %2206
       %2208 = OpExtInst %float %1 FMax %float_0 %2207
               OpReturnValue %2208
               OpFunctionEnd
%ark_shaders__tonemap__tonemap_neutral = OpFunction %void None %117
       %2209 = OpFunctionParameter %_ptr_Function_macaw__Vec3
       %2210 = OpFunctionParameter %_ptr_Function_macaw__Vec3
       %2211 = OpLabel
       %2212 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2213 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2214 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2215 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2216 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2217 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2218 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2219 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2220 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2221 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2222 = OpVariable %_ptr_Function_macaw__Vec3 Function
               OpCopyMemory %2212 %2210
       %2223 = OpFunctionCall %float %ark_shaders__tonemap__calculate_luma %2212
       %2224 = OpFNegate %float %2223
       %2225 = OpExtInst %float %1 Exp %2224
       %2226 = OpFSub %float %float_1 %2225
               OpCopyMemory %2214 %2210
               OpCopyMemory %2215 %2210
       %2227 = OpFunctionCall %float %ark_shaders__tonemap__calculate_luma %2215
       %2228 = OpExtInst %float %1 FMax %float_9_99999975en06 %2227
       %2229 = OpFDiv %float %2226 %2228
       %2230 = OpExtInst %float %1 FMax %float_0 %2229
       %2231 = OpAccessChain %_ptr_Function_float %2214 %uint_0
       %2232 = OpLoad %float %2231
       %2233 = OpFMul %float %2232 %2230
       %2234 = OpAccessChain %_ptr_Function_float %2214 %uint_1
       %2235 = OpLoad %float %2234
       %2236 = OpFMul %float %2235 %2230
       %2237 = OpAccessChain %_ptr_Function_float %2214 %uint_2
       %2238 = OpLoad %float %2237
       %2239 = OpFMul %float %2238 %2230
       %2240 = OpAccessChain %_ptr_Function_float %2213 %uint_0
               OpStore %2240 %2233
       %2241 = OpAccessChain %_ptr_Function_float %2213 %uint_1
               OpStore %2241 %2236
       %2242 = OpAccessChain %_ptr_Function_float %2213 %uint_2
               OpStore %2242 %2239
               OpCopyMemory %2217 %2210
       %2243 = OpAccessChain %_ptr_Function_float %2217 %uint_0
       %2244 = OpLoad %float %2243
       %2245 = OpFNegate %float %2244
       %2246 = OpAccessChain %_ptr_Function_float %2217 %uint_1
       %2247 = OpLoad %float %2246
       %2248 = OpFNegate %float %2247
       %2249 = OpAccessChain %_ptr_Function_float %2217 %uint_2
       %2250 = OpLoad %float %2249
       %2251 = OpFNegate %float %2250
       %2252 = OpCompositeInsert %macaw__Vec3 %2245 %313 0
       %2253 = OpCompositeInsert %macaw__Vec3 %2248 %2252 1
       %2254 = OpCompositeInsert %macaw__Vec3 %2251 %2253 2
       %2255 = OpCompositeExtract %float %2254 0
       %2256 = OpExtInst %float %1 Exp %2255
       %2257 = OpCompositeExtract %float %2254 1
       %2258 = OpExtInst %float %1 Exp %2257
       %2259 = OpCompositeExtract %float %2254 2
       %2260 = OpExtInst %float %1 Exp %2259
       %2261 = OpCompositeInsert %macaw__Vec3 %2256 %313 0
       %2262 = OpCompositeInsert %macaw__Vec3 %2258 %2261 1
       %2263 = OpCompositeInsert %macaw__Vec3 %2260 %2262 2
       %2264 = OpCompositeExtract %float %245 0
       %2265 = OpCompositeExtract %float %2263 0
       %2266 = OpFSub %float %2264 %2265
       %2267 = OpCompositeExtract %float %245 1
       %2268 = OpCompositeExtract %float %2263 1
       %2269 = OpFSub %float %2267 %2268
       %2270 = OpCompositeExtract %float %245 2
       %2271 = OpCompositeExtract %float %2263 2
       %2272 = OpFSub %float %2270 %2271
       %2273 = OpAccessChain %_ptr_Function_float %2216 %uint_0
               OpStore %2273 %2266
       %2274 = OpAccessChain %_ptr_Function_float %2216 %uint_1
               OpStore %2274 %2269
       %2275 = OpAccessChain %_ptr_Function_float %2216 %uint_2
               OpStore %2275 %2272
               OpCopyMemory %2218 %2213
               OpCopyMemory %2219 %2216
               OpCopyMemory %2220 %2218
               OpCopyMemory %2221 %2219
               OpCopyMemory %2222 %2218
       %2276 = OpAccessChain %_ptr_Function_float %2221 %uint_0
       %2277 = OpLoad %float %2276
       %2278 = OpAccessChain %_ptr_Function_float %2222 %uint_0
       %2279 = OpLoad %float %2278
       %2280 = OpFSub %float %2277 %2279
       %2281 = OpAccessChain %_ptr_Function_float %2221 %uint_1
       %2282 = OpLoad %float %2281
       %2283 = OpAccessChain %_ptr_Function_float %2222 %uint_1
       %2284 = OpLoad %float %2283
       %2285 = OpFSub %float %2282 %2284
       %2286 = OpAccessChain %_ptr_Function_float %2221 %uint_2
       %2287 = OpLoad %float %2286
       %2288 = OpAccessChain %_ptr_Function_float %2222 %uint_2
       %2289 = OpLoad %float %2288
       %2290 = OpFSub %float %2287 %2289
       %2291 = OpCompositeInsert %macaw__Vec3 %2280 %313 0
       %2292 = OpCompositeInsert %macaw__Vec3 %2285 %2291 1
       %2293 = OpCompositeInsert %macaw__Vec3 %2290 %2292 2
       %2294 = OpCompositeExtract %float %2293 0
       %2295 = OpFMul %float %2294 %2226
       %2296 = OpCompositeExtract %float %2293 1
       %2297 = OpFMul %float %2296 %2226
       %2298 = OpCompositeExtract %float %2293 2
       %2299 = OpFMul %float %2298 %2226
       %2300 = OpCompositeInsert %macaw__Vec3 %2295 %313 0
       %2301 = OpCompositeInsert %macaw__Vec3 %2297 %2300 1
       %2302 = OpCompositeInsert %macaw__Vec3 %2299 %2301 2
       %2303 = OpAccessChain %_ptr_Function_float %2220 %uint_0
       %2304 = OpLoad %float %2303
       %2305 = OpCompositeExtract %float %2302 0
       %2306 = OpFAdd %float %2304 %2305
       %2307 = OpAccessChain %_ptr_Function_float %2220 %uint_1
       %2308 = OpLoad %float %2307
       %2309 = OpCompositeExtract %float %2302 1
       %2310 = OpFAdd %float %2308 %2309
       %2311 = OpAccessChain %_ptr_Function_float %2220 %uint_2
       %2312 = OpLoad %float %2311
       %2313 = OpCompositeExtract %float %2302 2
       %2314 = OpFAdd %float %2312 %2313
       %2315 = OpAccessChain %_ptr_Function_float %2209 %uint_0
               OpStore %2315 %2306
       %2316 = OpAccessChain %_ptr_Function_float %2209 %uint_1
               OpStore %2316 %2310
       %2317 = OpAccessChain %_ptr_Function_float %2209 %uint_2
               OpStore %2317 %2314
               OpReturn
               OpFunctionEnd
%ark_shaders__tonemap__dither_pattern_at_coordinate = OpFunction %float None %243
       %2318 = OpFunctionParameter %_ptr_Function_v2float
       %2319 = OpLabel
       %2320 = OpVariable %_ptr_Function__arr_int_uint_16 Function
       %2321 = OpAccessChain %_ptr_Function_int %2320 %uint_0
               OpStore %2321 %int_0
       %2322 = OpAccessChain %_ptr_Function_int %2320 %uint_1
               OpStore %2322 %int_8
       %2323 = OpAccessChain %_ptr_Function_int %2320 %uint_2
               OpStore %2323 %int_2
       %2324 = OpAccessChain %_ptr_Function_int %2320 %uint_3
               OpStore %2324 %int_10
       %2325 = OpAccessChain %_ptr_Function_int %2320 %uint_4
               OpStore %2325 %int_12
       %2326 = OpAccessChain %_ptr_Function_int %2320 %uint_5
               OpStore %2326 %int_4
       %2327 = OpAccessChain %_ptr_Function_int %2320 %uint_6
               OpStore %2327 %int_14
       %2328 = OpAccessChain %_ptr_Function_int %2320 %uint_7
               OpStore %2328 %int_6
       %2329 = OpAccessChain %_ptr_Function_int %2320 %uint_8
               OpStore %2329 %int_3
       %2330 = OpAccessChain %_ptr_Function_int %2320 %uint_9
               OpStore %2330 %int_11
       %2331 = OpAccessChain %_ptr_Function_int %2320 %uint_10
               OpStore %2331 %int_1
       %2332 = OpAccessChain %_ptr_Function_int %2320 %uint_11
               OpStore %2332 %int_9
       %2333 = OpAccessChain %_ptr_Function_int %2320 %uint_12
               OpStore %2333 %int_15
       %2334 = OpAccessChain %_ptr_Function_int %2320 %uint_13
               OpStore %2334 %int_7
       %2335 = OpAccessChain %_ptr_Function_int %2320 %uint_14
               OpStore %2335 %int_13
       %2336 = OpAccessChain %_ptr_Function_int %2320 %uint_15
               OpStore %2336 %int_5
       %2337 = OpAccessChain %_ptr_Function_float %2318 %uint_0
       %2338 = OpLoad %float %2337
       %2339 = OpBitcast %float %uint_3472883712
       %2340 = OpBitcast %float %uint_1325400063
       %2341 = OpConvertFToS %int %2338
       %2342 = OpFUnordLessThan %bool %2338 %2339
       %2343 = OpFOrdGreaterThan %bool %2338 %2340
       %2344 = OpSelect %int %2342 %int_n2147483648 %2341
       %2345 = OpSelect %int %2343 %int_2147483647 %2344
       %2346 = OpFOrdEqual %bool %2338 %2338
       %2347 = OpSelect %int %2346 %2345 %int_0
       %2348 = OpBitwiseAnd %int %2347 %int_3
       %2349 = OpAccessChain %_ptr_Function_float %2318 %uint_1
       %2350 = OpLoad %float %2349
       %2351 = OpBitcast %float %uint_3472883712
       %2352 = OpBitcast %float %uint_1325400063
       %2353 = OpConvertFToS %int %2350
       %2354 = OpFUnordLessThan %bool %2350 %2351
       %2355 = OpFOrdGreaterThan %bool %2350 %2352
       %2356 = OpSelect %int %2354 %int_n2147483648 %2353
       %2357 = OpSelect %int %2355 %int_2147483647 %2356
       %2358 = OpFOrdEqual %bool %2350 %2350
       %2359 = OpSelect %int %2358 %2357 %int_0
       %2360 = OpBitwiseAnd %int %int_2 %int_31
       %2361 = OpShiftLeftLogical %int %2359 %2360
       %2362 = OpBitwiseAnd %int %2361 %int_12
       %2363 = OpIAdd %int %2348 %2362
       %2364 = OpBitcast %uint %2363
       %2365 = OpULessThan %bool %2364 %uint_16
               OpSelectionMerge %2366 None
               OpBranchConditional %2365 %2367 %2368
       %2367 = OpLabel
       %2369 = OpInBoundsAccessChain %_ptr_Function_int %2320 %2364
       %2370 = OpLoad %int %2369
       %2371 = OpConvertSToF %float %2370
       %2372 = OpFSub %float %2371 %float_7_5
       %2373 = OpFDiv %float %2372 %float_3825
               OpReturnValue %2373
       %2368 = OpLabel
               OpBranch %2374
       %2374 = OpLabel
               OpBranch %2375
       %2375 = OpLabel
       %2376 = OpPhi %bool %true_9 %2374 %true_9 %2377
               OpLoopMerge %2378 %2377 None
               OpBranchConditional %2376 %2379 %2378
       %2379 = OpLabel
               OpBranch %2377
       %2377 = OpLabel
               OpBranch %2375
       %2378 = OpLabel
               OpUnreachable
       %2366 = OpLabel
               OpUnreachable
               OpFunctionEnd
         %76 = OpFunction %void None %145
       %2380 = OpLabel
       %2381 = OpVariable %_ptr_Function_149 Function
       %2382 = OpVariable %_ptr_Function_191 Function
       %2383 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2384 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2385 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2386 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2387 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2388 = OpVariable %_ptr_Function_v4float Function
       %2389 = OpVariable %_ptr_Function_v2float Function
       %2390 = OpVariable %_ptr_Function_v4float Function
       %2391 = OpVariable %_ptr_Function_v3float Function
       %2392 = OpVariable %_ptr_Function_v2float Function
       %2393 = OpVariable %_ptr_Function_v2float Function
       %2394 = OpAccessChain %_ptr_PushConstant_float %push_constants_0 %uint_0
       %2395 = OpLoad %float %2394
       %2396 = OpAccessChain %_ptr_PushConstant_float %push_constants_0 %uint_1
       %2397 = OpLoad %float %2396
       %2398 = OpCompositeInsert %tonemap__TonemapConstants %2395 %248 0
       %2399 = OpCompositeInsert %tonemap__TonemapConstants %2397 %2398 1
       %2400 = OpCompositeExtract %float %2399 0
       %2401 = OpCompositeExtract %float %2399 1
       %2402 = OpLoad %152 %sampler_4
       %2403 = OpLoad %v3float %uv_0
       %2404 = OpCompositeExtract %float %2403 0
       %2405 = OpCompositeExtract %float %2403 1
       %2406 = OpCompositeInsert %v2float %2404 %317 0
       %2407 = OpCompositeInsert %v2float %2405 %2406 1
       %2408 = OpLoad %149 %img
               OpStore %2381 %2408
               OpStore %2389 %2407
       %2409 = OpFunctionCall %void %_spirv_std__textures__Image2d___sample %2388 %2381 %2402 %2389
       %2410 = OpLoad %v4float %2388
       %2411 = OpLoad %191 %bloom
               OpStore %2382 %2411
       %2412 = OpCompositeExtract %float %2407 0
       %2413 = OpCompositeExtract %float %2407 1
       %2414 = OpCompositeInsert %macaw__Vec3 %2412 %313 0
       %2415 = OpCompositeInsert %macaw__Vec3 %2413 %2414 1
       %2416 = OpCompositeInsert %macaw__Vec3 %float_0 %2415 2
       %2417 = OpCompositeExtract %float %2416 0
       %2418 = OpCompositeExtract %float %2416 1
       %2419 = OpCompositeExtract %float %2416 2
       %2420 = OpCompositeInsert %v3float %2417 %315 0
       %2421 = OpCompositeInsert %v3float %2418 %2420 1
       %2422 = OpCompositeInsert %v3float %2419 %2421 2
               OpStore %2391 %2422
       %2423 = OpFunctionCall %void %_spirv_std__textures__Image2dArray___sample %2390 %2382 %2402 %2391
       %2424 = OpLoad %v4float %2390
       %2425 = OpCompositeExtract %float %2424 0
       %2426 = OpCompositeExtract %float %2410 0
       %2427 = OpFSub %float %2425 %2426
       %2428 = OpCompositeExtract %float %2424 1
       %2429 = OpCompositeExtract %float %2410 1
       %2430 = OpFSub %float %2428 %2429
       %2431 = OpCompositeExtract %float %2424 2
       %2432 = OpCompositeExtract %float %2410 2
       %2433 = OpFSub %float %2431 %2432
       %2434 = OpCompositeExtract %float %2424 3
       %2435 = OpCompositeExtract %float %2410 3
       %2436 = OpFSub %float %2434 %2435
       %2437 = OpCompositeInsert %v4float %2427 %314 0
       %2438 = OpCompositeInsert %v4float %2430 %2437 1
       %2439 = OpCompositeInsert %v4float %2433 %2438 2
       %2440 = OpCompositeInsert %v4float %2436 %2439 3
       %2441 = OpCompositeExtract %float %2440 0
       %2442 = OpFMul %float %2441 %float_0_0599999987
       %2443 = OpCompositeExtract %float %2440 1
       %2444 = OpFMul %float %2443 %float_0_0599999987
       %2445 = OpCompositeExtract %float %2440 2
       %2446 = OpFMul %float %2445 %float_0_0599999987
       %2447 = OpCompositeExtract %float %2440 3
       %2448 = OpFMul %float %2447 %float_0_0599999987
       %2449 = OpCompositeInsert %v4float %2442 %314 0
       %2450 = OpCompositeInsert %v4float %2444 %2449 1
       %2451 = OpCompositeInsert %v4float %2446 %2450 2
       %2452 = OpCompositeInsert %v4float %2448 %2451 3
       %2453 = OpCompositeExtract %float %2410 0
       %2454 = OpCompositeExtract %float %2452 0
       %2455 = OpFAdd %float %2453 %2454
       %2456 = OpCompositeExtract %float %2410 1
       %2457 = OpCompositeExtract %float %2452 1
       %2458 = OpFAdd %float %2456 %2457
       %2459 = OpCompositeExtract %float %2410 2
       %2460 = OpCompositeExtract %float %2452 2
       %2461 = OpFAdd %float %2459 %2460
       %2462 = OpCompositeExtract %float %2410 3
       %2463 = OpCompositeExtract %float %2452 3
       %2464 = OpFAdd %float %2462 %2463
       %2465 = OpCompositeInsert %v4float %2455 %314 0
       %2466 = OpCompositeInsert %v4float %2458 %2465 1
       %2467 = OpCompositeInsert %v4float %2461 %2466 2
       %2468 = OpCompositeInsert %v4float %2464 %2467 3
               OpStore %2392 %2407
       %2469 = OpFunctionCall %float %ark_shaders__tonemap__vignette %2392 %2401 %float_0_100000001
       %2470 = OpCompositeExtract %float %2468 0
       %2471 = OpCompositeExtract %float %2468 1
       %2472 = OpCompositeExtract %float %2468 2
       %2473 = OpCompositeInsert %macaw__Vec3 %2470 %313 0
       %2474 = OpCompositeInsert %macaw__Vec3 %2471 %2473 1
       %2475 = OpCompositeInsert %macaw__Vec3 %2472 %2474 2
       %2476 = OpFMul %float %2400 %2469
       %2477 = OpCompositeExtract %float %2475 0
       %2478 = OpFMul %float %2477 %2476
       %2479 = OpCompositeExtract %float %2475 1
       %2480 = OpFMul %float %2479 %2476
       %2481 = OpCompositeExtract %float %2475 2
       %2482 = OpFMul %float %2481 %2476
       %2483 = OpAccessChain %_ptr_Function_float %2384 %uint_0
               OpStore %2483 %2478
       %2484 = OpAccessChain %_ptr_Function_float %2384 %uint_1
               OpStore %2484 %2480
       %2485 = OpAccessChain %_ptr_Function_float %2384 %uint_2
               OpStore %2485 %2482
       %2486 = OpFunctionCall %void %ark_shaders__tonemap__tonemap_neutral %2383 %2384
       %2487 = OpLoad %v4float %in_frag_coord
       %2488 = OpCompositeExtract %float %2487 0
       %2489 = OpCompositeExtract %float %2487 1
       %2490 = OpCompositeInsert %v2float %2488 %317 0
       %2491 = OpCompositeInsert %v2float %2489 %2490 1
               OpStore %2393 %2491
       %2492 = OpFunctionCall %float %ark_shaders__tonemap__dither_pattern_at_coordinate %2393
               OpCopyMemory %2386 %2383
       %2493 = OpCompositeInsert %macaw__Vec3 %2492 %313 0
       %2494 = OpCompositeInsert %macaw__Vec3 %2492 %2493 1
       %2495 = OpCompositeInsert %macaw__Vec3 %2492 %2494 2
       %2496 = OpCompositeExtract %float %2495 0
       %2497 = OpFMul %float %2496 %float_1
       %2498 = OpCompositeExtract %float %2495 1
       %2499 = OpFMul %float %2498 %float_1
       %2500 = OpCompositeExtract %float %2495 2
       %2501 = OpFMul %float %2500 %float_1
       %2502 = OpCompositeInsert %macaw__Vec3 %2497 %313 0
       %2503 = OpCompositeInsert %macaw__Vec3 %2499 %2502 1
       %2504 = OpCompositeInsert %macaw__Vec3 %2501 %2503 2
       %2505 = OpAccessChain %_ptr_Function_float %2386 %uint_0
       %2506 = OpLoad %float %2505
       %2507 = OpCompositeExtract %float %2504 0
       %2508 = OpFAdd %float %2506 %2507
       %2509 = OpAccessChain %_ptr_Function_float %2386 %uint_1
       %2510 = OpLoad %float %2509
       %2511 = OpCompositeExtract %float %2504 1
       %2512 = OpFAdd %float %2510 %2511
       %2513 = OpAccessChain %_ptr_Function_float %2386 %uint_2
       %2514 = OpLoad %float %2513
       %2515 = OpCompositeExtract %float %2504 2
       %2516 = OpFAdd %float %2514 %2515
       %2517 = OpAccessChain %_ptr_Function_float %2385 %uint_0
               OpStore %2517 %2508
       %2518 = OpAccessChain %_ptr_Function_float %2385 %uint_1
               OpStore %2518 %2512
       %2519 = OpAccessChain %_ptr_Function_float %2385 %uint_2
               OpStore %2519 %2516
               OpCopyMemory %2387 %2385
       %2520 = OpAccessChain %_ptr_Function_float %2387 %uint_0
       %2521 = OpLoad %float %2520
       %2522 = OpAccessChain %_ptr_Function_float %2387 %uint_1
       %2523 = OpLoad %float %2522
       %2524 = OpAccessChain %_ptr_Function_float %2387 %uint_2
       %2525 = OpLoad %float %2524
       %2526 = OpCompositeInsert %v4float %2521 %314 0
       %2527 = OpCompositeInsert %v4float %2523 %2526 1
       %2528 = OpCompositeInsert %v4float %2525 %2527 2
       %2529 = OpCompositeInsert %v4float %float_1 %2528 3
               OpStore %output_5 %2529
               OpReturn
               OpFunctionEnd
         %84 = OpFunction %void None %145
       %2530 = OpLabel
       %2531 = OpVariable %_ptr_Function_191 Function
       %2532 = OpVariable %_ptr_Function_191 Function
       %2533 = OpVariable %_ptr_Function_191 Function
       %2534 = OpVariable %_ptr_Function_191 Function
       %2535 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2536 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2537 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2538 = OpVariable %_ptr_Function_macaw__Vec3 Function
       %2539 = OpVariable %_ptr_Function_v4float Function
       %2540 = OpVariable %_ptr_Function_v3float Function
       %2541 = OpVariable %_ptr_Function_v4float Function
       %2542 = OpVariable %_ptr_Function_v3float Function
       %2543 = OpVariable %_ptr_Function_v4float Function
       %2544 = OpVariable %_ptr_Function_v3float Function
       %2545 = OpVariable %_ptr_Function_v4float Function
       %2546 = OpVariable %_ptr_Function_v3float Function
       %2547 = OpAccessChain %_ptr_PushConstant_float %push_constants_1 %uint_0
       %2548 = OpLoad %float %2547
       %2549 = OpAccessChain %_ptr_PushConstant_float %push_constants_1 %uint_1
       %2550 = OpLoad %float %2549
       %2551 = OpCompositeInsert %tonemap__TonemapConstants %2548 %248 0
       %2552 = OpCompositeInsert %tonemap__TonemapConstants %2550 %2551 1
       %2553 = OpCompositeExtract %float %2552 0
       %2554 = OpCompositeExtract %float %2552 1
       %2555 = OpLoad %152 %sampler_5
       %2556 = OpLoad %v3float %uv_1
       %2557 = OpCompositeExtract %float %2556 0
       %2558 = OpCompositeExtract %float %2556 1
       %2559 = OpCompositeInsert %v2float %2557 %317 0
       %2560 = OpCompositeInsert %v2float %2558 %2559 1
       %2561 = OpLoad %191 %img_0
               OpStore %2531 %2561
       %2562 = OpCompositeExtract %float %2560 0
       %2563 = OpCompositeExtract %float %2560 1
       %2564 = OpCompositeInsert %macaw__Vec3 %2562 %313 0
       %2565 = OpCompositeInsert %macaw__Vec3 %2563 %2564 1
       %2566 = OpCompositeInsert %macaw__Vec3 %float_0 %2565 2
       %2567 = OpCompositeExtract %float %2566 0
       %2568 = OpCompositeExtract %float %2566 1
       %2569 = OpCompositeExtract %float %2566 2
       %2570 = OpCompositeInsert %v3float %2567 %315 0
       %2571 = OpCompositeInsert %v3float %2568 %2570 1
       %2572 = OpCompositeInsert %v3float %2569 %2571 2
               OpStore %2540 %2572
       %2573 = OpFunctionCall %void %_spirv_std__textures__Image2dArray___sample %2539 %2531 %2555 %2540
       %2574 = OpLoad %v4float %2539
       %2575 = OpLoad %191 %bloom_0
               OpStore %2532 %2575
       %2576 = OpCompositeExtract %float %2560 0
       %2577 = OpCompositeExtract %float %2560 1
       %2578 = OpCompositeInsert %macaw__Vec3 %2576 %313 0
       %2579 = OpCompositeInsert %macaw__Vec3 %2577 %2578 1
       %2580 = OpCompositeInsert %macaw__Vec3 %float_0 %2579 2
       %2581 = OpCompositeExtract %float %2580 0
       %2582 = OpCompositeExtract %float %2580 1
       %2583 = OpCompositeExtract %float %2580 2
       %2584 = OpCompositeInsert %v3float %2581 %315 0
       %2585 = OpCompositeInsert %v3float %2582 %2584 1
       %2586 = OpCompositeInsert %v3float %2583 %2585 2
               OpStore %2542 %2586
       %2587 = OpFunctionCall %void %_spirv_std__textures__Image2dArray___sample %2541 %2532 %2555 %2542
       %2588 = OpLoad %v4float %2541
       %2589 = OpCompositeExtract %float %2588 0
       %2590 = OpCompositeExtract %float %2574 0
       %2591 = OpFSub %float %2589 %2590
       %2592 = OpCompositeExtract %float %2588 1
       %2593 = OpCompositeExtract %float %2574 1
       %2594 = OpFSub %float %2592 %2593
       %2595 = OpCompositeExtract %float %2588 2
       %2596 = OpCompositeExtract %float %2574 2
       %2597 = OpFSub %float %2595 %2596
       %2598 = OpCompositeExtract %float %2588 3
       %2599 = OpCompositeExtract %float %2574 3
       %2600 = OpFSub %float %2598 %2599
       %2601 = OpCompositeInsert %v4float %2591 %314 0
       %2602 = OpCompositeInsert %v4float %2594 %2601 1
       %2603 = OpCompositeInsert %v4float %2597 %2602 2
       %2604 = OpCompositeInsert %v4float %2600 %2603 3
       %2605 = OpCompositeExtract %float %2604 0
       %2606 = OpFMul %float %2605 %float_0_0599999987
       %2607 = OpCompositeExtract %float %2604 1
       %2608 = OpFMul %float %2607 %float_0_0599999987
       %2609 = OpCompositeExtract %float %2604 2
       %2610 = OpFMul %float %2609 %float_0_0599999987
       %2611 = OpCompositeExtract %float %2604 3
       %2612 = OpFMul %float %2611 %float_0_0599999987
       %2613 = OpCompositeInsert %v4float %2606 %314 0
       %2614 = OpCompositeInsert %v4float %2608 %2613 1
       %2615 = OpCompositeInsert %v4float %2610 %2614 2
       %2616 = OpCompositeInsert %v4float %2612 %2615 3
       %2617 = OpCompositeExtract %float %2574 0
       %2618 = OpCompositeExtract %float %2616 0
       %2619 = OpFAdd %float %2617 %2618
       %2620 = OpCompositeExtract %float %2574 1
       %2621 = OpCompositeExtract %float %2616 1
       %2622 = OpFAdd %float %2620 %2621
       %2623 = OpCompositeExtract %float %2574 2
       %2624 = OpCompositeExtract %float %2616 2
       %2625 = OpFAdd %float %2623 %2624
       %2626 = OpCompositeExtract %float %2574 3
       %2627 = OpCompositeExtract %float %2616 3
       %2628 = OpFAdd %float %2626 %2627
       %2629 = OpCompositeInsert %v4float %2619 %314 0
       %2630 = OpCompositeInsert %v4float %2622 %2629 1
       %2631 = OpCompositeInsert %v4float %2625 %2630 2
       %2632 = OpCompositeInsert %v4float %2628 %2631 3
       %2633 = OpLoad %191 %img_0
               OpStore %2533 %2633
       %2634 = OpCompositeExtract %float %2560 0
       %2635 = OpCompositeExtract %float %2560 1
       %2636 = OpCompositeInsert %macaw__Vec3 %2634 %313 0
       %2637 = OpCompositeInsert %macaw__Vec3 %2635 %2636 1
       %2638 = OpCompositeInsert %macaw__Vec3 %float_1 %2637 2
       %2639 = OpCompositeExtract %float %2638 0
       %2640 = OpCompositeExtract %float %2638 1
       %2641 = OpCompositeExtract %float %2638 2
       %2642 = OpCompositeInsert %v3float %2639 %315 0
       %2643 = OpCompositeInsert %v3float %2640 %2642 1
       %2644 = OpCompositeInsert %v3float %2641 %2643 2
               OpStore %2544 %2644
       %2645 = OpFunctionCall %void %_spirv_std__textures__Image2dArray___sample %2543 %2533 %2555 %2544
       %2646 = OpLoad %v4float %2543
       %2647 = OpLoad %191 %bloom_0
               OpStore %2534 %2647
       %2648 = OpCompositeExtract %float %2560 0
       %2649 = OpCompositeExtract %float %2560 1
       %2650 = OpCompositeInsert %macaw__Vec3 %2648 %313 0
       %2651 = OpCompositeInsert %macaw__Vec3 %2649 %2650 1
       %2652 = OpCompositeInsert %macaw__Vec3 %float_1 %2651 2
       %2653 = OpCompositeExtract %float %2652 0
       %2654 = OpCompositeExtract %float %2652 1
       %2655 = OpCompositeExtract %float %2652 2
       %2656 = OpCompositeInsert %v3float %2653 %315 0
       %2657 = OpCompositeInsert %v3float %2654 %2656 1
       %2658 = OpCompositeInsert %v3float %2655 %2657 2
               OpStore %2546 %2658
       %2659 = OpFunctionCall %void %_spirv_std__textures__Image2dArray___sample %2545 %2534 %2555 %2546
       %2660 = OpLoad %v4float %2545
       %2661 = OpCompositeExtract %float %2660 0
       %2662 = OpCompositeExtract %float %2646 0
       %2663 = OpFSub %float %2661 %2662
       %2664 = OpCompositeExtract %float %2660 1
       %2665 = OpCompositeExtract %float %2646 1
       %2666 = OpFSub %float %2664 %2665
       %2667 = OpCompositeExtract %float %2660 2
       %2668 = OpCompositeExtract %float %2646 2
       %2669 = OpFSub %float %2667 %2668
       %2670 = OpCompositeExtract %float %2660 3
       %2671 = OpCompositeExtract %float %2646 3
       %2672 = OpFSub %float %2670 %2671
       %2673 = OpCompositeInsert %v4float %2663 %314 0
       %2674 = OpCompositeInsert %v4float %2666 %2673 1
       %2675 = OpCompositeInsert %v4float %2669 %2674 2
       %2676 = OpCompositeInsert %v4float %2672 %2675 3
       %2677 = OpCompositeExtract %float %2676 0
       %2678 = OpFMul %float %2677 %float_0_0599999987
       %2679 = OpCompositeExtract %float %2676 1
       %2680 = OpFMul %float %2679 %float_0_0599999987
       %2681 = OpCompositeExtract %float %2676 2
       %2682 = OpFMul %float %2681 %float_0_0599999987
       %2683 = OpCompositeExtract %float %2676 3
       %2684 = OpFMul %float %2683 %float_0_0599999987
       %2685 = OpCompositeInsert %v4float %2678 %314 0
       %2686 = OpCompositeInsert %v4float %2680 %2685 1
       %2687 = OpCompositeInsert %v4float %2682 %2686 2
       %2688 = OpCompositeInsert %v4float %2684 %2687 3
       %2689 = OpCompositeExtract %float %2646 0
       %2690 = OpCompositeExtract %float %2688 0
       %2691 = OpFAdd %float %2689 %2690
       %2692 = OpCompositeExtract %float %2646 1
       %2693 = OpCompositeExtract %float %2688 1
       %2694 = OpFAdd %float %2692 %2693
       %2695 = OpCompositeExtract %float %2646 2
       %2696 = OpCompositeExtract %float %2688 2
       %2697 = OpFAdd %float %2695 %2696
       %2698 = OpCompositeExtract %float %2646 3
       %2699 = OpCompositeExtract %float %2688 3
       %2700 = OpFAdd %float %2698 %2699
       %2701 = OpCompositeInsert %v4float %2691 %314 0
       %2702 = OpCompositeInsert %v4float %2694 %2701 1
       %2703 = OpCompositeInsert %v4float %2697 %2702 2
       %2704 = OpCompositeInsert %v4float %2700 %2703 3
       %2705 = OpCompositeExtract %float %2632 0
       %2706 = OpCompositeExtract %float %2632 1
       %2707 = OpCompositeExtract %float %2632 2
       %2708 = OpCompositeInsert %macaw__Vec3 %2705 %313 0
       %2709 = OpCompositeInsert %macaw__Vec3 %2706 %2708 1
       %2710 = OpCompositeInsert %macaw__Vec3 %2707 %2709 2
       %2711 = OpCompositeExtract %float %2710 0
       %2712 = OpFMul %float %2711 %2553
       %2713 = OpCompositeExtract %float %2710 1
       %2714 = OpFMul %float %2713 %2553
       %2715 = OpCompositeExtract %float %2710 2
       %2716 = OpFMul %float %2715 %2553
       %2717 = OpAccessChain %_ptr_Function_float %2536 %uint_0
               OpStore %2717 %2712
       %2718 = OpAccessChain %_ptr_Function_float %2536 %uint_1
               OpStore %2718 %2714
       %2719 = OpAccessChain %_ptr_Function_float %2536 %uint_2
               OpStore %2719 %2716
       %2720 = OpFunctionCall %void %ark_shaders__tonemap__tonemap_neutral %2535 %2536
       %2721 = OpAccessChain %_ptr_Function_float %2535 %uint_0
       %2722 = OpLoad %float %2721
       %2723 = OpAccessChain %_ptr_Function_float %2535 %uint_1
       %2724 = OpLoad %float %2723
       %2725 = OpAccessChain %_ptr_Function_float %2535 %uint_2
       %2726 = OpLoad %float %2725
       %2727 = OpCompositeInsert %v4float %2722 %314 0
       %2728 = OpCompositeInsert %v4float %2724 %2727 1
       %2729 = OpCompositeInsert %v4float %2726 %2728 2
       %2730 = OpCompositeInsert %v4float %float_1 %2729 3
               OpStore %output_l %2730
       %2731 = OpCompositeExtract %float %2704 0
       %2732 = OpCompositeExtract %float %2704 1
       %2733 = OpCompositeExtract %float %2704 2
       %2734 = OpCompositeInsert %macaw__Vec3 %2731 %313 0
       %2735 = OpCompositeInsert %macaw__Vec3 %2732 %2734 1
       %2736 = OpCompositeInsert %macaw__Vec3 %2733 %2735 2
       %2737 = OpCompositeExtract %float %2736 0
       %2738 = OpFMul %float %2737 %2553
       %2739 = OpCompositeExtract %float %2736 1
       %2740 = OpFMul %float %2739 %2553
       %2741 = OpCompositeExtract %float %2736 2
       %2742 = OpFMul %float %2741 %2553
       %2743 = OpAccessChain %_ptr_Function_float %2538 %uint_0
               OpStore %2743 %2738
       %2744 = OpAccessChain %_ptr_Function_float %2538 %uint_1
               OpStore %2744 %2740
       %2745 = OpAccessChain %_ptr_Function_float %2538 %uint_2
               OpStore %2745 %2742
       %2746 = OpFunctionCall %void %ark_shaders__tonemap__tonemap_neutral %2537 %2538
       %2747 = OpAccessChain %_ptr_Function_float %2537 %uint_0
       %2748 = OpLoad %float %2747
       %2749 = OpAccessChain %_ptr_Function_float %2537 %uint_1
       %2750 = OpLoad %float %2749
       %2751 = OpAccessChain %_ptr_Function_float %2537 %uint_2
       %2752 = OpLoad %float %2751
       %2753 = OpCompositeInsert %v4float %2748 %314 0
       %2754 = OpCompositeInsert %v4float %2750 %2753 1
       %2755 = OpCompositeInsert %v4float %2752 %2754 2
       %2756 = OpCompositeInsert %v4float %float_1 %2755 3
               OpStore %output_r %2756
               OpReturn
               OpFunctionEnd
%_f32_as_macaw__float_ext__FloatExt___step_select = OpFunction %float None %286
       %2757 = OpFunctionParameter %float
       %2758 = OpFunctionParameter %float
       %2759 = OpFunctionParameter %float
       %2760 = OpFunctionParameter %float
       %2761 = OpLabel
       %2762 = OpFOrdLessThan %bool %2757 %2758
               OpSelectionMerge %2763 None
               OpBranchConditional %2762 %2764 %2765
       %2764 = OpLabel
               OpBranch %2763
       %2765 = OpLabel
               OpBranch %2763
       %2763 = OpLabel
       %2766 = OpPhi %float %2759 %2764 %2760 %2765
               OpReturnValue %2766
               OpFunctionEnd
%_glam__f32__vec3__Vec3_as_macaw__vec3_ext__Vec3Ext___step_select = OpFunction %void None %130
       %2767 = OpFunctionParameter %_ptr_Function_macaw__Vec3
       %2768 = OpFunctionParameter %_ptr_Function_macaw__Vec3
       %2769 = OpFunctionParameter %_ptr_Function_macaw__Vec3
       %2770 = OpFunctionParameter %_ptr_Function_macaw__Vec3
       %2771 = OpFunctionParameter %_ptr_Function_macaw__Vec3
       %2772 = OpLabel
       %2773 = OpAccessChain %_ptr_Function_float %2768 %uint_0
       %2774 = OpLoad %float %2773
       %2775 = OpAccessChain %_ptr_Function_float %2769 %uint_0
       %2776 = OpLoad %float %2775
       %2777 = OpAccessChain %_ptr_Function_float %2770 %uint_0
       %2778 = OpLoad %float %2777
       %2779 = OpAccessChain %_ptr_Function_float %2771 %uint_0
       %2780 = OpLoad %float %2779
       %2781 = OpFunctionCall %float %_f32_as_macaw__float_ext__FloatExt___step_select %2774 %2776 %2778 %2780
       %2782 = OpAccessChain %_ptr_Function_float %2768 %uint_1
       %2783 = OpLoad %float %2782
       %2784 = OpAccessChain %_ptr_Function_float %2769 %uint_1
       %2785 = OpLoad %float %2784
       %2786 = OpAccessChain %_ptr_Function_float %2770 %uint_1
       %2787 = OpLoad %float %2786
       %2788 = OpAccessChain %_ptr_Function_float %2771 %uint_1
       %2789 = OpLoad %float %2788
       %2790 = OpFunctionCall %float %_f32_as_macaw__float_ext__FloatExt___step_select %2783 %2785 %2787 %2789
       %2791 = OpAccessChain %_ptr_Function_float %2768 %uint_2
       %2792 = OpLoad %float %2791
       %2793 = OpAccessChain %_ptr_Function_float %2769 %uint_2
       %2794 = OpLoad %float %2793
       %2795 = OpAccessChain %_ptr_Function_float %2770 %uint_2
       %2796 = OpLoad %float %2795
       %2797 = OpAccessChain %_ptr_Function_float %2771 %uint_2
       %2798 = OpLoad %float %2797
       %2799 = OpFunctionCall %float %_f32_as_macaw__float_ext__FloatExt___step_select %2792 %2794 %2796 %2798
       %2800 = OpAccessChain %_ptr_Function_float %2767 %uint_0
               OpStore %2800 %2781
       %2801 = OpAccessChain %_ptr_Function_float %2767 %uint_1
               OpStore %2801 %2790
       %2802 = OpAccessChain %_ptr_Function_float %2767 %uint_2
               OpStore %2802 %2799
               OpReturn
               OpFunctionEnd
%_spirv_std__textures__Image2d___sample = OpFunction %void None %166
       %2803 = OpFunctionParameter %_ptr_Function_v4float
       %2804 = OpFunctionParameter %_ptr_Function_149
       %2805 = OpFunctionParameter %152
       %2806 = OpFunctionParameter %_ptr_Function_v2float
       %2807 = OpLabel
       %2808 = OpAccessChain %_ptr_Function_float %2803 %uint_0
               OpStore %2808 %float_0
       %2809 = OpAccessChain %_ptr_Function_float %2803 %uint_1
               OpStore %2809 %float_0
       %2810 = OpAccessChain %_ptr_Function_float %2803 %uint_2
               OpStore %2810 %float_0
       %2811 = OpAccessChain %_ptr_Function_float %2803 %uint_3
               OpStore %2811 %float_0
       %2812 = OpLoad %149 %2804
       %2813 = OpLoad %v2float %2806
       %2814 = OpSampledImage %287 %2812 %2805
       %2815 = OpImageSampleImplicitLod %v4float %2814 %2813
               OpStore %2803 %2815
               OpReturn
               OpFunctionEnd
%_spirv_std__textures__Image2dArray___sample = OpFunction %void None %199
       %2816 = OpFunctionParameter %_ptr_Function_v4float
       %2817 = OpFunctionParameter %_ptr_Function_191
       %2818 = OpFunctionParameter %152
       %2819 = OpFunctionParameter %_ptr_Function_v3float
       %2820 = OpLabel
       %2821 = OpAccessChain %_ptr_Function_float %2816 %uint_0
               OpStore %2821 %float_0
       %2822 = OpAccessChain %_ptr_Function_float %2816 %uint_1
               OpStore %2822 %float_0
       %2823 = OpAccessChain %_ptr_Function_float %2816 %uint_2
               OpStore %2823 %float_0
       %2824 = OpAccessChain %_ptr_Function_float %2816 %uint_3
               OpStore %2824 %float_0
       %2825 = OpLoad %191 %2817
       %2826 = OpLoad %v3float %2819
       %2827 = OpSampledImage %288 %2825 %2818
       %2828 = OpImageSampleImplicitLod %v4float %2827 %2826
               OpStore %2816 %2828
               OpReturn
               OpFunctionEnd

@jimblandy
Copy link
Member

Those could modeled with binding arrays, if their usage was well-behaved.

@teoxoy
Copy link
Member

teoxoy commented Feb 28, 2023

With #2199 merged we are getting closer to get this working.

However, considering this PR is now 2 years old I imagine there have been improvements and fixes in rust-gpu's SPIR-V codegen that the binary in this PR lacks.

@repi could you regenerate the testcase or provide new ones?

They can go in the tests/in/spv dir and added to the convert_spv_all fn in tests/snapshots.rs.
(Ideally, they would be separate so that they are easier to debug.)

@repi
Copy link
Author

repi commented Feb 28, 2023

did a quick test with our latest set of shaders and they all fail now on UnsupportedExtension("SPV_EXT_descriptor_indexing")

@teoxoy
Copy link
Member

teoxoy commented Feb 28, 2023

Hmm, I think we forgot to add it here

pub const SUPPORTED_EXTENSIONS: &[&str] = &[
"SPV_KHR_storage_buffer_storage_class",
"SPV_KHR_vulkan_memory_model",
"SPV_KHR_multiview",
];

although, which capabilities do the shaders need that are enabled by that extension?

@Patryk27 shouldn't we now support some of those capabilities in the frontend?

@repi
Copy link
Author

repi commented Feb 28, 2023

here is an one compute shader as an example blur-blur_cs.spv.zip

@Patryk27
Copy link
Contributor

Patryk27 commented Mar 1, 2023

@Patryk27 shouldn't we now support some of those capabilities in the frontend?

Ah yes, it looks like we at the very least support RuntimeDescriptorArrayEXT now; I'm not sure on the other capabilities there 🤔

@teoxoy
Copy link
Member

teoxoy commented Mar 3, 2023

here is an one compute shader as an example blur-blur_cs.spv.zip

We are missing

SPV_EXT_descriptor_indexing
RuntimeDescriptorArray

and

StorageImageWriteWithoutFormat.

@repi
Copy link
Author

repi commented Mar 3, 2023

thanks! once that is implemented I can update this PR to include all of our shaders as individual .spv files and include in the test suite.

@cwfitzgerald
Copy link
Member

Hello, thank you for your PR against Naga!

As part of gfx-rs/wgpu#4231, we have moved development of Naga into the wgpu repository in the Naga subfolder. We have transferred all issues, but we are unable to automatically transfer PRs.

As such, please recreate your PR against the wgpu repository. We apologize for the inconvenience this causes, but will make contributing to both projects more streamlined going forward.

We are leaving PRs open, but once they are transferred, please close the original Naga PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants