From c339e978a258cb9bc059820471f35e77841e0cbc Mon Sep 17 00:00:00 2001 From: Schell Carl Scivally Date: Mon, 10 Feb 2025 11:49:58 +1300 Subject: [PATCH] chore: initial shadow mapping with shadow maps hosted in an atlas (#157) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * lighting bindgroup * initial shadow mapping API in place * pin cargo gpu * lots of bug fixes in the shadow mapping path * more debugging shadow mapping * can programmatically capture gpu traces, ugly shadows are working * added configurable bias to shadow mapping * shadow mapping culls front face to cut down peter panning * 1 Cargo Files: • Cargo.lock and Cargo.toml have been updated to change the version of the craballoc dependency from 0.1.3 to 0.1.5. 2 Example Crate: • crates/example/src/lib.rs has been modified to update the lighting and shadow mapping logic, including changes to how shadow maps are created and used. 3 Shaders: • Several shader files (.spv and .wgsl) have binary differences, indicating updates to the compiled shader code. 4 Renderling Crate: • Multiple files in the crates/renderling/src directory have been updated, including atlas.rs, atlas/atlas_image.rs, atlas/cpu.rs, context.rs, draw/cpu.rs, lib.rs, light.rs, light/cpu.rs, math.rs, pbr.rs, stage.rs, and stage/cpu.rs. • These changes involve updates to the atlas and texture handling, lighting and shadow mapping improvements, and modifications to the rendering pipeline. 5 GLTF File: • The gltf/shadow_mapping_sanity_spot.blend file has binary changes, suggesting updates to the 3D model or scene configuration. Overall, the changes focus on improving the rendering and lighting systems, particularly around shadow mapping and texture management. * feat: Add shadow map view management for directional and point lights * feat: Implement `ShadowMapViews::new_six` for point light shadow maps * moved shadow maps to a shadow map atlas, included atlas blitting * WIP moving all lighting to the lighting slab w/ AnalayticalLightBundle * functional shadows read out of the shadow map atlas --- .cargo/config.toml | 2 +- .github/workflows/push.yaml | 6 +- Cargo.lock | 117 +- Cargo.toml | 7 +- crates/example-culling/src/main.rs | 36 +- crates/example/src/lib.rs | 62 +- crates/renderling/Cargo.toml | 3 +- .../shaders/atlas-atlas_blit_fragment.spv | Bin 0 -> 596 bytes .../shaders/atlas-atlas_blit_fragment.wgsl | 21 + .../shaders/atlas-atlas_blit_vertex.spv | Bin 0 -> 6188 bytes .../shaders/atlas-atlas_blit_vertex.wgsl | 262 ++ .../bloom-bloom_downsample_fragment.spv | Bin 4916 -> 4916 bytes .../bloom-bloom_downsample_fragment.wgsl | 48 +- .../shaders/bloom-bloom_mix_fragment.spv | Bin 1796 -> 1796 bytes .../shaders/bloom-bloom_mix_fragment.wgsl | 28 +- .../shaders/bloom-bloom_upsample_fragment.spv | Bin 3324 -> 3324 bytes .../bloom-bloom_upsample_fragment.wgsl | 4 +- .../renderling/shaders/bloom-bloom_vertex.spv | Bin 1336 -> 1336 bytes .../shaders/bloom-bloom_vertex.wgsl | 16 +- ...volution-brdf_lut_convolution_fragment.spv | Bin 5140 -> 5140 bytes ...olution-brdf_lut_convolution_fragment.wgsl | 16 +- ...onvolution-brdf_lut_convolution_vertex.spv | Bin 1420 -> 1420 bytes ...nvolution-brdf_lut_convolution_vertex.wgsl | 12 +- .../convolution-generate_mipmap_vertex.spv | Bin 1204 -> 1204 bytes .../convolution-generate_mipmap_vertex.wgsl | 12 +- ...prefilter_environment_cubemap_fragment.spv | Bin 6432 -> 6432 bytes ...refilter_environment_cubemap_fragment.wgsl | 16 +- ...n-prefilter_environment_cubemap_vertex.spv | Bin 12400 -> 12400 bytes ...-prefilter_environment_cubemap_vertex.wgsl | 174 +- .../cull-compute_copy_depth_to_pyramid.spv | Bin 2184 -> 2184 bytes .../cull-compute_copy_depth_to_pyramid.wgsl | 12 +- ...ute_copy_depth_to_pyramid_multisampled.spv | Bin 2200 -> 2200 bytes ...te_copy_depth_to_pyramid_multisampled.wgsl | 12 +- .../shaders/cull-compute_culling.spv | Bin 26748 -> 26616 bytes .../shaders/cull-compute_culling.wgsl | 1025 +++--- .../cull-compute_downsample_depth_pyramid.spv | Bin 6260 -> 6260 bytes ...cull-compute_downsample_depth_pyramid.wgsl | 4 +- .../shaders/debug-debug_overlay_fragment.spv | Bin 20744 -> 20744 bytes .../shaders/debug-debug_overlay_fragment.wgsl | 104 +- .../shaders/debug-debug_overlay_vertex.spv | Bin 824 -> 824 bytes ...use_irradiance-di_convolution_fragment.spv | Bin 3992 -> 3992 bytes .../shaders/light-shadow_mapping_vertex.spv | Bin 31360 -> 32380 bytes .../shaders/light-shadow_mapping_vertex.wgsl | 1350 ++++---- crates/renderling/shaders/manifest.json | 10 + .../skybox-skybox_cubemap_fragment.spv | Bin 1100 -> 1100 bytes .../shaders/skybox-skybox_cubemap_vertex.spv | Bin 11560 -> 11560 bytes .../shaders/skybox-skybox_cubemap_vertex.wgsl | 158 +- ...skybox-skybox_equirectangular_fragment.spv | Bin 1368 -> 1368 bytes .../shaders/skybox-skybox_vertex.spv | Bin 10108 -> 10108 bytes .../shaders/skybox-skybox_vertex.wgsl | 158 +- .../shaders/stage-renderlet_fragment.spv | Bin 70360 -> 77756 bytes .../shaders/stage-renderlet_fragment.wgsl | 3041 +++++++++-------- .../shaders/stage-renderlet_vertex.spv | Bin 42840 -> 42840 bytes .../shaders/stage-renderlet_vertex.wgsl | 1164 +++---- .../tonemapping-tonemapping_fragment.spv | Bin 5488 -> 5488 bytes .../tonemapping-tonemapping_fragment.wgsl | 4 +- .../tonemapping-tonemapping_vertex.spv | Bin 1180 -> 1180 bytes .../tonemapping-tonemapping_vertex.wgsl | 12 +- ...ial-tutorial_implicit_isosceles_vertex.spv | Bin 756 -> 756 bytes .../tutorial-tutorial_slabbed_renderlet.spv | Bin 19408 -> 19408 bytes .../tutorial-tutorial_slabbed_renderlet.wgsl | 254 +- .../tutorial-tutorial_slabbed_vertices.spv | Bin 5716 -> 5716 bytes .../tutorial-tutorial_slabbed_vertices.wgsl | 92 +- ...-tutorial_slabbed_vertices_no_instance.spv | Bin 5092 -> 5092 bytes ...tutorial_slabbed_vertices_no_instance.wgsl | 82 +- crates/renderling/src/atlas.rs | 169 +- crates/renderling/src/atlas/atlas_image.rs | 257 +- crates/renderling/src/atlas/cpu.rs | 445 ++- crates/renderling/src/bindgroup.rs | 35 +- crates/renderling/src/bloom/cpu.rs | 4 +- crates/renderling/src/context.rs | 12 +- crates/renderling/src/cull/cpu.rs | 26 +- crates/renderling/src/debug.rs | 2 - crates/renderling/src/draw/cpu.rs | 11 +- crates/renderling/src/lib.rs | 101 +- crates/renderling/src/light.rs | 239 +- crates/renderling/src/light/cpu.rs | 1273 ++++--- crates/renderling/src/linkage.rs | 6 +- .../src/linkage/atlas_blit_fragment.rs | 34 + .../src/linkage/atlas_blit_vertex.rs | 34 + crates/renderling/src/math.rs | 163 +- crates/renderling/src/pbr.rs | 84 +- crates/renderling/src/skybox/cpu.rs | 6 +- crates/renderling/src/stage.rs | 16 +- crates/renderling/src/stage/cpu.rs | 129 +- crates/renderling/src/stage/gltf_support.rs | 127 +- crates/renderling/src/texture.rs | 92 +- crates/renderling/src/tonemapping/cpu.rs | 4 +- crates/renderling/src/tutorial.rs | 29 +- gltf/shadow_mapping_sanity.bin | Bin 70228 -> 153208 bytes gltf/shadow_mapping_sanity.gltf | 331 +- gltf/shadow_mapping_sanity_spot.blend | Bin 713532 -> 773356 bytes gltf/shadow_mapping_sanity_spot.blend1 | Bin 658860 -> 0 bytes .../shadows/shadow_mapping_sanity_depth.png | Bin 0 -> 20196 bytes .../shadow_mapping_sanity_light_pov.png | Bin 0 -> 56255 bytes .../shadow_mapping_sanity_light_pov_depth.png | Bin 0 -> 20196 bytes .../shadow_mapping_sanity_scene_before.png | Bin 0 -> 31182 bytes 97 files changed, 7092 insertions(+), 4861 deletions(-) create mode 100644 crates/renderling/shaders/atlas-atlas_blit_fragment.spv create mode 100644 crates/renderling/shaders/atlas-atlas_blit_fragment.wgsl create mode 100644 crates/renderling/shaders/atlas-atlas_blit_vertex.spv create mode 100644 crates/renderling/shaders/atlas-atlas_blit_vertex.wgsl create mode 100644 crates/renderling/src/linkage/atlas_blit_fragment.rs create mode 100644 crates/renderling/src/linkage/atlas_blit_vertex.rs delete mode 100644 gltf/shadow_mapping_sanity_spot.blend1 create mode 100644 test_img/shadows/shadow_mapping_sanity_depth.png create mode 100644 test_img/shadows/shadow_mapping_sanity_light_pov.png create mode 100644 test_img/shadows/shadow_mapping_sanity_light_pov_depth.png create mode 100644 test_img/shadows/shadow_mapping_sanity_scene_before.png diff --git a/.cargo/config.toml b/.cargo/config.toml index c7b9923d..148828e0 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,7 +1,7 @@ [alias] xtask = "run --package xtask --" shaders = "xtask compile-shaders" -linkage = "xtask generati-linkage" +linkage = "xtask generate-linkage" [build] rustflags = ["--cfg=web_sys_unstable_apis"] diff --git a/.github/workflows/push.yaml b/.github/workflows/push.yaml index 7fb5d566..f7d3652d 100644 --- a/.github/workflows/push.yaml +++ b/.github/workflows/push.yaml @@ -38,7 +38,11 @@ jobs: - uses: moonrepo/setup-rust@v1 - run: rustup default stable - run: rustup update - - run: cargo install --git https://github.com/rust-gpu/cargo-gpu cargo-gpu + - run: | + cargo install \ + --git https://github.com/rust-gpu/cargo-gpu \ + --rev 91b50948c5e036927b0fccc08b6fd26d0168b92b \ + cargo-gpu - run: cargo gpu show commitsh - id: cachepathstep run: | diff --git a/Cargo.lock b/Cargo.lock index 61e13db9..74b4a761 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -364,6 +364,9 @@ name = "bitflags" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +dependencies = [ + "serde", +] [[package]] name = "bitstream-io" @@ -508,12 +511,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - [[package]] name = "cfg_aliases" version = "0.2.1" @@ -699,9 +696,9 @@ dependencies = [ [[package]] name = "craballoc" -version = "0.1.3" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab1b90234767cc4bc0bb641a587ddcc4e72dd48214ff66f2673d803ecc1da4e2" +checksum = "4ff4827153ff72526c7d17f07a7f123a067f0e42b43c88572e73614324cc7a79" dependencies = [ "async-channel 1.9.0", "bytemuck", @@ -1053,6 +1050,12 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + [[package]] name = "flate2" version = "1.0.35" @@ -1198,9 +1201,9 @@ dependencies = [ [[package]] name = "glow" -version = "0.14.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" dependencies = [ "js-sys", "slotmap", @@ -1796,9 +1799,9 @@ dependencies = [ [[package]] name = "metal" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ "bitflags 2.8.0", "block", @@ -1843,12 +1846,12 @@ dependencies = [ "arrayvec", "bit-set", "bitflags 2.8.0", - "cfg_aliases 0.2.1", + "cfg_aliases", "codespan-reporting", "hexf-parse", "indexmap", "log", - "petgraph", + "petgraph 0.6.5", "rustc-hash 1.1.0", "spirv", "termcolor", @@ -1858,23 +1861,24 @@ dependencies = [ [[package]] name = "naga" -version = "23.1.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "364f94bc34f61332abebe8cad6f6cd82a5b65cff22c828d05d0968911462ca4f" +checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" dependencies = [ "arrayvec", "bit-set", "bitflags 2.8.0", - "cfg_aliases 0.1.1", + "cfg_aliases", "codespan-reporting", "hexf-parse", "indexmap", "log", - "petgraph", + "petgraph 0.7.1", "rustc-hash 1.1.0", "spirv", + "strum", "termcolor", - "thiserror 1.0.69", + "thiserror 2.0.11", "unicode-xid", ] @@ -2309,7 +2313,17 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ - "fixedbitset", + "fixedbitset 0.4.2", + "indexmap", +] + +[[package]] +name = "petgraph" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" +dependencies = [ + "fixedbitset 0.5.7", "indexmap", ] @@ -2766,7 +2780,7 @@ dependencies = [ "assert_approx_eq", "async-channel 1.9.0", "bytemuck", - "cfg_aliases 0.2.1", + "cfg_aliases", "craballoc", "crabslab", "crunch", @@ -2783,6 +2797,7 @@ dependencies = [ "image", "img-diff", "log", + "metal", "naga 23.0.0", "pathdiff", "pretty_assertions", @@ -2795,6 +2810,7 @@ dependencies = [ "spirv-std", "ttf-parser 0.20.0", "wgpu", + "wgpu-core", "winit", ] @@ -3147,6 +3163,28 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.96", +] + [[package]] name = "syn" version = "1.0.109" @@ -3687,16 +3725,17 @@ checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "wgpu" -version = "23.0.1" +version = "24.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f70000db37c469ea9d67defdc13024ddf9a5f1b89cb2941b812ad7cde1735a" +checksum = "47f55718f85c2fa756edffa0e7f0e0a60aba463d1362b57e23123c58f035e4b6" dependencies = [ "arrayvec", - "cfg_aliases 0.1.1", + "bitflags 2.8.0", + "cfg_aliases", "document-features", "js-sys", "log", - "naga 23.1.0", + "naga 24.0.0", "parking_lot", "profiling", "raw-window-handle", @@ -3712,35 +3751,35 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "23.0.1" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d63c3c478de8e7e01786479919c8769f62a22eec16788d8c2ac77ce2c132778a" +checksum = "82a39b8842dc9ffcbe34346e3ab6d496b32a47f6497e119d762c97fcaae3cb37" dependencies = [ "arrayvec", "bit-vec", "bitflags 2.8.0", "bytemuck", - "cfg_aliases 0.1.1", + "cfg_aliases", "document-features", "indexmap", "log", - "naga 23.1.0", + "naga 24.0.0", "once_cell", "parking_lot", "profiling", "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 1.0.69", + "thiserror 2.0.11", "wgpu-hal", "wgpu-types", ] [[package]] name = "wgpu-hal" -version = "23.0.1" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89364b8a0b211adc7b16aeaf1bd5ad4a919c1154b44c9ce27838213ba05fd821" +checksum = "5a782e5056b060b0b4010881d1decddd059e44f2ecd01e2db2971b48ad3627e5" dependencies = [ "android_system_properties", "arrayvec", @@ -3749,7 +3788,7 @@ dependencies = [ "bitflags 2.8.0", "block", "bytemuck", - "cfg_aliases 0.1.1", + "cfg_aliases", "core-graphics-types", "glow", "glutin_wgl_sys", @@ -3762,10 +3801,11 @@ dependencies = [ "libloading", "log", "metal", - "naga 23.1.0", + "naga 24.0.0", "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", + "ordered-float", "parking_lot", "profiling", "range-alloc", @@ -3773,7 +3813,7 @@ dependencies = [ "renderdoc-sys", "rustc-hash 1.1.0", "smallvec", - "thiserror 1.0.69", + "thiserror 2.0.11", "wasm-bindgen", "web-sys", "wgpu-types", @@ -3783,12 +3823,13 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "23.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "610f6ff27778148c31093f3b03abc4840f9636d58d597ca2f5977433acfe0068" +checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" dependencies = [ "bitflags 2.8.0", "js-sys", + "log", "web-sys", ] @@ -4105,7 +4146,7 @@ dependencies = [ "block2", "bytemuck", "calloop", - "cfg_aliases 0.2.1", + "cfg_aliases", "concurrent-queue", "core-foundation", "core-graphics", diff --git a/Cargo.toml b/Cargo.toml index 5cb21c58..4c695f54 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ async-channel = "1.8" bytemuck = { version = "1.13.0", features = ["derive"] } cfg_aliases = "0.2" clap = { version = "4.5.23", features = ["derive"] } -craballoc = { version = "0.1.3" } +craballoc = { version = "0.1.9" } crabslab = { version = "0.6.3", default-features = false } ctor = "0.2.2" dagga = "0.2.1" @@ -47,8 +47,9 @@ wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = "0.3" winit = { version = "0.30" } -wgpu = { version = "23.0" } - +wgpu = { version = "24.0" } +wgpu-core = { version = "24.0" } +metal = "0.31" [profile.dev] opt-level = 1 diff --git a/crates/example-culling/src/main.rs b/crates/example-culling/src/main.rs index 142a1c5f..1adf5bbb 100644 --- a/crates/example-culling/src/main.rs +++ b/crates/example-culling/src/main.rs @@ -33,8 +33,7 @@ struct CullingExample { app_camera: AppCamera, controller: example::camera::TurntableCameraController, stage: Stage, - dlights: [Hybrid; 2], - lights: [Hybrid; 2], + dlights: [AnalyticalLightBundle; 2], material_aabb_overlapping: Hybrid, material_aabb_outside: Hybrid, material_frustum: Hybrid, @@ -205,22 +204,24 @@ impl TestAppHandler for CullingExample { let mut seed = 46; let mut resources = BagOfResources::default(); let stage = ctx.new_stage().with_lighting(true); - let sunlight_a = stage.new_value(DirectionalLight { - direction: Vec3::new(-0.8, -1.0, 0.5).normalize(), - color: Vec4::ONE, - intensity: 10.0, - }); - let light_a = stage.new_value(Light::from(sunlight_a.id())); - let sunlight_b = stage.new_value(DirectionalLight { - direction: Vec3::new(1.0, 1.0, -0.1).normalize(), - color: Vec4::ONE, - intensity: 1.0, - }); - let light_b = stage.new_value(Light::from(sunlight_b.id())); - stage.set_lights([light_a.id(), light_b.id()]); + let sunlight_a = stage.lighting().new_directional_light( + DirectionalLightDescriptor { + direction: Vec3::new(-0.8, -1.0, 0.5).normalize(), + color: Vec4::ONE, + intensity: 10.0, + }, + None, + ); + let sunlight_b = stage.lighting().new_directional_light( + DirectionalLightDescriptor { + direction: Vec3::new(1.0, 1.0, -0.1).normalize(), + color: Vec4::ONE, + intensity: 1.0, + }, + None, + ); let dlights = [sunlight_a, sunlight_b]; - let lights = [light_a, light_b]; let frustum_camera = FrustumCamera({ let aspect = 1.0; @@ -287,6 +288,7 @@ impl TestAppHandler for CullingExample { next_k: seed, app_camera, frustum_camera, + dlights, controller: { let mut c = example::camera::TurntableCameraController::default(); c.reset(BOUNDS); @@ -294,8 +296,6 @@ impl TestAppHandler for CullingExample { c }, stage, - dlights, - lights, material_aabb_overlapping, material_aabb_outside, material_frustum, diff --git a/crates/example/src/lib.rs b/crates/example/src/lib.rs index bc80cbdc..f4c0b924 100644 --- a/crates/example/src/lib.rs +++ b/crates/example/src/lib.rs @@ -10,7 +10,7 @@ use renderling::{ atlas::AtlasImage, bvol::{Aabb, BoundingSphere}, camera::Camera, - light::{DirectionalLight, Light, ShadowMap}, + light::{AnalyticalLightBundle, DirectionalLightDescriptor, Light, Lighting}, math::{Mat4, UVec2, Vec2, Vec3, Vec4}, skybox::Skybox, stage::{Animator, GltfDocument, Renderlet, Stage, Vertex}, @@ -128,8 +128,7 @@ pub struct App { loads: Arc>>>, pub stage: Stage, camera: Hybrid, - _light: Option<(Hybrid, Hybrid)>, - // shadows: ShadowMap, + lighting: AnalyticalLightBundle, model: Model, animators: Option>, animations_conflict: bool, @@ -146,22 +145,14 @@ impl App { .with_bloom_filter_radius(4.0) .with_msaa_sample_count(4); let camera = stage.new_value(Camera::default()); - let sunlight = stage.new_value(DirectionalLight { + let directional_light = DirectionalLightDescriptor { direction: Vec3::NEG_Y, color: renderling::math::hex_to_vec4(0xFDFBD3FF), intensity: 10.0, - }); - let light = stage.new_value(Light::from(sunlight.id())); - // let shadows = ShadowMap::new( - // &ctx, - // light.id(), - // wgpu::Extent3d { - // width: 256, - // height: 256, - // depth_or_array_layers: 1, - // }, - // ); - // stage.set_lights([light.id()]); + }; + + let lighting = stage.lighting(); + let sunlight_bundle = lighting.new_directional_light(directional_light, None); stage .set_atlas_size(wgpu::Extent3d { @@ -186,8 +177,7 @@ impl App { }, stage, camera, - _light: None, - // shadows, + lighting: sunlight_bundle, model: Model::None, animators: None, animations_conflict: false, @@ -214,18 +204,6 @@ impl App { pub fn render(&self, ctx: &Context) { let frame = ctx.get_next_frame().unwrap(); self.stage.tick(); - // self.shadows.update( - // ctx, - // &self.stage.get_buffer().unwrap(), - // match &self.model { - // Model::Gltf(doc) => { - // Box::new(doc.renderlets_iter()) as Box>> - // } - // Model::Default(def) => Box::new(std::iter::once(&def.renderlet)) - // as Box>>, - // Model::None => Box::new(std::iter::empty()), - // }, - // ); self.stage.render(&frame.view()); self.ui.ui.render(&frame.view()); frame.present(); @@ -308,8 +286,6 @@ impl App { Ok(doc) => doc, }; - // self.entities = builder.entities.clone(); - // find the bounding box of the model so we can display it correctly let mut min = Vec3::splat(f32::INFINITY); let mut max = Vec3::splat(f32::NEG_INFINITY); @@ -394,6 +370,28 @@ impl App { log::trace!(" and some animations conflict"); } self.animations_conflict = has_conflicting_animations; + + // // Update lights and shadows + // for light in doc.lights.iter() { + // if let Some(dir) = light.details.as_directional() { + // log::info!("found a directional light to use for shadows"); + // { + // let (p, j) = dir.get().shadow_mapping_projection_and_view( + // &light.node_transform.get_global_transform().into(), + // &self.camera.get(), + // ); + // let mut guard = self.lighting.shadow_map.descriptor_lock(); + // guard.light_space_transform = p * j; + // } + + // self.lighting + // .shadow_map + // .update(&self.lighting.lighting, doc.renderlets.values().flatten()); + // self.lighting.light = light.light.clone(); + // self.lighting.light_details = dir.clone(); + // } + // } + self.model = Model::Gltf(doc); } diff --git a/crates/renderling/Cargo.toml b/crates/renderling/Cargo.toml index 2494e208..be001842 100644 --- a/crates/renderling/Cargo.toml +++ b/crates/renderling/Cargo.toml @@ -76,11 +76,12 @@ example = { path = "../example" } fastrand = "2.1.1" icosahedron = "0.1" img-diff = { path = "../img-diff" } +metal.workspace = true naga.workspace = true pretty_assertions.workspace = true ttf-parser = "0.20.0" +wgpu-core.workspace = true winit.workspace = true [target.'cfg(not(target_arch = "spirv"))'.dev-dependencies] glam = { workspace = true, features = ["std", "debug-glam-assert"] } - diff --git a/crates/renderling/shaders/atlas-atlas_blit_fragment.spv b/crates/renderling/shaders/atlas-atlas_blit_fragment.spv new file mode 100644 index 0000000000000000000000000000000000000000..c844340166803d171d3eff65a6c48da395acd11f GIT binary patch literal 596 zcmYk2%Sr=55Jk(x5PW5fk!T`FqAMS3k%(^n16_s@RD|e4=ZF0ZH-hK%bb}2wRrhw) zy*1tKoc5!)77*Pm(Tk3{rRH_ zCL>MR+aq>C&h&|U6y%Qyk67(F;atHd)E=?C_i7aU|6Y%xH%4s}JR=U6-6D(C5N~Jf z4m0o$S%3KvT?6tQrXpKUVuSr#4gJ+AN9<8&*p{hxO4nZIN0~2}Cr$t1UN_8%%bSYr zZ(ls(h-wVh-#a~uzu4XVcl)oX+_&uH{y%gdl5gqNZ$juLcAqKXtXPjTLj4D{^gYj< VeUEUy(M9Ifx?@^@xnG>Gi9dAO86p4x literal 0 HcmV?d00001 diff --git a/crates/renderling/shaders/atlas-atlas_blit_fragment.wgsl b/crates/renderling/shaders/atlas-atlas_blit_fragment.wgsl new file mode 100644 index 00000000..a9b47f91 --- /dev/null +++ b/crates/renderling/shaders/atlas-atlas_blit_fragment.wgsl @@ -0,0 +1,21 @@ +var global: vec2; +@group(0) @binding(2) +var global_1: sampler; +@group(0) @binding(1) +var global_2: texture_2d; +var global_3: vec4; + +fn function() { + let _e4 = global; + let _e5 = textureSample(global_2, global_1, _e4); + global_3 = _e5; + return; +} + +@fragment +fn atlasatlas_blit_fragment(@location(0) param: vec2) -> @location(0) vec4 { + global = param; + function(); + let _e3 = global_3; + return _e3; +} diff --git a/crates/renderling/shaders/atlas-atlas_blit_vertex.spv b/crates/renderling/shaders/atlas-atlas_blit_vertex.spv new file mode 100644 index 0000000000000000000000000000000000000000..45409ff2f0bc4d294d4430d5b3e2b476415a9786 GIT binary patch literal 6188 zcmZwKd+gU`6$kJScL@rcsA+&dAVq;Nk(`5+%XDB-S$4CQL`iAUra)$10Pys_#@N1Zb~Y$DbmupRsWNYq_ z4e-ZD7Jo!Y{7ZZN$X>V4l+gTMmzTa^ppP5uZ%?smnH{o9pEFbkx_xFfx|-#(j!yiH z@DWPZNc5TE=EpuWz1W95tM7{rC+F0V{*H<7gn_;5j*V|5GTjVdXNT))B*d>ietq$q z4L|!)iF#T1>{w0=Coc#_4JU>4Gb6egj)d6cm=~@$c78LJuly%R=4W3Pzdr3brqR_? zy8g^okF~$^u;}V{9#-iK2imsf3lljK`Q-y&*Rhvv(LnxB+o`=xzQVbr^r3C?ps&-S z%PEH#1jjZ#b6Xs47N>{nbtI(M+2Q6kJcIGwlF0fp)9USv$YUD)%*f8KdRrQ~>$W{q z`m%xErPoP=Iln484B{L1JoKH_>;KPp_Vd{Pjawd{7`gtPbMoK}SHxydx#d9cY-X@B z+zi}-G3nfStqRSLY)T{m;f-G4UPtHbRzFZ?wjv2^!&ZLdF*9p08a z*1^c`>4nk7<7WkL@7IRZQu^y6yYpwqD!2P}cj_>o^F#37kNj^8w+KAA%6F^V&5LQ zV)-lf9g+D8_s#|hJ2veEPd4+|nQWwF9l|J{qpSts(tw3+V?}uQ)n?tBY%O`C46E^|w8;zF=^% z`jbJ{%kt>$JVs}R7^WJm(OUSx4q+k5LvcJ6F8B8~ zKeO~F?ty`Sc(3Is`?n**uMWZNNM88wg!tV1+xxw~+uOa3>glTNp&s?`49-lhZfwrw zI*nvG7x-&J9}AfeZeB2SzI*!pu8k~L&C8iT6`lQ@$mfRISUH>v+{Yus$_HnkI_sw+ z^UJO7n%l#XornF@y)WESH{bU{-w&x1hxuu^1!F!x3;jFpL*2rgK(>A_+jK9g<$a7^T(0fJ;lMmtD$tfYWPWHd&7vA54LK+ z3;V0c@Z#037ub3Wd!yIA`EumlA+xS?*`Iyb)!4p;+oH#n2@hi`$E7jy!Pnh;e`7P7 zO#-vb2L1z~%R~Cc)dxf8tGl-`vRqZ4JN1v~?CssFSiJ7u=E$(}xqJ4h9-oQKFSoku z?%fet|MpY&o#B?c`R)pRC8SQg&h)F1<&jq};$YxgoxRTK?j8>#UcUC6_WYOb{QQjc zwtpR371|S$M_%Xd9^9B3d>hsOo9LGB`u6bOhT`ge7aAM-eaQMlNWFN?;{E{roEY?# zTn`J(G7G*3LJx+-;q_gAD6+UZGxa_j8@um1pFZUiD^IJl*NpZ>_FadO!#=S36082Y zhkxsHxBEU9Ji8v+yZm_cxCVDwJ@s9GA~Iin*PrZlIcqLY^|toA{&Z}xzR7abcYS|k zc;9uH`mP^{%-4R`4@PH~qk6hMMXE>r^|tP4Y|i)_8p(1l@OOs39x@-?ykO{j^|tPc zELY9T+d2@Py?t91i`Uz_Co-&j-j;ppZ5@ovFSojDZigZ}5BsV6aJZ#zzEMj2>cn9t zhFdV^Gb#EJJqFhsj2OOpkCP+YTP-aHw(iyoBEyM;t9o>B(_=jzM!bCOIr#>+y7Q~=`U|sdY;@;Z0-U|+az<7KJYc}|PGA-sOiKQg+X z3+(khJ1R1Jeb1)%x;fNrj_z&k_w1P1V10|^sPEaak>P#MV5*kmB3}|))pC4vy|7m; zGb6KCEwg&Pt>uK?*48o-8?0L7s9I)6hF1$r{jE1QvN|t{y=*5&hhHCC)qGO)9gRLO z`p!l_Il5fe_rEKi5}8e0<(MB??!qjH%qCa;eYPla{tbQ~mgBt0!}mA*`|Z@mFTVUW z%hO_m5mSE~E{?t{x}V`?JH5A!i|zdU{yisrNo@9)Lkx_+YbW(S_pttE#Sf*@GeiFZ Dl7_G{ literal 0 HcmV?d00001 diff --git a/crates/renderling/shaders/atlas-atlas_blit_vertex.wgsl b/crates/renderling/shaders/atlas-atlas_blit_vertex.wgsl new file mode 100644 index 00000000..19c08304 --- /dev/null +++ b/crates/renderling/shaders/atlas-atlas_blit_vertex.wgsl @@ -0,0 +1,262 @@ +struct type_3 { + member: array, +} + +struct VertexOutput { + @location(0) member: vec2, + @builtin(position) member_1: vec4, +} + +var global: u32; +var global_1: u32; +@group(0) @binding(0) +var global_2: type_3; +var global_3: vec2; +var global_4: vec4 = vec4(0f, 0f, 0f, 1f); + +fn function() { + var local: array, 6>; + var local_1: array, 6>; + var phi_120_: u32; + var phi_129_: u32; + var phi_406_: f32; + var phi_388_: bool; + var phi_210_: f32; + var phi_205_: f32; + var phi_211_: f32; + var phi_371_: bool; + var phi_176_: f32; + var phi_213_: f32; + var phi_454_: f32; + var phi_436_: bool; + var phi_266_: f32; + var phi_261_: f32; + var phi_267_: f32; + var phi_419_: bool; + var phi_232_: f32; + var phi_269_: f32; + + switch bitcast(0u) { + default: { + let _e36 = global; + let _e37 = global_1; + local = array, 6>(vec2(0f, 1f), vec2(1f, 1f), vec2(1f, 0f), vec2(1f, 0f), vec2(0f, 0f), vec2(0f, 1f)); + let _e38 = (_e36 < 6u); + if _e38 { + } else { + break; + } + let _e40 = local[_e36]; + global_3 = _e40; + let _e43 = global_2.member[_e37]; + let _e47 = global_2.member[(_e37 + 1u)]; + let _e50 = global_2.member[_e43]; + let _e54 = global_2.member[(_e43 + 1u)]; + let _e58 = global_2.member[(_e43 + 2u)]; + let _e62 = global_2.member[(_e43 + 3u)]; + let _e66 = global_2.member[(_e43 + 6u)]; + switch bitcast(_e66) { + case 0: { + phi_120_ = 0u; + break; + } + case 1: { + phi_120_ = 1u; + break; + } + case 2: { + phi_120_ = 2u; + break; + } + default: { + phi_120_ = 0u; + break; + } + } + let _e69 = phi_120_; + let _e73 = global_2.member[(_e43 + 7u)]; + switch bitcast(_e73) { + case 0: { + phi_129_ = 0u; + break; + } + case 1: { + phi_129_ = 1u; + break; + } + case 2: { + phi_129_ = 2u; + break; + } + default: { + phi_129_ = 0u; + break; + } + } + let _e76 = phi_129_; + let _e79 = global_2.member[_e47]; + let _e83 = global_2.member[(_e47 + 1u)]; + local_1 = array, 6>(vec4(-1f, -1f, 0.5f, 1f), vec4(1f, -1f, 0.5f, 1f), vec4(1f, 1f, 0.5f, 1f), vec4(1f, 1f, 0.5f, 1f), vec4(-1f, 1f, 0.5f, 1f), vec4(-1f, -1f, 0.5f, 1f)); + if _e38 { + } else { + break; + } + let _e85 = local_1[_e36]; + let _e90 = ((_e85.x + 1f) * 0.5f); + let _e91 = (fma(_e85.y, -1f, 1f) * 0.5f); + switch bitcast(_e69) { + case 1: { + let _e126 = abs(_e90); + let _e128 = (_e126 % 1f); + if (_e126 >= 1f) { + phi_371_ = select(true, false, (_e128 == 0f)); + } else { + phi_371_ = true; + } + let _e132 = phi_371_; + let _e133 = select(1f, _e128, _e132); + if (select(-1f, 1f, (_e90 >= 0f)) > 0f) { + phi_176_ = _e133; + } else { + phi_176_ = (1f - _e133); + } + let _e137 = phi_176_; + phi_213_ = _e137; + break; + } + case 2: { + let _e100 = abs(_e90); + let _e107 = ((select(select(u32(_e100), 0u, (_e100 < 0f)), 4294967295u, (_e100 > 4294967000f)) % 2u) == 0u); + let _e109 = (_e100 % 1f); + if (_e100 >= 1f) { + phi_388_ = select(true, false, (_e109 == 0f)); + } else { + phi_388_ = true; + } + let _e113 = phi_388_; + let _e114 = select(1f, _e109, _e113); + if (select(-1f, 1f, (_e90 >= 0f)) > 0f) { + if _e107 { + phi_205_ = _e114; + } else { + phi_205_ = (1f - _e114); + } + let _e121 = phi_205_; + phi_211_ = _e121; + } else { + if _e107 { + phi_210_ = (1f - _e114); + } else { + phi_210_ = _e114; + } + let _e118 = phi_210_; + phi_211_ = _e118; + } + let _e123 = phi_211_; + phi_213_ = _e123; + break; + } + case 0: { + if (_e90 > 1f) { + phi_406_ = 0.9999999f; + } else { + phi_406_ = select(_e90, 0.00000011920929f, (_e90 < 0f)); + } + let _e97 = phi_406_; + phi_213_ = _e97; + break; + } + default: { + phi_213_ = f32(); + break; + } + } + let _e139 = phi_213_; + switch bitcast(_e76) { + case 1: { + let _e174 = abs(_e91); + let _e176 = (_e174 % 1f); + if (_e174 >= 1f) { + phi_419_ = select(true, false, (_e176 == 0f)); + } else { + phi_419_ = true; + } + let _e180 = phi_419_; + let _e181 = select(1f, _e176, _e180); + if (select(-1f, 1f, (_e91 >= 0f)) > 0f) { + phi_232_ = _e181; + } else { + phi_232_ = (1f - _e181); + } + let _e185 = phi_232_; + phi_269_ = _e185; + break; + } + case 2: { + let _e148 = abs(_e91); + let _e155 = ((select(select(u32(_e148), 0u, (_e148 < 0f)), 4294967295u, (_e148 > 4294967000f)) % 2u) == 0u); + let _e157 = (_e148 % 1f); + if (_e148 >= 1f) { + phi_436_ = select(true, false, (_e157 == 0f)); + } else { + phi_436_ = true; + } + let _e161 = phi_436_; + let _e162 = select(1f, _e157, _e161); + if (select(-1f, 1f, (_e91 >= 0f)) > 0f) { + if _e155 { + phi_261_ = _e162; + } else { + phi_261_ = (1f - _e162); + } + let _e169 = phi_261_; + phi_267_ = _e169; + } else { + if _e155 { + phi_266_ = (1f - _e162); + } else { + phi_266_ = _e162; + } + let _e166 = phi_266_; + phi_267_ = _e166; + } + let _e171 = phi_267_; + phi_269_ = _e171; + break; + } + case 0: { + if (_e91 > 1f) { + phi_454_ = 0.9999999f; + } else { + phi_454_ = select(_e91, 0.00000011920929f, (_e91 < 0f)); + } + let _e145 = phi_454_; + phi_269_ = _e145; + break; + } + default: { + phi_269_ = f32(); + break; + } + } + let _e187 = phi_269_; + let _e189 = (_e139 * f32(_e58)); + let _e196 = (_e187 * f32(_e62)); + global_4 = vec4(fma((f32((select(select(u32(_e189), 0u, (_e189 < 0f)), 4294967295u, (_e189 > 4294967000f)) + _e50)) / f32(_e79)), 2f, -1f), (fma((f32((select(select(u32(_e196), 0u, (_e196 < 0f)), 4294967295u, (_e196 > 4294967000f)) + _e54)) / f32(_e83)), 2f, -1f) * -1f), _e85.z, _e85.w); + break; + } + } + return; +} + +@vertex +fn atlasatlas_blit_vertex(@builtin(vertex_index) param: u32, @builtin(instance_index) param_1: u32) -> VertexOutput { + global = param; + global_1 = param_1; + function(); + let _e7 = global_4.y; + global_4.y = -(_e7); + let _e9 = global_3; + let _e10 = global_4; + return VertexOutput(_e9, _e10); +} diff --git a/crates/renderling/shaders/bloom-bloom_downsample_fragment.spv b/crates/renderling/shaders/bloom-bloom_downsample_fragment.spv index 7eee219c817aeff7e2a8896950761829b2f5ee98..c581fd341966648916f31c2ac3ba672b88a81a4f 100644 GIT binary patch literal 4916 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 F{XZm$q0s;U diff --git a/crates/renderling/shaders/bloom-bloom_downsample_fragment.wgsl b/crates/renderling/shaders/bloom-bloom_downsample_fragment.wgsl index fd80780e..c0ab80e1 100644 --- a/crates/renderling/shaders/bloom-bloom_downsample_fragment.wgsl +++ b/crates/renderling/shaders/bloom-bloom_downsample_fragment.wgsl @@ -1,24 +1,24 @@ -struct type_8 { +struct type_3 { member: array, } @group(0) @binding(0) -var global: type_8; +var global: type_3; var global_1: vec2; -var global_2: u32; @group(0) @binding(2) -var global_3: sampler; +var global_2: sampler; @group(0) @binding(1) -var global_4: texture_2d; +var global_3: texture_2d; +var global_4: u32; var global_5: vec4; fn function() { var phi_329_: bool; - var phi_80_: vec2; + var phi_90_: vec2; let _e20 = arrayLength((&global.member)); let _e21 = global_1; - let _e22 = global_2; + let _e22 = global_4; if (_e20 >= 2u) { phi_329_ = (_e22 <= (_e20 - 2u)); } else { @@ -28,29 +28,29 @@ fn function() { if _e27 { let _e30 = global.member[_e22]; let _e35 = global.member[(_e22 + 1u)]; - phi_80_ = vec2(bitcast(_e30), bitcast(_e35)); + phi_90_ = vec2(bitcast(_e30), bitcast(_e35)); } else { - phi_80_ = vec2(0f, 0f); + phi_90_ = vec2(0f, 0f); } - let _e39 = phi_80_; + let _e39 = phi_90_; let _e44 = fma(-2f, _e39.x, _e21.x); let _e47 = fma(2f, _e39.y, _e21.y); - let _e49 = textureSample(global_4, global_3, vec2(_e44, _e47)); - let _e51 = textureSample(global_4, global_3, vec2(_e21.x, _e47)); + let _e49 = textureSample(global_3, global_2, vec2(_e44, _e47)); + let _e51 = textureSample(global_3, global_2, vec2(_e21.x, _e47)); let _e52 = vec2((2f * _e39.x), (2f * _e39.y)); - let _e54 = textureSample(global_4, global_3, (_e21 + _e52)); - let _e56 = textureSample(global_4, global_3, vec2(_e44, _e21.y)); - let _e57 = textureSample(global_4, global_3, _e21); + let _e54 = textureSample(global_3, global_2, (_e21 + _e52)); + let _e56 = textureSample(global_3, global_2, vec2(_e44, _e21.y)); + let _e57 = textureSample(global_3, global_2, _e21); let _e58 = fma(2f, _e39.x, _e21.x); - let _e60 = textureSample(global_4, global_3, vec2(_e58, _e21.y)); - let _e62 = textureSample(global_4, global_3, (_e21 - _e52)); + let _e60 = textureSample(global_3, global_2, vec2(_e58, _e21.y)); + let _e62 = textureSample(global_3, global_2, (_e21 - _e52)); let _e63 = fma(-2f, _e39.y, _e21.y); - let _e65 = textureSample(global_4, global_3, vec2(_e21.x, _e63)); - let _e67 = textureSample(global_4, global_3, vec2(_e58, _e63)); - let _e71 = textureSample(global_4, global_3, vec2((_e21.x - _e39.x), (_e21.y + _e39.y))); - let _e73 = textureSample(global_4, global_3, (_e21 + _e39)); - let _e75 = textureSample(global_4, global_3, (_e21 - _e39)); - let _e79 = textureSample(global_4, global_3, vec2((_e21.x + _e39.x), (_e21.y - _e39.y))); + let _e65 = textureSample(global_3, global_2, vec2(_e21.x, _e63)); + let _e67 = textureSample(global_3, global_2, vec2(_e58, _e63)); + let _e71 = textureSample(global_3, global_2, vec2((_e21.x - _e39.x), (_e21.y + _e39.y))); + let _e73 = textureSample(global_3, global_2, (_e21 + _e39)); + let _e75 = textureSample(global_3, global_2, (_e21 - _e39)); + let _e79 = textureSample(global_3, global_2, vec2((_e21.x + _e39.x), (_e21.y - _e39.y))); global_5 = vec4(max(fma((((_e49.x + _e54.x) + _e62.x) + _e67.x), 0.03125f, fma(0.125f, (_e57.x + (((_e71.x + _e73.x) + _e75.x) + _e79.x)), ((((_e51.x + _e56.x) + _e65.x) + _e60.x) * 0.0625f))), 0.00000011920929f), max(fma((((_e49.y + _e54.y) + _e62.y) + _e67.y), 0.03125f, fma(0.125f, (_e57.y + (((_e71.y + _e73.y) + _e75.y) + _e79.y)), ((((_e51.y + _e56.y) + _e65.y) + _e60.y) * 0.0625f))), 0.00000011920929f), max(fma((((_e49.z + _e54.z) + _e62.z) + _e67.z), 0.03125f, fma(0.125f, (_e57.z + (((_e71.z + _e73.z) + _e75.z) + _e79.z)), ((((_e51.z + _e56.z) + _e65.z) + _e60.z) * 0.0625f))), 0.00000011920929f), max(fma((((_e49.w + _e54.w) + _e62.w) + _e67.w), 0.03125f, fma(0.125f, (_e57.w + (((_e71.w + _e73.w) + _e75.w) + _e79.w)), ((((_e51.w + _e56.w) + _e65.w) + _e60.w) * 0.0625f))), 1f)); return; } @@ -58,7 +58,7 @@ fn function() { @fragment fn bloombloom_downsample_fragment(@location(0) param: vec2, @location(1) @interpolate(flat) param_1: u32) -> @location(0) vec4 { global_1 = param; - global_2 = param_1; + global_4 = param_1; function(); let _e5 = global_5; return _e5; diff --git a/crates/renderling/shaders/bloom-bloom_mix_fragment.spv b/crates/renderling/shaders/bloom-bloom_mix_fragment.spv index f15f4459dddac2b50834d9780a8603e7cb1b2820..125e4e3ae1d58f6fed2e6b9c6d1f76cf4fef1151 100644 GIT binary patch literal 1796 zcmYk5Sxb~r7{|}dxFm_T*rsVSO{7`bf<+h=K`};F+M=|8OKJp}P+oLVQJVMFRdr$C zpo_jyA0k>H==Xc)9DNV`=Xw6mexCPCsaS0ejfD_Gd-%$)XKN@1Ey^DqA#4s!VGUjz zxivEId}(%I@YHeR+CoW@{kDf~p#j~znJ0^j3qwPhm|S@LVsif3^rMBjr%U*XG2Yll z&;**nCeQ-5P|X_JYEStqp z^X+jM?hFTkM{fPzjBW6~jK8_iLCr(x_UcDk!~9g|2zmkZ)6=-4U=Ocm0BK!)_D)Cc zvEH$|n#Fb!qOFU*gGl@7b05ALcOv&2_)d(KTie}v`xZulHs`Rmb*z`?+MUbzF<_3pdV#Ul z_Fdcr4Uzlp--8kuXAi!I57B1a1hxwDW3>A{#<1DrcC;hbZFi!rkh6_PoA*pJOrZN# z5sD=*T0JOpdN|Cqb6{uD_5S@h(0Px`H${Bt?KJJWBUQNC#fIS=e%9b=vS PJYTK_sqY^*J_G&(B6D7_@{rx%~jK3rOOvO=s7^UbXT z^`HT40gYfA-Rz;SLdQ0=Ip$Z0wWIAZLbbNiRaIHs*j`|*c6l>aN#q&Gv(vng>mcbFVDxlo3!gL;``wxpp@Vp z=o+AZH(ksvfjz_ypyh?gOOd;awPmz(OJFBi&Mo8VLTk6;JB03!bGxw>xqT03>_6|x z`0EQD^zi-MsT14xk~{MVx(Vpp$IJJk?NtNZGl^WWrmt#dxou?iNB`02Py86%I?sJJ z&a$WTq_bNblJvz-La7(|=r&gr~E*ygsAdm8Po_VLdBPK?Rj!#h>v?(4lODeiZm zq`2>_$jfNo*_u;)0p7j672o0)XTFTSM9lpvAl=nD>OJoW@N9B(Mu9tirN(o<1lD<` zpG=jr8&eC3uv)*8*x^J=9Dn9!g`%S*Rtg}AP_5WZi=dT0n?CqVK>mFCo zihGzd2Cf48XVe^gB=lliY*f!~5tnZwg-t{Q>CrJtpuu;}+1bB;RdpeZF(@O-7&ROgl_r z`|Zfx;UlO6X@^hIXI|RjGq(Qx4tL=Cl{D`zw!Zuh_oB}o*5dy6v3r1bwH|#l*!Il( zX5seC`{v;G)Yrrp>3uu^8{h=+ZtOn;QhXje#l0uv_D=DIT--Y|?woPnw1i#+&ajWU Q?tY$^YeXCS%Zbl`e_tSU7XSbN diff --git a/crates/renderling/shaders/bloom-bloom_mix_fragment.wgsl b/crates/renderling/shaders/bloom-bloom_mix_fragment.wgsl index 74385898..57a63ea6 100644 --- a/crates/renderling/shaders/bloom-bloom_mix_fragment.wgsl +++ b/crates/renderling/shaders/bloom-bloom_mix_fragment.wgsl @@ -1,20 +1,20 @@ -struct type_8 { +struct type_3 { member: array, } @group(0) @binding(0) -var global: type_8; +var global: type_3; var global_1: vec2; -var global_2: u32; +var global_2: vec4; +var global_3: u32; @group(0) @binding(2) -var global_3: sampler; +var global_4: sampler; @group(0) @binding(1) -var global_4: texture_2d; +var global_5: texture_2d; @group(0) @binding(4) -var global_5: sampler; +var global_6: sampler; @group(0) @binding(3) -var global_6: texture_2d; -var global_7: vec4; +var global_7: texture_2d; fn function() { var phi_133_: bool; @@ -22,7 +22,7 @@ fn function() { let _e14 = arrayLength((&global.member)); let _e15 = global_1; - let _e16 = global_2; + let _e16 = global_3; if (_e14 >= 1u) { phi_133_ = (_e16 <= (_e14 - 1u)); } else { @@ -36,18 +36,18 @@ fn function() { phi_81_ = 0f; } let _e27 = phi_81_; - let _e28 = textureSample(global_4, global_3, _e15); - let _e32 = textureSample(global_6, global_5, _e15); + let _e28 = textureSample(global_5, global_4, _e15); + let _e32 = textureSample(global_7, global_6, _e15); let _e36 = (1f - _e27); - global_7 = vec4(fma(_e28.x, _e36, (_e32.x * _e27)), fma(_e28.y, _e36, (_e32.y * _e27)), fma(_e28.z, _e36, (_e32.z * _e27)), 1f); + global_2 = vec4(fma(_e28.x, _e36, (_e32.x * _e27)), fma(_e28.y, _e36, (_e32.y * _e27)), fma(_e28.z, _e36, (_e32.z * _e27)), 1f); return; } @fragment fn bloombloom_mix_fragment(@location(0) param: vec2, @location(1) @interpolate(flat) param_1: u32) -> @location(0) vec4 { global_1 = param; - global_2 = param_1; + global_3 = param_1; function(); - let _e5 = global_7; + let _e5 = global_2; return _e5; } diff --git a/crates/renderling/shaders/bloom-bloom_upsample_fragment.spv b/crates/renderling/shaders/bloom-bloom_upsample_fragment.spv index 64a6fd88cfc90229c4508df28f9960ab014f6fc0..01e78d0ad707826e21e489f9dfb6101bb9f14266 100644 GIT binary patch literal 3324 zcmZ9ONoFGSy_>o#?d?cUnGYITosvr~&x^=})|)4=Ms42_Ho zuUl75{dbOz4GfPC4fb!_HL!hnaOdts)(MUA)3F&?D>jEr>cxFzTga@>xITP~nAKi` zO6*uVF;#wj3oy0f&Pm_I`n+Oo-S%Q_4dd0RcU{K2Q~ma*-}V3gma5O$*=Nt@j#&2- zwa!Mnm~{hlG+3X@Y^?keGP`ead)~8auh3SlRDZIUyOMML24(qR+fK}`wqAtt)s?5iF zHEVV5#WQg2+mLf@yl3cGOkZo5t*_4-o~gsN_vqcLjlS1|Q)+J1-wE<9sG0N|oSMCt zQ`LK@mdxJEY5KmA`D%Qg<4suXx0ihOd^2Xhu8rx(?BOV^XLu4*=UJbk@^8$JzlqoP z6ZR`+E%E)i*3aP3J)d*^0%v}Ge-Upkb?VEt{2%Pp`oCl9%3w8@; zKJiuT!Z)-PbI-m*YsWqZ!TRn&?_1c0$u)ET+rh^B<|5av;K-#va_s=?i(I#XHrtkVstOdIsop1eA=IrGLxCZlSOkRD| z+>?2xN$#%9*+<0PojLCz`nVVD9_%CP{tLF3vaTDFH$L*+2ab;>xMt?cx_dKcUC+cj z+J|{go_o}7MO3dl6Heavs4)(fcLcW|EGHe@1DPxL`yia>?tMhvHbnKhbKvBSk9-e- zC>#l{9H$L*c2$pvQ_Yzo6I=GiJSH6Q+;QTgyukjo7D!7UHUV}Sc;go!@!Mz4n z@7)LYI#~U|f_npe96MBSZ-Ui(W}$rxtll#V?rpGo&upCc;=P@~)b|wJJ7D!C_bzMo za|O{|ANN?@GUQqTdg}d$93>`v~lB?EZrL z80>GXzdND*1g!pW!F>u=f280(1FQEzX z4fZU|5!^Rm_iv84i*Lc|*K?-9eaBjT$$igSz1(L0_BOyjVCs$6-;HhHuUad!zJGYV HYq9?TqV69M literal 3324 zcmZ9OOKg=z7={N56eFP+Q4oZl3Z}KxN>re!6frTW3l zs4FBfMu-6y8YC_Zx=_5|!Mn!G!f4`ct)Pj~=lRckI60Gi%sbC~x0(6d(lUKnYnnMN zrPP+zIWf*j)05KqhxsX;oo1y0z~F`(HuO&J*xY;Ns+Ic9O)XB?wObz9-9~)8QQXacx+uDb(a=vYv^yB@vcjMPwKw?x$pY_{g$fFxp~i?%^kj; zCu*HX>|)k6%u!=~A+x^n^U1uV;wdd)&p6li<+?qu?a$a6v%SdA#jAt417dIL`7rNj z1-|BAjyYVL_u^`mQV(}(t?c);WIaq_8mAcX9pN83c z4A%~0Ry1Vgy9lqI%rDJ6*1fEav%jlyEpuAWwfnxOK5@<~(E4=Kr{`aVS#veBah@T3 z*Px9xm$kiHN1VT}v0T5HT>WUzrmy{b_YT*-qi-L5c>c9mO7->b*HC^7#zgM5I;Z-; zYEICBs+P>Y-)T;8GxN3V+3zh_+~olIypLNk&+b~EAMx&N(b{e9cWbvrt8xgWXiK)V;Y?nKKr zlFK{33p2mmbK1Lo+Hbj*dv0S!G2=W-C#LW9&`A@6`yOB7*^;4PI%T2I$=F^!Q zA2oMo&UA*|o0)xt->%Gjhv?&ev}dr7sQWM4Udp;2NUne6djK6jG{Nebm34P#W?k>Z zH`;@FPu_dfZ6&C=?rfM`|EMvAmOFy&Ma#s&9?Gmd@53#PZ3H#fod=WaANd|Z z%N@ZUMa#s&9?Q(SQDXrP%{3On?O2J9PH)H%J1M6m_M6-ukkzRRdgNmdkuEH(kc19273){yl)@u zb+qvZ3iby2ICijLZ=#L&&LZ|LwDI0qu(#31duLO8FTUG5nDKoDdlzkd$=+jaylhUI zUB$kS_W#J2Gw;LvyKlbO{{S8P{w%p~?%4mZ*x#S`trPuzgx-lw73>7s-?4iOb`re{ z^Y>1~evCH$P{BSy8-KW9pQ4TTn~vDe(8eDt*ym{D{T9OS3$*cm3&FlbdoSh)_7&Q@ zFh{Vj(VpKN@fP2pjradY!M?|v7yj=yTH%, } @group(0) @binding(0) -var global: type_8; +var global: type_3; var global_1: vec2; @group(0) @binding(2) var global_2: sampler; diff --git a/crates/renderling/shaders/bloom-bloom_vertex.spv b/crates/renderling/shaders/bloom-bloom_vertex.spv index 34d11cdaa3cce0c490ce7ba1d465934aabc33968..be801ad55739343a3d53a101080606aa77e3a34b 100644 GIT binary patch literal 1336 zcmZA0*-n%}5Cz}{260>%kYAy^wV5(KQA!z<*ZFnk%4Ff8e=L+TTc)bt@1R_+HvZlFh zW~<$+wp@B#Os)&j!-z8s_8pFYDc@eI{!*61xgD&&SUJ_^#}A_M`o-&iG?!B5^VMAN zYCKn?*&B&bXFj6mm0&ZFk57(_xXeWO@n)k=$1ldl^LP1{Vmq*YmMc2N*D5|a*vvH4 zy53^=JKv4i@VM`0!}4`;E3x5`uV4GT6)dM5z9HiH7BUC(cegvyde_5luz8xDnRUGn zW0!LBy~C>&m-IeU=WsW8*aSD~cf_qVj6ciWYn=GA-2M25jX&l3b;b|kS5s~|i1<+- zz49=&J9#5_d=%|I-q{`Pm;IR-!}t!{8N0wI-uLzw-il>!#5(rqSF$~h7He15BkIF; z!+!$)nG6Tf&fnN}e9cX^#$YJB#*s#5s_Oiz1WfM2*0}a1ZKOVcTsOQ+Ue@SFC+5PLokcUUe~nf=Y%qoa4* z+m*e3e|UUy_#rn+_3njFht7l!O0S%4WE>te_)>%2J0DtWuw3wZgT=cUa@-e}-8o1` zxn`=|t1@3TF2wg-_$cIzg56`IU(DSLRbR?dY`TNh!&gkT(8I$9yUSnw{ME-k8_u78 zE>SLruS7E!PF|0XyLr~y!*Z}U5uZ+sh46lep50rC*V-2&v(xXyt{?SwCa@ad`B;|1 z+q_pIJFvR1R`ds7tN3((Bd@5Y>x~b6t6Po?PwH+oSiIKH4B)YDQ2V(RET$OlAbxau zABF2pZoPSbZ>yiS=9S2$oPKWc?TSlk?$>u(4d#Q`#&wQucN+XZ+ug>-|KEG}qI2hO z+n~6(udNM;j*%AAzC)iHeUwAW;J?VrTd-E+bd>GExZmfmGgYANU z1pb-``{B;d$Y%W_Q3NCk>&oF-0Y7-eC*p^Eb^J#r`YY%lMo+vIiH3* zKN6n}-VDi$e-Bp|%=RjAM&ZvwVvD6VGv5l)%WLj1S&!aXzMXKV%?CdZiH}d_W0TJe ec0=N{`OIUl(aT{bFxfo3%VaD){K{muLcamfm_LmG diff --git a/crates/renderling/shaders/bloom-bloom_vertex.wgsl b/crates/renderling/shaders/bloom-bloom_vertex.wgsl index 08fba408..e7841877 100644 --- a/crates/renderling/shaders/bloom-bloom_vertex.wgsl +++ b/crates/renderling/shaders/bloom-bloom_vertex.wgsl @@ -4,9 +4,9 @@ struct VertexOutput { @builtin(position) member_2: vec4, } -var global: u32; +var global: vec2; var global_1: u32; -var global_2: vec2; +var global_2: u32; var global_3: vec4 = vec4(0f, 0f, 0f, 1f); var global_4: u32; @@ -16,8 +16,8 @@ fn function() { switch bitcast(0u) { default: { - let _e24 = global; - let _e25 = global_1; + let _e24 = global_1; + let _e25 = global_2; let _e26 = (_e24 % 6u); local = array, 6>(vec2(0f, 1f), vec2(1f, 1f), vec2(1f, 0f), vec2(1f, 0f), vec2(0f, 0f), vec2(0f, 1f)); let _e27 = (_e26 < 6u); @@ -26,7 +26,7 @@ fn function() { break; } let _e29 = local[_e26]; - global_2 = _e29; + global = _e29; local_1 = array, 6>(vec4(-1f, -1f, 0.5f, 1f), vec4(1f, -1f, 0.5f, 1f), vec4(1f, 1f, 0.5f, 1f), vec4(1f, 1f, 0.5f, 1f), vec4(-1f, 1f, 0.5f, 1f), vec4(-1f, -1f, 0.5f, 1f)); if _e27 { } else { @@ -43,12 +43,12 @@ fn function() { @vertex fn bloombloom_vertex(@builtin(vertex_index) param: u32, @builtin(instance_index) param_1: u32) -> VertexOutput { - global = param; - global_1 = param_1; + global_1 = param; + global_2 = param_1; function(); let _e8 = global_3.y; global_3.y = -(_e8); - let _e10 = global_2; + let _e10 = global; let _e11 = global_4; let _e12 = global_3; return VertexOutput(_e10, _e11, _e12); diff --git a/crates/renderling/shaders/convolution-brdf_lut_convolution_fragment.spv b/crates/renderling/shaders/convolution-brdf_lut_convolution_fragment.spv index 50662b7c9f3005148372dca4149fc346a211a8cb..758e616b28e349197f2d5926fca2a59f27d244f0 100644 GIT binary patch delta 943 zcmYjQO=}ZT6n!rM7R^ks&3Do^#ScP>MY~a?Xvv~x)4CCnATC@KEm2%Z z5wzjP;znHP9|$OjJB2PpyX>MrpolvwxTsL@+&3A_z`5_9`|i2-y_=U#rjyz1wBHrl zuj1|REAx4wi(^8FQviR=k7G?L_Mf|oKdOz0knrFKx)iO;G5RG(TC6$^iW1W@g9trr^u&%x&!91Bj6haVN91)(M!kYe9v3BKOP z%kXVr6wxWHF2D_0>tUS+3L>l;&A{g|1PB_=BF04neh#!=r>)SI!{@sM1QM6#wDQRm zA}k6D?}hxvDvLI>E7GG~?X7faO<$5p+R?{hf9egy7mS+0zfF-gjI>NqSJ^$|ft;dx zxFO5b4G+U^hpX6?5zfg*-pCStgK}z6 zJaS@rnWMSbqPoXl%w-?=4J7GxY{}vQoyFPD07*KERV>yrdk#I60~M1ea2b&qS{wL* zYOC=lN_PXXWu-fa`#NU6Zrbv7O{HsE&t!%Ut-Da)9`x1g*mVzMlf3JFM+qbY=bSf(T z1+mX6-gG#=>)e5Aey9w4Z|K`Hzxh0>@>;;U0$d0F2vfaPySLY$v)Y&AL3b0JpC0G% M|Ay;K(#zr2KizkM7XSbN delta 916 zcmYjQ&ubG=5PmPan`F~&cek~~T8tYpP2z5vh6F`IiA9T`l%l1F7!THqhy?NAp{Ud% zC`HhQiAV7ucn>IuH-#QV3SN5XA5g?&1rHSpe)BfLUHInBuWx4F>~6QvEo^qJOF|c# z5F!JJPN&@Yal<+yV#@XrJ4$nM!WV+|38Z8>PdsUOuunphz%iiSw>4_Zbn`T7a>Y}C zs)92IaQ2|m6m&f22X;QRYiU#}K<92e*??b!o}_h|UUQZAe0#$9bg>ZX`CLw zon?QjGW23!pMf5TxawGe?nN-@T!oJtFdtKCq9*8B?7hoVUX0{tX;v#A=X)|^P<1yJ zZq4IN+R(1Z4DD#|WR_O-CF#+&J_-3tZ^1urG>j9-^J&A#%N+HT+%+D`Xa5{Af-oAPCW zW>bsm9)Gc*J>WOs(VNtg#qaMdW6*a~?SE9A8muWh}MQ*>b61N+WM$bO8-BgH-#3E6Cg>~nU=-c;-db{)Ix z*}TDRdve^vJfHb?IIrR+^XfK-_9Eg7&IRnC^u=yM09R5SN&J4XC GTl)vhaen{+ diff --git a/crates/renderling/shaders/convolution-brdf_lut_convolution_fragment.wgsl b/crates/renderling/shaders/convolution-brdf_lut_convolution_fragment.wgsl index 35c613e2..09def563 100644 --- a/crates/renderling/shaders/convolution-brdf_lut_convolution_fragment.wgsl +++ b/crates/renderling/shaders/convolution-brdf_lut_convolution_fragment.wgsl @@ -1,4 +1,4 @@ -struct type_6 { +struct type_5 { member: u32, member_1: u32, } @@ -7,11 +7,11 @@ var global: vec2; var global_1: vec2; fn function() { - var phi_266_: type_6; + var phi_266_: type_5; var phi_269_: f32; var phi_271_: f32; - var phi_267_: type_6; - var phi_294_: type_6; + var phi_267_: type_5; + var phi_294_: type_5; var phi_586_: vec3; var phi_621_: vec3; var phi_656_: vec3; @@ -29,7 +29,7 @@ fn function() { let _e40 = max(_e37.x, 0.00000011920929f); let _e41 = -(_e40); let _e43 = sqrt(fma(_e41, _e40, 1f)); - phi_266_ = type_6(1u, 1024u); + phi_266_ = type_5(1u, 1024u); phi_269_ = 0f; phi_271_ = 0f; loop { @@ -39,11 +39,11 @@ fn function() { local = _e49; local_1 = _e47; if (_e45.member < _e45.member_1) { - phi_267_ = type_6((_e45.member + 1u), _e45.member_1); - phi_294_ = type_6(1u, _e45.member); + phi_267_ = type_5((_e45.member + 1u), _e45.member_1); + phi_294_ = type_5(1u, _e45.member); } else { phi_267_ = _e45; - phi_294_ = type_6(0u, type_6().member_1); + phi_294_ = type_5(0u, type_5().member_1); } let _e62 = phi_267_; let _e64 = phi_294_; diff --git a/crates/renderling/shaders/convolution-brdf_lut_convolution_vertex.spv b/crates/renderling/shaders/convolution-brdf_lut_convolution_vertex.spv index 80ed1bc4bb88068dd4b1f7a07fb1686e9a8d633f..9a7dd9423bb34c7211f98030af726994207e7e45 100644 GIT binary patch delta 317 zcmeC-?%|$LF|k8nVuirO8DA!|FiF&lGeCeg0}BH`kST%2mjv@0>_r%u7^Hw~YoIzo zAk7TLAbq?*wlokk0x^s)17tHn`5<#;ftZ1zVLwb>4#)$VF$x73eBdfMOtV$;oe_DnLABGt{9fBqr-JD}!x8SD^*fAu&0Zc{-!` gWL6e^MybiBEa5(^yIB9>lq~{r?RR800a>o_5c6? delta 287 zcmeC-?%|$LF|k8nVuirO8DDrs7?>Eu85kI}8CV#2CvRkw^oOwdfnriX%)roKZw-_a z1hSZ+7^D^?FAc;%`TbzMK$Z*;GXXJ-FAHQdPVQuso-D&uA`4Ot!jeF&!@$bG4Wt#J ze5uK6nUrNg_Mxj#0g8ddr6#|HssQnj%}|G`kesZ`tPHjVU4<4@hvej3=IM+QlUZ5x c8O0}?vV;TKy)5dCvXi&6tY?&(oXV;W0M~>cG5`Po diff --git a/crates/renderling/shaders/convolution-brdf_lut_convolution_vertex.wgsl b/crates/renderling/shaders/convolution-brdf_lut_convolution_vertex.wgsl index b2cdaae9..cc8d82c9 100644 --- a/crates/renderling/shaders/convolution-brdf_lut_convolution_vertex.wgsl +++ b/crates/renderling/shaders/convolution-brdf_lut_convolution_vertex.wgsl @@ -8,8 +8,8 @@ struct VertexOutput { @builtin(position) member_1: vec4, } -var global: vec2; -var global_1: u32; +var global: u32; +var global_1: vec2; var global_2: vec4 = vec4(0f, 0f, 0f, 1f); fn function() { @@ -17,7 +17,7 @@ fn function() { switch bitcast(0u) { default: { - let _e26 = global_1; + let _e26 = global; local = array(type_10(array(-1f, -1f, 0f), array(0f, 1f)), type_10(array(1f, -1f, 0f), array(1f, 1f)), type_10(array(1f, 1f, 0f), array(1f, 0f)), type_10(array(-1f, -1f, 0f), array(0f, 1f)), type_10(array(1f, 1f, 0f), array(1f, 0f)), type_10(array(-1f, 1f, 0f), array(0f, 0f))); if (_e26 < 6u) { } else { @@ -25,7 +25,7 @@ fn function() { } let _e30 = local[_e26].member; let _e33 = local[_e26].member_1; - global = vec2(_e33[0], _e33[1]); + global_1 = vec2(_e33[0], _e33[1]); global_2 = vec4(_e30[0], _e30[1], _e30[2], 1f); break; } @@ -35,11 +35,11 @@ fn function() { @vertex fn convolutionbrdf_lut_convolution_vertex(@builtin(vertex_index) param: u32) -> VertexOutput { - global_1 = param; + global = param; function(); let _e5 = global_2.y; global_2.y = -(_e5); - let _e7 = global; + let _e7 = global_1; let _e8 = global_2; return VertexOutput(_e7, _e8); } diff --git a/crates/renderling/shaders/convolution-generate_mipmap_vertex.spv b/crates/renderling/shaders/convolution-generate_mipmap_vertex.spv index 9920cd37c70cec9089a8af5590e83d5f81f0c78d..e8d8857ce0cd287ba681029a7c89134aaa6ba34b 100644 GIT binary patch delta 318 zcmZ9HI}XAy5JVT7j}}D7FGQe#L=(6{3d)>-io?JWjC=|@iZmRA6L1U~W)d4kSbDN& zc6M!7TB&o15s?wdK`C9a*w;XA_xGiMp*SadzoT)($Q>72F1RTmCY$6Oc7a2+Y&YVxp=z)w;$pG~V@IUR^CTM#9wJkjM U{A&JX3ZGf0e8U4DO#Rb-zC524w*UYD delta 312 zcmdnOxrKAW1W9HF1_n7G1_5^l76v9D%?-p_6IVX27XflbfE;b01Q(DN1!53@@x{Qr z274U_R#3KsJaE5#wZFV_=YCkOm5X3MzS;T0!0*n7{r$aVvv83O1J2QD}HDU&rPCr|_w5{#22 TnWuAtT(JS@MUlxnnSTQSEnpO( diff --git a/crates/renderling/shaders/convolution-generate_mipmap_vertex.wgsl b/crates/renderling/shaders/convolution-generate_mipmap_vertex.wgsl index 4df4b270..dddba550 100644 --- a/crates/renderling/shaders/convolution-generate_mipmap_vertex.wgsl +++ b/crates/renderling/shaders/convolution-generate_mipmap_vertex.wgsl @@ -3,8 +3,8 @@ struct VertexOutput { @builtin(position) member_1: vec4, } -var global: vec2; -var global_1: u32; +var global: u32; +var global_1: vec2; var global_2: vec4 = vec4(0f, 0f, 0f, 1f); fn function() { @@ -13,7 +13,7 @@ fn function() { switch bitcast(0u) { default: { - let _e22 = global_1; + let _e22 = global; local = array, 6>(vec2(0f, 1f), vec2(1f, 1f), vec2(1f, 0f), vec2(1f, 0f), vec2(0f, 0f), vec2(0f, 1f)); let _e23 = (_e22 < 6u); if _e23 { @@ -21,7 +21,7 @@ fn function() { break; } let _e25 = local[_e22]; - global = _e25; + global_1 = _e25; local_1 = array, 6>(vec4(-1f, -1f, 0.5f, 1f), vec4(1f, -1f, 0.5f, 1f), vec4(1f, 1f, 0.5f, 1f), vec4(1f, 1f, 0.5f, 1f), vec4(-1f, 1f, 0.5f, 1f), vec4(-1f, -1f, 0.5f, 1f)); if _e23 { } else { @@ -37,11 +37,11 @@ fn function() { @vertex fn convolutiongenerate_mipmap_vertex(@builtin(vertex_index) param: u32) -> VertexOutput { - global_1 = param; + global = param; function(); let _e5 = global_2.y; global_2.y = -(_e5); - let _e7 = global; + let _e7 = global_1; let _e8 = global_2; return VertexOutput(_e7, _e8); } diff --git a/crates/renderling/shaders/convolution-prefilter_environment_cubemap_fragment.spv b/crates/renderling/shaders/convolution-prefilter_environment_cubemap_fragment.spv index 07b728ce17f56eab91b22052de3fcc0fbe7ae943..5ded01d23c32219d59029350eae05c6341a28046 100644 GIT binary patch delta 1594 zcmYjROH5Q(7(NH)!GM4`T*pUrrZMy~%uowgGUy01XeF_hiW(LTW#OVhs$F!|g^PhS zH4&l#|F~eGF>zyBH7YSa8f!2`Hd5n4MWd!Jn!ZA+3l=U+{l0VWF`UUa|Ns4u^ZNgL z&a|Fs9X~fQpPe|LJ)y^)j0&lwQtCs1gFGdt^y<=ZpQ!J#rF| zj3LY%kXb;f;oFus8?Fjkm8%r=kANoVT;pRP9q294GhcEeP+9?uO?DE`=fyQxdK2^% z;@W(h;rW1v0vq`T=uw~?NPy?$+p>769jpT2cDVg509WA=@&ISBd@J5gTceF0X^XNFf9KZycWaq-Qce>D3Ru^ zJcq^JXrqbrZ~6u7=nS3zr$WNW66$VrJSTAUW~Kf zg{3H8MLeCA$%xlL+d-fR%)oaD@@rrb{gi_I25{wdq#vvGLT>i zVcjVM75xr-=nht6e?7!pM*p1|`M;Kw!_*q(wv0$4da!!vN&o1`V? zrddKe!|$-Z0Qh;@8D4@v2YO^A7S|a$8FL+$)#m&O-yc9;9>n4f3vAc<2iCug=S|Gj zz4Ae2Jk2l1&io&I{{k$!&3O$@d%Fx&=JZ}US-CIFCTNs}$|P>Kx+`3JCKav=%V~esa`6L~slsAdBZG2nFC`WR-TOAV!n6 zwvn84!NxRkLo}KKG58~qwN0a4u;{|*_uc#MnS683cg{WM-gnQv z_sY>LM?YR$`K51VtxG)pQMpA`sCK1Pr}9)9Itx(9GtfB_h~t4_OC`rUEWhS>r{Svf z0_t|b&Y(`W^%>4_oTmq5u1X_~d=PMhhhTF7jt|3b0yvh%UjclKC_rZbE}Sv$ z>Z?Ey*+tl0DsFN{U~^}4b&>JBN~n^wRkoH#;h~fOZr(9ymbBmDsn;T&f#&xz9*cbB zjK?GHmV6u>A+xLu%rU^l#$lg=M7*qChvPGd8}J5r2yuJ@{AY;cli-aI$KM412jch? z_<#60egd2h@(j#ra<$ZJIoftoie9>n-_P$Eg=Q})UHDSAXBQ`j2lcotd#Qjsvj>ma zP}n@8Zlm|%CpR&eXZ=UB2!m?x_($v5Wze$}Eb z$XxZT&*St1X5;a@gIXU#56ez7)5?VWEbGg*p7U^gWm<%FjwIoIQ@OnpU4Jm zovZK%y!!wzo~v*ld=HqA9etJo=5OLG?8bCte%pW zYmxzPm8<+WVvhkf+vPk3r++}^Y6kVRT&|gkvH5{KsYzpJ>ub|GknY-9{GY4+)O4p2 z{c8YD%5Ys;=QrP~3pJW|vHpD%K7-Iakdq?~ws~Z>d2Dv-F|WD_sI zdEO)*Yqp7GHgUPxCVs+1`M&vc-7gD=E+G5hkj?%QkuOa42T7YvX0vZ3ZT5AOty{Ky zp1p6;GoH3};3|-lotA?6gs;F(8;|eL=$tJ0y*iXtzo0wijvux$dkfe>y|1B*xD$L> zzXSLzk(V~RpG$FH#!?0RFQ?|4c|>_E`8u7WmS?FK2YB(xsLum8feqjQ&kvV(3*ei@ dF?^6YrYPfwuN@9xjo>2kY5f)W7mvvh@IU-Q(;WZ+ diff --git a/crates/renderling/shaders/convolution-prefilter_environment_cubemap_fragment.wgsl b/crates/renderling/shaders/convolution-prefilter_environment_cubemap_fragment.wgsl index 148b79c8..9698c2e6 100644 --- a/crates/renderling/shaders/convolution-prefilter_environment_cubemap_fragment.wgsl +++ b/crates/renderling/shaders/convolution-prefilter_environment_cubemap_fragment.wgsl @@ -1,4 +1,4 @@ -struct type_7 { +struct type_5 { member: u32, member_1: u32, } @@ -13,11 +13,11 @@ var global_4: texture_cube; fn function() { var phi_454_: vec3; - var phi_104_: type_7; + var phi_104_: type_5; var phi_107_: vec3; var phi_109_: f32; - var phi_105_: type_7; - var phi_132_: type_7; + var phi_105_: type_5; + var phi_132_: type_5; var phi_635_: vec3; var phi_670_: vec3; var phi_705_: vec3; @@ -44,7 +44,7 @@ fn function() { } let _e55 = phi_454_; let _e57 = (_e55.y * -1f); - phi_104_ = type_7(0u, 1024u); + phi_104_ = type_5(0u, 1024u); phi_107_ = vec3(0f, 0f, 0f); phi_109_ = 0f; loop { @@ -58,11 +58,11 @@ fn function() { local_4 = _e61; local_5 = _e63; if (_e59.member < _e59.member_1) { - phi_105_ = type_7((_e59.member + 1u), _e59.member_1); - phi_132_ = type_7(1u, _e59.member); + phi_105_ = type_5((_e59.member + 1u), _e59.member_1); + phi_132_ = type_5(1u, _e59.member); } else { phi_105_ = _e59; - phi_132_ = type_7(0u, type_7().member_1); + phi_132_ = type_5(0u, type_5().member_1); } let _e76 = phi_105_; let _e78 = phi_132_; diff --git a/crates/renderling/shaders/convolution-prefilter_environment_cubemap_vertex.spv b/crates/renderling/shaders/convolution-prefilter_environment_cubemap_vertex.spv index 0ddafcc551bc0346703ea8fdf117e156184474eb..a8e990abfca5d5820b8132bf095cd1456f774bdc 100644 GIT binary patch literal 12400 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 h&BL#z8jdl>cZ?<6Y&hRjy0H$v@7RCLH6h_ literal 12400 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, } -struct type_20 { +struct type_12 { + member: u32, + member_1: u32, +} + +struct type_21 { member: vec4, member_1: vec4, member_2: vec4, member_3: vec4, } -struct type_21 { +struct type_22 { member: array, 8>, member_1: array, 6>, member_2: vec3, } -struct type_22 { - member: type_20, - member_1: type_20, +struct type_23 { + member: type_21, + member_1: type_21, member_2: vec3, - member_3: type_21, -} - -struct type_24 { - member: u32, - member_1: u32, + member_3: type_22, } struct VertexOutput { @@ -33,9 +33,9 @@ struct VertexOutput { @builtin(position) member_2: vec4, } +var global: u32; @group(0) @binding(0) -var global: type_10; -var global_1: u32; +var global_1: type_3; var global_2: u32; var global_3: f32; var global_4: vec3; @@ -46,25 +46,25 @@ fn function() { var local_1: array, 6>; var local_2: array, 36>; var phi_796_: bool; - var phi_165_: type_24; + var phi_165_: type_12; var phi_824_: bool; - var phi_326_: type_24; - var phi_327_: type_24; - var phi_350_: type_24; + var phi_326_: type_12; + var phi_327_: type_12; + var phi_350_: type_12; var phi_377_: bool; - var phi_383_: type_24; - var phi_384_: type_24; - var phi_407_: type_24; + var phi_383_: type_12; + var phi_384_: type_12; + var phi_407_: type_12; var phi_430_: bool; - var phi_451_: type_22; + var phi_451_: type_23; var phi_856_: bool; var phi_459_: f32; switch bitcast(0u) { default: { - let _e84 = global_1; - let _e85 = global_2; - let _e87 = arrayLength((&global.member)); + let _e84 = global_2; + let _e85 = global; + let _e87 = arrayLength((&global_1.member)); local_2 = array, 36>(vec3(-0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(-0.5f, 0.5f, -0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(0.5f, -0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, -0.5f, 0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(-0.5f, 0.5f, -0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(0.5f, -0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(-0.5f, 0.5f, -0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(-0.5f, -0.5f, -0.5f)); if (_e85 < 36u) { } else { @@ -78,11 +78,11 @@ fn function() { } let _e95 = phi_796_; if _e95 { - let _e98 = global.member[_e84]; - let _e102 = global.member[(_e84 + 1u)]; - phi_165_ = type_24(_e98, _e102); + let _e98 = global_1.member[_e84]; + let _e102 = global_1.member[(_e84 + 1u)]; + phi_165_ = type_12(_e98, _e102); } else { - phi_165_ = type_24(4294967295u, 4294967295u); + phi_165_ = type_12(4294967295u, 4294967295u); } let _e105 = phi_165_; if (_e87 >= 86u) { @@ -92,51 +92,51 @@ fn function() { } let _e112 = phi_824_; if _e112 { - let _e115 = global.member[_e105.member]; - let _e120 = global.member[(_e105.member + 1u)]; - let _e125 = global.member[(_e105.member + 2u)]; - let _e130 = global.member[(_e105.member + 3u)]; - let _e136 = global.member[(_e105.member + 4u)]; - let _e141 = global.member[(_e105.member + 5u)]; - let _e146 = global.member[(_e105.member + 6u)]; - let _e151 = global.member[(_e105.member + 7u)]; - let _e157 = global.member[(_e105.member + 8u)]; - let _e162 = global.member[(_e105.member + 9u)]; - let _e167 = global.member[(_e105.member + 10u)]; - let _e172 = global.member[(_e105.member + 11u)]; - let _e178 = global.member[(_e105.member + 12u)]; - let _e183 = global.member[(_e105.member + 13u)]; - let _e188 = global.member[(_e105.member + 14u)]; - let _e193 = global.member[(_e105.member + 15u)]; - let _e200 = global.member[(_e105.member + 16u)]; - let _e205 = global.member[(_e105.member + 17u)]; - let _e210 = global.member[(_e105.member + 18u)]; - let _e215 = global.member[(_e105.member + 19u)]; - let _e221 = global.member[(_e105.member + 20u)]; - let _e226 = global.member[(_e105.member + 21u)]; - let _e231 = global.member[(_e105.member + 22u)]; - let _e236 = global.member[(_e105.member + 23u)]; - let _e242 = global.member[(_e105.member + 24u)]; - let _e247 = global.member[(_e105.member + 25u)]; - let _e252 = global.member[(_e105.member + 26u)]; - let _e257 = global.member[(_e105.member + 27u)]; - let _e263 = global.member[(_e105.member + 28u)]; - let _e268 = global.member[(_e105.member + 29u)]; - let _e273 = global.member[(_e105.member + 30u)]; - let _e278 = global.member[(_e105.member + 31u)]; - let _e285 = global.member[(_e105.member + 32u)]; - let _e290 = global.member[(_e105.member + 33u)]; - let _e295 = global.member[(_e105.member + 34u)]; + let _e115 = global_1.member[_e105.member]; + let _e120 = global_1.member[(_e105.member + 1u)]; + let _e125 = global_1.member[(_e105.member + 2u)]; + let _e130 = global_1.member[(_e105.member + 3u)]; + let _e136 = global_1.member[(_e105.member + 4u)]; + let _e141 = global_1.member[(_e105.member + 5u)]; + let _e146 = global_1.member[(_e105.member + 6u)]; + let _e151 = global_1.member[(_e105.member + 7u)]; + let _e157 = global_1.member[(_e105.member + 8u)]; + let _e162 = global_1.member[(_e105.member + 9u)]; + let _e167 = global_1.member[(_e105.member + 10u)]; + let _e172 = global_1.member[(_e105.member + 11u)]; + let _e178 = global_1.member[(_e105.member + 12u)]; + let _e183 = global_1.member[(_e105.member + 13u)]; + let _e188 = global_1.member[(_e105.member + 14u)]; + let _e193 = global_1.member[(_e105.member + 15u)]; + let _e200 = global_1.member[(_e105.member + 16u)]; + let _e205 = global_1.member[(_e105.member + 17u)]; + let _e210 = global_1.member[(_e105.member + 18u)]; + let _e215 = global_1.member[(_e105.member + 19u)]; + let _e221 = global_1.member[(_e105.member + 20u)]; + let _e226 = global_1.member[(_e105.member + 21u)]; + let _e231 = global_1.member[(_e105.member + 22u)]; + let _e236 = global_1.member[(_e105.member + 23u)]; + let _e242 = global_1.member[(_e105.member + 24u)]; + let _e247 = global_1.member[(_e105.member + 25u)]; + let _e252 = global_1.member[(_e105.member + 26u)]; + let _e257 = global_1.member[(_e105.member + 27u)]; + let _e263 = global_1.member[(_e105.member + 28u)]; + let _e268 = global_1.member[(_e105.member + 29u)]; + let _e273 = global_1.member[(_e105.member + 30u)]; + let _e278 = global_1.member[(_e105.member + 31u)]; + let _e285 = global_1.member[(_e105.member + 32u)]; + let _e290 = global_1.member[(_e105.member + 33u)]; + let _e295 = global_1.member[(_e105.member + 34u)]; local_1 = array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); - phi_326_ = type_24(0u, 6u); + phi_326_ = type_12(0u, 6u); loop { let _e300 = phi_326_; if (_e300.member < _e300.member_1) { - phi_327_ = type_24((_e300.member + 1u), _e300.member_1); - phi_350_ = type_24(1u, _e300.member); + phi_327_ = type_12((_e300.member + 1u), _e300.member_1); + phi_350_ = type_12(1u, _e300.member); } else { phi_327_ = _e300; - phi_350_ = type_24(0u, type_24().member_1); + phi_350_ = type_12(0u, type_12().member_1); } let _e313 = phi_327_; let _e315 = phi_350_; @@ -147,10 +147,10 @@ fn function() { } case 1: { let _e320 = ((_e105.member + 35u) + (_e315.member_1 * 4u)); - let _e323 = global.member[_e320]; - let _e328 = global.member[(_e320 + 1u)]; - let _e333 = global.member[(_e320 + 2u)]; - let _e338 = global.member[(_e320 + 3u)]; + let _e323 = global_1.member[_e320]; + let _e328 = global_1.member[(_e320 + 1u)]; + let _e333 = global_1.member[(_e320 + 2u)]; + let _e338 = global_1.member[(_e320 + 3u)]; local_1[_e315.member_1] = vec4(bitcast(_e323), bitcast(_e328), bitcast(_e333), bitcast(_e338)); phi_377_ = true; break; @@ -169,15 +169,15 @@ fn function() { } let _e345 = local_1; local = array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); - phi_383_ = type_24(0u, 8u); + phi_383_ = type_12(0u, 8u); loop { let _e348 = phi_383_; if (_e348.member < _e348.member_1) { - phi_384_ = type_24((_e348.member + 1u), _e348.member_1); - phi_407_ = type_24(1u, _e348.member); + phi_384_ = type_12((_e348.member + 1u), _e348.member_1); + phi_407_ = type_12(1u, _e348.member); } else { phi_384_ = _e348; - phi_407_ = type_24(0u, type_24().member_1); + phi_407_ = type_12(0u, type_12().member_1); } let _e361 = phi_384_; let _e363 = phi_407_; @@ -188,9 +188,9 @@ fn function() { } case 1: { let _e368 = ((_e105.member + 59u) + (_e363.member_1 * 3u)); - let _e371 = global.member[_e368]; - let _e376 = global.member[(_e368 + 1u)]; - let _e381 = global.member[(_e368 + 2u)]; + let _e371 = global_1.member[_e368]; + let _e376 = global_1.member[(_e368 + 1u)]; + let _e381 = global_1.member[(_e368 + 2u)]; local[_e363.member_1] = vec3(bitcast(_e371), bitcast(_e376), bitcast(_e381)); phi_430_ = true; break; @@ -208,12 +208,12 @@ fn function() { } } let _e388 = local; - let _e392 = global.member[(_e105.member + 83u)]; - let _e397 = global.member[(_e105.member + 84u)]; - let _e402 = global.member[(_e105.member + 85u)]; - phi_451_ = type_22(type_20(vec4(bitcast(_e115), bitcast(_e120), bitcast(_e125), bitcast(_e130)), vec4(bitcast(_e136), bitcast(_e141), bitcast(_e146), bitcast(_e151)), vec4(bitcast(_e157), bitcast(_e162), bitcast(_e167), bitcast(_e172)), vec4(bitcast(_e178), bitcast(_e183), bitcast(_e188), bitcast(_e193))), type_20(vec4(bitcast(_e200), bitcast(_e205), bitcast(_e210), bitcast(_e215)), vec4(bitcast(_e221), bitcast(_e226), bitcast(_e231), bitcast(_e236)), vec4(bitcast(_e242), bitcast(_e247), bitcast(_e252), bitcast(_e257)), vec4(bitcast(_e263), bitcast(_e268), bitcast(_e273), bitcast(_e278))), vec3(bitcast(_e285), bitcast(_e290), bitcast(_e295)), type_21(_e388, _e345, vec3(bitcast(_e392), bitcast(_e397), bitcast(_e402)))); + let _e392 = global_1.member[(_e105.member + 83u)]; + let _e397 = global_1.member[(_e105.member + 84u)]; + let _e402 = global_1.member[(_e105.member + 85u)]; + phi_451_ = type_23(type_21(vec4(bitcast(_e115), bitcast(_e120), bitcast(_e125), bitcast(_e130)), vec4(bitcast(_e136), bitcast(_e141), bitcast(_e146), bitcast(_e151)), vec4(bitcast(_e157), bitcast(_e162), bitcast(_e167), bitcast(_e172)), vec4(bitcast(_e178), bitcast(_e183), bitcast(_e188), bitcast(_e193))), type_21(vec4(bitcast(_e200), bitcast(_e205), bitcast(_e210), bitcast(_e215)), vec4(bitcast(_e221), bitcast(_e226), bitcast(_e231), bitcast(_e236)), vec4(bitcast(_e242), bitcast(_e247), bitcast(_e252), bitcast(_e257)), vec4(bitcast(_e263), bitcast(_e268), bitcast(_e273), bitcast(_e278))), vec3(bitcast(_e285), bitcast(_e290), bitcast(_e295)), type_22(_e388, _e345, vec3(bitcast(_e392), bitcast(_e397), bitcast(_e402)))); } else { - phi_451_ = type_22(type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_21(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); + phi_451_ = type_23(type_21(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_21(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_22(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); } let _e408 = phi_451_; if (_e87 >= 1u) { @@ -223,7 +223,7 @@ fn function() { } let _e415 = phi_856_; if _e415 { - let _e418 = global.member[_e105.member_1]; + let _e418 = global_1.member[_e105.member_1]; phi_459_ = bitcast(_e418); } else { phi_459_ = 0f; @@ -240,8 +240,8 @@ fn function() { @vertex fn convolutionprefilter_environment_cubemap_vertex(@builtin(instance_index) param: u32, @builtin(vertex_index) param_1: u32) -> VertexOutput { - global_1 = param; - global_2 = param_1; + global_2 = param; + global = param_1; function(); let _e8 = global_5.y; global_5.y = -(_e8); diff --git a/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid.spv b/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid.spv index f5540eb64c4a9467a865f702985ef0b184746de8..9ca50a3133806554b8fba76dce88bbdc82e74445 100644 GIT binary patch delta 747 zcmYjPxk^Jp6rIUil7J~fQEPF5*30;GX)WvLuE3B;7G@?h?5 zAfkM#0G>fj5zM%NOa@#AxW-UZ0Vi=j2c|Fcrfwdw2IyVw=Q@!57t|1QpFqKAzrZud zqbZH+KyDB>5F6tr;vcLibW4bn02`Tn3-L6-#>-${$^w$AX{!|kEM{U61>Ez+#(;)v z0M~>Hsts^Xj(ioJm7Z^7g3URBhH}ubuLG%~#I4i}T~7cyt}54?iy-DRsVYm`iY;(j zr$eWlR0|qj^lXqb>hqzxnmk&uI@K3Lr+c`%QC|*nMtyDSe_uDH O6i9jMkH4CoK;ajFyiA4w delta 726 zcmYjPyGjF55WRO_F<^=q<06un5c1Gu6Jd!G6P1u6g@yP57Adv$18lVrlmP|7*9Z6n zK?_^K&#+A4Cy1W2?8;s^d*;r}nLBs(9;Oe|k3HR=QKqUXr3!$nEVTgU-U2epP>bLq za_V5()9^LGb!1e*p0stzYr>iYDzS(U+W;1!rlJiLpjwtEojF*+P6K&(rogO4M0Go` zf3dQNufi?>%wGtrbzw)jJ=pUA`(FdIjtTIzbue}Gcf&pI)(o5!^bw$dt+F5w8vtCh zDyfFxnj9M~-IRA@ILpR7U|HG0Kv?ua*03e;c! IIXe^eKS8!lDF6Tf diff --git a/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid.wgsl b/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid.wgsl index 1f9e813d..c1946754 100644 --- a/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid.wgsl +++ b/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid.wgsl @@ -1,22 +1,22 @@ -struct type_5 { +struct type_2 { member: array, } -struct type_8 { +struct type_9 { member: u32, member_1: u32, } var global: vec3; @group(0) @binding(0) -var global_1: type_5; +var global_1: type_2; @group(0) @binding(1) var global_2: texture_depth_2d; fn function() { var phi_285_: bool; var phi_312_: bool; - var phi_211_: type_8; + var phi_211_: type_9; var phi_338_: u32; let _e15 = arrayLength((&global_1.member)); @@ -46,9 +46,9 @@ fn function() { if _e55 { let _e58 = global_1.member[_e50]; let _e62 = global_1.member[(_e50 + 1u)]; - phi_211_ = type_8(_e58, _e62); + phi_211_ = type_9(_e58, _e62); } else { - phi_211_ = type_8(4294967295u, 0u); + phi_211_ = type_9(4294967295u, 0u); } let _e65 = phi_211_; let _e71 = ((_e16.y * (_e19 >> bitcast(0u))) + _e16.x); diff --git a/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid_multisampled.spv b/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid_multisampled.spv index 26d47eaf4ddac461ea45d4b1a2e095d1741d89c3..817ee7b5cdedb4652a035ff9aca28676490f286b 100644 GIT binary patch delta 757 zcmYjPyG{Z@6rFV+Kq3Vy65|U(6c=zY@`}+FAB6=b#;-6ju^?7fe8jcD%1&b<1|PAr zu&}VuFEH^ljD^v276zH*?7cJRo-=nYv|_DTXV;KZW2(8Jlo|%+fpKLj7cmJWl%=wW z+*`n?8d5pL6l(H_%yVEeh#tT-hMEFm66Z^Z^d+zBmXR9(y^CG03CVv!2|4#OC>ZG$ z1O{1LO5-x%_VNmHZCpkEixr1%4S5paMVj}K&jP%79g$6$KvL~ks)mHcBvw(tJzuO1 zXt)J%k>|wNBwsh7BC3w)N_*&Ff^BdX6=mbdru2NuJF_ndutRzK=GiCP)Mm$J2O6y(IJ z}N4LKf=+JS1>5 z`Z!)(1yv6+Cqv&!oGm&)Rax$8Sca!4j*&^T;4Q#Kc9e}MrS1UcBFmA!5v$XBzhLEB zTHvsw;mqf;M+, } -struct type_8 { +struct type_9 { member: u32, member_1: u32, } var global: vec3; @group(0) @binding(0) -var global_1: type_5; +var global_1: type_2; @group(0) @binding(1) var global_2: texture_depth_multisampled_2d; fn function() { var phi_285_: bool; var phi_312_: bool; - var phi_233_: type_8; + var phi_233_: type_9; var phi_338_: u32; let _e15 = arrayLength((&global_1.member)); @@ -46,9 +46,9 @@ fn function() { if _e55 { let _e58 = global_1.member[_e50]; let _e62 = global_1.member[(_e50 + 1u)]; - phi_233_ = type_8(_e58, _e62); + phi_233_ = type_9(_e58, _e62); } else { - phi_233_ = type_8(4294967295u, 0u); + phi_233_ = type_9(4294967295u, 0u); } let _e65 = phi_233_; let _e71 = ((_e16.y * (_e19 >> bitcast(0u))) + _e16.x); diff --git a/crates/renderling/shaders/cull-compute_culling.spv b/crates/renderling/shaders/cull-compute_culling.spv index 0aefddbab2de795df240dfb956e5ff193689dc0c..e86d76ade3f547591cb172c851964e1ba5b731a5 100644 GIT binary patch literal 26616 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 literal 26748 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 diff --git a/crates/renderling/shaders/cull-compute_culling.wgsl b/crates/renderling/shaders/cull-compute_culling.wgsl index d296ecc4..67b8bbbe 100644 --- a/crates/renderling/shaders/cull-compute_culling.wgsl +++ b/crates/renderling/shaders/cull-compute_culling.wgsl @@ -1,52 +1,51 @@ -struct type_9 { +struct type_2 { member: array, } -struct type_15 { +struct type_12 { + member: u32, + member_1: u32, +} + +struct type_17 { member: vec4, member_1: vec4, member_2: vec4, member_3: vec4, } -struct type_16 { +struct type_18 { member: array, 8>, member_1: array, 6>, member_2: vec3, } -struct type_17 { - member: type_15, - member_1: type_15, - member_2: vec3, - member_3: type_16, -} - struct type_19 { - member: u32, - member_1: u32, + member: type_17, + member_1: type_17, + member_2: vec3, + member_3: type_18, } -struct type_23 { +struct type_24 { member: u32, member_1: u32, member_2: u32, member_3: u32, } -struct type_25 { - member: array, +struct type_26 { + member: array, } struct type_31 { member: vec2, member_1: vec2, - member_2: type_19, - member_3: u32, + member_2: u32, + member_3: bool, member_4: bool, member_5: bool, member_6: bool, - member_7: bool, } struct type_32 { @@ -61,11 +60,11 @@ struct type_33 { } @group(0) @binding(0) -var global: type_9; +var global: type_2; @group(0) @binding(1) -var global_1: type_9; +var global_1: type_2; @group(0) @binding(2) -var global_2: type_25; +var global_2: type_26; var global_3: vec3; fn function() { @@ -77,71 +76,71 @@ fn function() { var local_5: array; var local_6: array, 8>; var local_7: array, 6>; - var phi_631_: u32; - var phi_667_: type_31; - var phi_2144_: bool; - var phi_832_: type_19; - var phi_833_: type_19; - var phi_856_: type_19; - var phi_883_: bool; - var phi_889_: type_19; - var phi_890_: type_19; - var phi_913_: type_19; - var phi_936_: bool; - var phi_957_: type_17; - var phi_2176_: bool; - var phi_1008_: type_32; - var phi_1140_: type_19; - var phi_1141_: type_19; - var phi_1164_: type_19; - var phi_1208_: bool; - var phi_1212_: bool; - var phi_1213_: bool; - var phi_2740_: bool; - var phi_2045_: bool; - var phi_2767_: bool; - var phi_1220_: type_19; - var phi_1221_: type_19; - var phi_1244_: type_19; - var phi_1254_: type_19; - var phi_1257_: i32; - var phi_1255_: type_19; - var phi_1280_: type_19; - var phi_1321_: i32; - var phi_1258_: i32; - var phi_1322_: bool; - var phi_2761_: bool; + var phi_628_: u32; + var phi_647_: type_31; + var phi_2090_: bool; + var phi_812_: type_12; + var phi_813_: type_12; + var phi_836_: type_12; + var phi_863_: bool; + var phi_869_: type_12; + var phi_870_: type_12; + var phi_893_: type_12; + var phi_916_: bool; + var phi_937_: type_19; + var phi_2122_: bool; + var phi_988_: type_32; + var phi_1120_: type_12; + var phi_1121_: type_12; + var phi_1144_: type_12; + var phi_1188_: bool; + var phi_1192_: bool; + var phi_1193_: bool; + var phi_2686_: bool; + var phi_2008_: bool; + var phi_2713_: bool; + var phi_1200_: type_12; + var phi_1201_: type_12; + var phi_1224_: type_12; + var phi_1234_: type_12; + var phi_1237_: i32; + var phi_1235_: type_12; + var phi_1260_: type_12; + var phi_1301_: i32; + var phi_1238_: i32; + var phi_1302_: bool; + var phi_2707_: bool; var local_8: i32; - var phi_1329_: type_19; - var phi_1332_: i32; - var phi_1330_: type_19; - var phi_1355_: type_19; - var phi_1396_: i32; - var phi_1333_: i32; - var phi_1397_: bool; - var phi_2768_: bool; + var phi_1309_: type_12; + var phi_1312_: i32; + var phi_1310_: type_12; + var phi_1335_: type_12; + var phi_1376_: i32; + var phi_1313_: i32; + var phi_1377_: bool; + var phi_2714_: bool; var local_9: i32; - var phi_2775_: bool; - var phi_1403_: bool; - var phi_1404_: bool; - var phi_2774_: bool; - var phi_1405_: bool; - var phi_1406_: bool; - var phi_1407_: bool; - var phi_1408_: bool; - var phi_2773_: bool; - var phi_2048_: bool; - var phi_2047_: bool; - var phi_2046_: bool; - var phi_1431_: type_33; - var phi_1432_: type_33; + var phi_2721_: bool; + var phi_1383_: bool; + var phi_1384_: bool; + var phi_2720_: bool; + var phi_1385_: bool; + var phi_1386_: bool; + var phi_1387_: bool; + var phi_1388_: bool; + var phi_2719_: bool; + var phi_2011_: bool; + var phi_2010_: bool; + var phi_2009_: bool; + var phi_1411_: type_33; + var phi_1412_: type_33; var local_10: u32; - var phi_1438_: type_33; - var phi_1439_: type_33; - var phi_1703_: u32; - var phi_2559_: bool; - var phi_1721_: type_19; - var phi_2585_: u32; + var phi_1418_: type_33; + var phi_1419_: type_33; + var phi_1683_: u32; + var phi_2505_: bool; + var phi_1701_: type_12; + var phi_2531_: u32; switch bitcast(0u) { default: { @@ -169,7 +168,7 @@ fn function() { global_2.member[_e98.x].member_1 = select(0u, 1u, (_e107 == 1u)); if (_e132 == 0f) { } else { - if select(false, true, (_e93 >= 11u)) { + if select(false, true, (_e93 >= 9u)) { let _e163 = global.member[0u]; let _e166 = global.member[1u]; let _e170 = global.member[2u]; @@ -177,674 +176,672 @@ fn function() { let _e177 = global.member[4u]; switch bitcast(_e177) { case 0: { - phi_631_ = 0u; + phi_628_ = 0u; break; } case 1: { - phi_631_ = 1u; + phi_628_ = 1u; break; } case 2: { - phi_631_ = 2u; + phi_628_ = 2u; break; } case 3: { - phi_631_ = 3u; + phi_628_ = 3u; break; } case 4: { - phi_631_ = 4u; + phi_628_ = 4u; break; } case 5: { - phi_631_ = 5u; + phi_628_ = 5u; break; } case 6: { - phi_631_ = 6u; + phi_628_ = 6u; break; } case 7: { - phi_631_ = 7u; + phi_628_ = 7u; break; } case 8: { - phi_631_ = 8u; + phi_628_ = 8u; break; } case 9: { - phi_631_ = 9u; + phi_628_ = 9u; break; } case 10: { - phi_631_ = 10u; + phi_628_ = 10u; break; } case 11: { - phi_631_ = 11u; + phi_628_ = 11u; break; } case 12: { - phi_631_ = 12u; + phi_628_ = 12u; break; } case 13: { - phi_631_ = 13u; + phi_628_ = 13u; break; } case 14: { - phi_631_ = 14u; + phi_628_ = 14u; break; } case 15: { - phi_631_ = 15u; + phi_628_ = 15u; break; } case 16: { - phi_631_ = 16u; + phi_628_ = 16u; break; } case 17: { - phi_631_ = 17u; + phi_628_ = 17u; break; } case 18: { - phi_631_ = 18u; + phi_628_ = 18u; break; } case 19: { - phi_631_ = 19u; + phi_628_ = 19u; break; } default: { - phi_631_ = 0u; + phi_628_ = 0u; break; } } - let _e180 = phi_631_; + let _e180 = phi_628_; let _e183 = global.member[5u]; let _e187 = global.member[6u]; let _e191 = global.member[7u]; let _e195 = global.member[8u]; - let _e199 = global.member[9u]; - let _e202 = global.member[10u]; - phi_667_ = type_31(vec2(_e163, _e166), vec2(_e170, _e173), type_19(_e199, _e202), _e180, (_e183 == 1u), (_e187 == 1u), (_e191 == 1u), (_e195 == 1u)); + phi_647_ = type_31(vec2(_e163, _e166), vec2(_e170, _e173), _e180, (_e183 == 1u), (_e187 == 1u), (_e191 == 1u), (_e195 == 1u)); } else { - phi_667_ = type_31(vec2(0u, 0u), vec2(1u, 1u), type_19(4294967295u, 0u), 0u, true, true, true, false); + phi_647_ = type_31(vec2(0u, 0u), vec2(1u, 1u), 0u, true, true, true, false); } - let _e206 = phi_667_; - if _e206.member_6 { + let _e199 = phi_647_; + if _e199.member_5 { if (_e93 >= 86u) { - phi_2144_ = (_e144 <= (_e93 - 86u)); + phi_2090_ = (_e144 <= (_e93 - 86u)); } else { - phi_2144_ = false; + phi_2090_ = false; } - let _e212 = phi_2144_; - if _e212 { - let _e215 = global.member[_e144]; - let _e220 = global.member[(_e144 + 1u)]; - let _e225 = global.member[(_e144 + 2u)]; - let _e230 = global.member[(_e144 + 3u)]; - let _e236 = global.member[(_e144 + 4u)]; - let _e241 = global.member[(_e144 + 5u)]; - let _e246 = global.member[(_e144 + 6u)]; - let _e251 = global.member[(_e144 + 7u)]; - let _e257 = global.member[(_e144 + 8u)]; - let _e262 = global.member[(_e144 + 9u)]; - let _e267 = global.member[(_e144 + 10u)]; - let _e272 = global.member[(_e144 + 11u)]; - let _e278 = global.member[(_e144 + 12u)]; - let _e283 = global.member[(_e144 + 13u)]; - let _e288 = global.member[(_e144 + 14u)]; - let _e293 = global.member[(_e144 + 15u)]; - let _e300 = global.member[(_e144 + 16u)]; - let _e305 = global.member[(_e144 + 17u)]; - let _e310 = global.member[(_e144 + 18u)]; - let _e315 = global.member[(_e144 + 19u)]; - let _e321 = global.member[(_e144 + 20u)]; - let _e326 = global.member[(_e144 + 21u)]; - let _e331 = global.member[(_e144 + 22u)]; - let _e336 = global.member[(_e144 + 23u)]; - let _e342 = global.member[(_e144 + 24u)]; - let _e347 = global.member[(_e144 + 25u)]; - let _e352 = global.member[(_e144 + 26u)]; - let _e357 = global.member[(_e144 + 27u)]; - let _e363 = global.member[(_e144 + 28u)]; - let _e368 = global.member[(_e144 + 29u)]; - let _e373 = global.member[(_e144 + 30u)]; - let _e378 = global.member[(_e144 + 31u)]; - let _e385 = global.member[(_e144 + 32u)]; - let _e390 = global.member[(_e144 + 33u)]; - let _e395 = global.member[(_e144 + 34u)]; + let _e205 = phi_2090_; + if _e205 { + let _e208 = global.member[_e144]; + let _e213 = global.member[(_e144 + 1u)]; + let _e218 = global.member[(_e144 + 2u)]; + let _e223 = global.member[(_e144 + 3u)]; + let _e229 = global.member[(_e144 + 4u)]; + let _e234 = global.member[(_e144 + 5u)]; + let _e239 = global.member[(_e144 + 6u)]; + let _e244 = global.member[(_e144 + 7u)]; + let _e250 = global.member[(_e144 + 8u)]; + let _e255 = global.member[(_e144 + 9u)]; + let _e260 = global.member[(_e144 + 10u)]; + let _e265 = global.member[(_e144 + 11u)]; + let _e271 = global.member[(_e144 + 12u)]; + let _e276 = global.member[(_e144 + 13u)]; + let _e281 = global.member[(_e144 + 14u)]; + let _e286 = global.member[(_e144 + 15u)]; + let _e293 = global.member[(_e144 + 16u)]; + let _e298 = global.member[(_e144 + 17u)]; + let _e303 = global.member[(_e144 + 18u)]; + let _e308 = global.member[(_e144 + 19u)]; + let _e314 = global.member[(_e144 + 20u)]; + let _e319 = global.member[(_e144 + 21u)]; + let _e324 = global.member[(_e144 + 22u)]; + let _e329 = global.member[(_e144 + 23u)]; + let _e335 = global.member[(_e144 + 24u)]; + let _e340 = global.member[(_e144 + 25u)]; + let _e345 = global.member[(_e144 + 26u)]; + let _e350 = global.member[(_e144 + 27u)]; + let _e356 = global.member[(_e144 + 28u)]; + let _e361 = global.member[(_e144 + 29u)]; + let _e366 = global.member[(_e144 + 30u)]; + let _e371 = global.member[(_e144 + 31u)]; + let _e378 = global.member[(_e144 + 32u)]; + let _e383 = global.member[(_e144 + 33u)]; + let _e388 = global.member[(_e144 + 34u)]; local_7 = array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); - phi_832_ = type_19(0u, 6u); + phi_812_ = type_12(0u, 6u); loop { - let _e400 = phi_832_; - if (_e400.member < _e400.member_1) { - phi_833_ = type_19((_e400.member + 1u), _e400.member_1); - phi_856_ = type_19(1u, _e400.member); + let _e393 = phi_812_; + if (_e393.member < _e393.member_1) { + phi_813_ = type_12((_e393.member + 1u), _e393.member_1); + phi_836_ = type_12(1u, _e393.member); } else { - phi_833_ = _e400; - phi_856_ = type_19(0u, type_19().member_1); + phi_813_ = _e393; + phi_836_ = type_12(0u, type_12().member_1); } - let _e413 = phi_833_; - let _e415 = phi_856_; - switch bitcast(_e415.member) { + let _e406 = phi_813_; + let _e408 = phi_836_; + switch bitcast(_e408.member) { case 0: { - phi_883_ = false; + phi_863_ = false; break; } case 1: { - let _e420 = ((_e144 + 35u) + (_e415.member_1 * 4u)); - let _e423 = global.member[_e420]; - let _e428 = global.member[(_e420 + 1u)]; - let _e433 = global.member[(_e420 + 2u)]; - let _e438 = global.member[(_e420 + 3u)]; - local_7[_e415.member_1] = vec4(bitcast(_e423), bitcast(_e428), bitcast(_e433), bitcast(_e438)); - phi_883_ = true; + let _e413 = ((_e144 + 35u) + (_e408.member_1 * 4u)); + let _e416 = global.member[_e413]; + let _e421 = global.member[(_e413 + 1u)]; + let _e426 = global.member[(_e413 + 2u)]; + let _e431 = global.member[(_e413 + 3u)]; + local_7[_e408.member_1] = vec4(bitcast(_e416), bitcast(_e421), bitcast(_e426), bitcast(_e431)); + phi_863_ = true; break; } default: { - phi_883_ = bool(); + phi_863_ = bool(); break; } } - let _e443 = phi_883_; + let _e436 = phi_863_; continue; continuing { - phi_832_ = _e413; - break if !(_e443); + phi_812_ = _e406; + break if !(_e436); } } - let _e445 = local_7; + let _e438 = local_7; local_6 = array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); - phi_889_ = type_19(0u, 8u); + phi_869_ = type_12(0u, 8u); loop { - let _e448 = phi_889_; - if (_e448.member < _e448.member_1) { - phi_890_ = type_19((_e448.member + 1u), _e448.member_1); - phi_913_ = type_19(1u, _e448.member); + let _e441 = phi_869_; + if (_e441.member < _e441.member_1) { + phi_870_ = type_12((_e441.member + 1u), _e441.member_1); + phi_893_ = type_12(1u, _e441.member); } else { - phi_890_ = _e448; - phi_913_ = type_19(0u, type_19().member_1); + phi_870_ = _e441; + phi_893_ = type_12(0u, type_12().member_1); } - let _e461 = phi_890_; - let _e463 = phi_913_; - switch bitcast(_e463.member) { + let _e454 = phi_870_; + let _e456 = phi_893_; + switch bitcast(_e456.member) { case 0: { - phi_936_ = false; + phi_916_ = false; break; } case 1: { - let _e468 = ((_e144 + 59u) + (_e463.member_1 * 3u)); - let _e471 = global.member[_e468]; - let _e476 = global.member[(_e468 + 1u)]; - let _e481 = global.member[(_e468 + 2u)]; - local_6[_e463.member_1] = vec3(bitcast(_e471), bitcast(_e476), bitcast(_e481)); - phi_936_ = true; + let _e461 = ((_e144 + 59u) + (_e456.member_1 * 3u)); + let _e464 = global.member[_e461]; + let _e469 = global.member[(_e461 + 1u)]; + let _e474 = global.member[(_e461 + 2u)]; + local_6[_e456.member_1] = vec3(bitcast(_e464), bitcast(_e469), bitcast(_e474)); + phi_916_ = true; break; } default: { - phi_936_ = bool(); + phi_916_ = bool(); break; } } - let _e486 = phi_936_; + let _e479 = phi_916_; continue; continuing { - phi_889_ = _e461; - break if !(_e486); + phi_869_ = _e454; + break if !(_e479); } } - let _e488 = local_6; - let _e492 = global.member[(_e144 + 83u)]; - let _e497 = global.member[(_e144 + 84u)]; - let _e502 = global.member[(_e144 + 85u)]; - phi_957_ = type_17(type_15(vec4(bitcast(_e215), bitcast(_e220), bitcast(_e225), bitcast(_e230)), vec4(bitcast(_e236), bitcast(_e241), bitcast(_e246), bitcast(_e251)), vec4(bitcast(_e257), bitcast(_e262), bitcast(_e267), bitcast(_e272)), vec4(bitcast(_e278), bitcast(_e283), bitcast(_e288), bitcast(_e293))), type_15(vec4(bitcast(_e300), bitcast(_e305), bitcast(_e310), bitcast(_e315)), vec4(bitcast(_e321), bitcast(_e326), bitcast(_e331), bitcast(_e336)), vec4(bitcast(_e342), bitcast(_e347), bitcast(_e352), bitcast(_e357)), vec4(bitcast(_e363), bitcast(_e368), bitcast(_e373), bitcast(_e378))), vec3(bitcast(_e385), bitcast(_e390), bitcast(_e395)), type_16(_e488, _e445, vec3(bitcast(_e492), bitcast(_e497), bitcast(_e502)))); + let _e481 = local_6; + let _e485 = global.member[(_e144 + 83u)]; + let _e490 = global.member[(_e144 + 84u)]; + let _e495 = global.member[(_e144 + 85u)]; + phi_937_ = type_19(type_17(vec4(bitcast(_e208), bitcast(_e213), bitcast(_e218), bitcast(_e223)), vec4(bitcast(_e229), bitcast(_e234), bitcast(_e239), bitcast(_e244)), vec4(bitcast(_e250), bitcast(_e255), bitcast(_e260), bitcast(_e265)), vec4(bitcast(_e271), bitcast(_e276), bitcast(_e281), bitcast(_e286))), type_17(vec4(bitcast(_e293), bitcast(_e298), bitcast(_e303), bitcast(_e308)), vec4(bitcast(_e314), bitcast(_e319), bitcast(_e324), bitcast(_e329)), vec4(bitcast(_e335), bitcast(_e340), bitcast(_e345), bitcast(_e350)), vec4(bitcast(_e356), bitcast(_e361), bitcast(_e366), bitcast(_e371))), vec3(bitcast(_e378), bitcast(_e383), bitcast(_e388)), type_18(_e481, _e438, vec3(bitcast(_e485), bitcast(_e490), bitcast(_e495)))); } else { - phi_957_ = type_17(type_15(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_15(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_16(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); + phi_937_ = type_19(type_17(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_17(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_18(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); } - let _e508 = phi_957_; + let _e501 = phi_937_; if (_e93 >= 10u) { - phi_2176_ = (_e148 <= (_e93 - 10u)); + phi_2122_ = (_e148 <= (_e93 - 10u)); } else { - phi_2176_ = false; + phi_2122_ = false; } - let _e518 = phi_2176_; - if _e518 { - let _e521 = global.member[_e148]; - let _e526 = global.member[(_e148 + 1u)]; - let _e531 = global.member[(_e148 + 2u)]; - let _e537 = global.member[(_e148 + 3u)]; - let _e542 = global.member[(_e148 + 4u)]; - let _e547 = global.member[(_e148 + 5u)]; - let _e552 = global.member[(_e148 + 6u)]; - let _e558 = global.member[(_e148 + 7u)]; - let _e563 = global.member[(_e148 + 8u)]; - let _e568 = global.member[(_e148 + 9u)]; - phi_1008_ = type_32(vec3(bitcast(_e521), bitcast(_e526), bitcast(_e531)), vec4(bitcast(_e537), bitcast(_e542), bitcast(_e547), bitcast(_e552)), vec3(bitcast(_e558), bitcast(_e563), bitcast(_e568))); + let _e511 = phi_2122_; + if _e511 { + let _e514 = global.member[_e148]; + let _e519 = global.member[(_e148 + 1u)]; + let _e524 = global.member[(_e148 + 2u)]; + let _e530 = global.member[(_e148 + 3u)]; + let _e535 = global.member[(_e148 + 4u)]; + let _e540 = global.member[(_e148 + 5u)]; + let _e545 = global.member[(_e148 + 6u)]; + let _e551 = global.member[(_e148 + 7u)]; + let _e556 = global.member[(_e148 + 8u)]; + let _e561 = global.member[(_e148 + 9u)]; + phi_988_ = type_32(vec3(bitcast(_e514), bitcast(_e519), bitcast(_e524)), vec4(bitcast(_e530), bitcast(_e535), bitcast(_e540), bitcast(_e545)), vec3(bitcast(_e551), bitcast(_e556), bitcast(_e561))); } else { - phi_1008_ = type_32(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); + phi_988_ = type_32(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); } - let _e573 = phi_1008_; - let _e581 = (_e573.member_1.x + _e573.member_1.x); - let _e582 = (_e573.member_1.y + _e573.member_1.y); - let _e583 = (_e573.member_1.z + _e573.member_1.z); - let _e585 = (_e573.member_1.z * _e583); - let _e586 = (_e573.member_1.w * _e581); - let _e587 = (_e573.member_1.w * _e582); - let _e588 = (_e573.member_1.w * _e583); - let _e608 = (vec4((1f - fma(_e573.member_1.y, _e582, _e585)), fma(_e573.member_1.x, _e582, _e588), fma(_e573.member_1.x, _e583, -(_e587)), 0f) * _e573.member_2.x); - let _e610 = (vec4(fma(_e573.member_1.x, _e582, -(_e588)), (1f - fma(_e573.member_1.x, _e581, _e585)), fma(_e573.member_1.y, _e583, _e586), 0f) * _e573.member_2.y); - let _e612 = (vec4(fma(_e573.member_1.x, _e583, _e587), fma(_e573.member_1.y, _e583, -(_e586)), (1f - fma(_e573.member_1.x, _e581, (_e573.member_1.y * _e582))), 0f) * _e573.member_2.z); - let _e634 = (_e573.member.x + fma(_e612.x, _e127, fma(_e610.x, _e122, (_e608.x * _e117)))); - let _e635 = (_e573.member.y + fma(_e612.y, _e127, fma(_e610.y, _e122, (_e608.y * _e117)))); - let _e636 = (_e573.member.z + fma(_e612.z, _e127, fma(_e610.z, _e122, (_e608.z * _e117)))); - let _e637 = vec3(_e634, _e635, _e636); - let _e640 = (max(_e573.member_2.x, max(_e573.member_2.y, _e573.member_2.z)) * _e132); - let _e642 = sqrt((_e640 * _e640)); - local_1 = _e508.member_3.member; - local = _e508.member_3.member_1; - let _e645 = local[0u][0u]; - let _e648 = local[0u][1u]; - let _e653 = local[0u][2u]; - let _e657 = local[0u][3u]; - let _e659 = -(_e642); - if ((fma(_e653, _e636, fma(_e645, _e634, (_e648 * _e635))) + _e657) < _e659) { - phi_1439_ = type_33(true, 0u); + let _e566 = phi_988_; + let _e574 = (_e566.member_1.x + _e566.member_1.x); + let _e575 = (_e566.member_1.y + _e566.member_1.y); + let _e576 = (_e566.member_1.z + _e566.member_1.z); + let _e578 = (_e566.member_1.z * _e576); + let _e579 = (_e566.member_1.w * _e574); + let _e580 = (_e566.member_1.w * _e575); + let _e581 = (_e566.member_1.w * _e576); + let _e601 = (vec4((1f - fma(_e566.member_1.y, _e575, _e578)), fma(_e566.member_1.x, _e575, _e581), fma(_e566.member_1.x, _e576, -(_e580)), 0f) * _e566.member_2.x); + let _e603 = (vec4(fma(_e566.member_1.x, _e575, -(_e581)), (1f - fma(_e566.member_1.x, _e574, _e578)), fma(_e566.member_1.y, _e576, _e579), 0f) * _e566.member_2.y); + let _e605 = (vec4(fma(_e566.member_1.x, _e576, _e580), fma(_e566.member_1.y, _e576, -(_e579)), (1f - fma(_e566.member_1.x, _e574, (_e566.member_1.y * _e575))), 0f) * _e566.member_2.z); + let _e627 = (_e566.member.x + fma(_e605.x, _e127, fma(_e603.x, _e122, (_e601.x * _e117)))); + let _e628 = (_e566.member.y + fma(_e605.y, _e127, fma(_e603.y, _e122, (_e601.y * _e117)))); + let _e629 = (_e566.member.z + fma(_e605.z, _e127, fma(_e603.z, _e122, (_e601.z * _e117)))); + let _e630 = vec3(_e627, _e628, _e629); + let _e633 = (max(_e566.member_2.x, max(_e566.member_2.y, _e566.member_2.z)) * _e132); + let _e635 = sqrt((_e633 * _e633)); + local_1 = _e501.member_3.member; + local = _e501.member_3.member_1; + let _e638 = local[0u][0u]; + let _e641 = local[0u][1u]; + let _e646 = local[0u][2u]; + let _e650 = local[0u][3u]; + let _e652 = -(_e635); + if ((fma(_e646, _e629, fma(_e638, _e627, (_e641 * _e628))) + _e650) < _e652) { + phi_1419_ = type_33(true, 0u); } else { - phi_1140_ = type_19(0u, 6u); + phi_1120_ = type_12(0u, 6u); loop { - let _e662 = phi_1140_; - if (_e662.member < _e662.member_1) { - phi_1141_ = type_19((_e662.member + 1u), _e662.member_1); - phi_1164_ = type_19(1u, _e662.member); + let _e655 = phi_1120_; + if (_e655.member < _e655.member_1) { + phi_1121_ = type_12((_e655.member + 1u), _e655.member_1); + phi_1144_ = type_12(1u, _e655.member); } else { - phi_1141_ = _e662; - phi_1164_ = type_19(0u, type_19().member_1); + phi_1121_ = _e655; + phi_1144_ = type_12(0u, type_12().member_1); } - let _e675 = phi_1141_; - let _e677 = phi_1164_; - local_10 = _e677.member_1; - switch bitcast(_e677.member) { + let _e668 = phi_1121_; + let _e670 = phi_1144_; + local_10 = _e670.member_1; + switch bitcast(_e670.member) { case 0: { - phi_1212_ = false; - phi_1213_ = true; + phi_1192_ = false; + phi_1193_ = true; break; } case 1: { - if (_e677.member_1 != 0u) { - if (_e677.member_1 < 6u) { + if (_e670.member_1 != 0u) { + if (_e670.member_1 < 6u) { } else { - phi_2740_ = true; - phi_2045_ = bool(); + phi_2686_ = true; + phi_2008_ = bool(); break; } - let _e685 = local[_e677.member_1][0u]; - let _e688 = local[_e677.member_1][1u]; - let _e693 = local[_e677.member_1][2u]; - let _e697 = local[_e677.member_1][3u]; - phi_1208_ = select(true, false, ((fma(_e693, _e636, fma(_e685, _e634, (_e688 * _e635))) + _e697) < _e659)); + let _e678 = local[_e670.member_1][0u]; + let _e681 = local[_e670.member_1][1u]; + let _e686 = local[_e670.member_1][2u]; + let _e690 = local[_e670.member_1][3u]; + phi_1188_ = select(true, false, ((fma(_e686, _e629, fma(_e678, _e627, (_e681 * _e628))) + _e690) < _e652)); } else { - phi_1208_ = true; + phi_1188_ = true; } - let _e702 = phi_1208_; - phi_1212_ = _e702; - phi_1213_ = false; + let _e695 = phi_1188_; + phi_1192_ = _e695; + phi_1193_ = false; break; } default: { - phi_1212_ = bool(); - phi_1213_ = bool(); + phi_1192_ = bool(); + phi_1193_ = bool(); break; } } - let _e704 = phi_1212_; - let _e706 = phi_1213_; + let _e697 = phi_1192_; + let _e699 = phi_1193_; continue; continuing { - phi_1140_ = _e675; - phi_2740_ = false; - phi_2045_ = _e706; - break if !(_e704); + phi_1120_ = _e668; + phi_2686_ = false; + phi_2008_ = _e699; + break if !(_e697); } } - let _e709 = phi_2740_; - let _e711 = phi_2045_; - if _e709 { + let _e702 = phi_2686_; + let _e704 = phi_2008_; + if _e702 { break; } - if _e711 { - let _e712 = vec3(_e642); - let _e713 = (_e637 - _e712); - let _e714 = (_e637 + _e712); - phi_2767_ = _e709; - phi_1220_ = type_19(0u, 3u); + if _e704 { + let _e705 = vec3(_e635); + let _e706 = (_e630 - _e705); + let _e707 = (_e630 + _e705); + phi_2713_ = _e702; + phi_1200_ = type_12(0u, 3u); loop { - let _e716 = phi_2767_; - let _e718 = phi_1220_; - if (_e718.member < _e718.member_1) { - phi_1221_ = type_19((_e718.member + 1u), _e718.member_1); - phi_1244_ = type_19(1u, _e718.member); + let _e709 = phi_2713_; + let _e711 = phi_1200_; + if (_e711.member < _e711.member_1) { + phi_1201_ = type_12((_e711.member + 1u), _e711.member_1); + phi_1224_ = type_12(1u, _e711.member); } else { - phi_1221_ = _e718; - phi_1244_ = type_19(0u, type_19().member_1); + phi_1201_ = _e711; + phi_1224_ = type_12(0u, type_12().member_1); } - let _e731 = phi_1221_; - let _e733 = phi_1244_; - switch bitcast(_e733.member) { + let _e724 = phi_1201_; + let _e726 = phi_1224_; + switch bitcast(_e726.member) { case 0: { - phi_2774_ = _e716; - phi_1405_ = false; - phi_1406_ = true; - phi_1407_ = false; - phi_1408_ = false; + phi_2720_ = _e709; + phi_1385_ = false; + phi_1386_ = true; + phi_1387_ = false; + phi_1388_ = false; break; } case 1: { - phi_1254_ = type_19(0u, 8u); - phi_1257_ = 0i; + phi_1234_ = type_12(0u, 8u); + phi_1237_ = 0i; loop { - let _e738 = phi_1254_; - let _e740 = phi_1257_; - local_8 = _e740; - if (_e738.member < _e738.member_1) { - phi_1255_ = type_19((_e738.member + 1u), _e738.member_1); - phi_1280_ = type_19(1u, _e738.member); + let _e731 = phi_1234_; + let _e733 = phi_1237_; + local_8 = _e733; + if (_e731.member < _e731.member_1) { + phi_1235_ = type_12((_e731.member + 1u), _e731.member_1); + phi_1260_ = type_12(1u, _e731.member); } else { - phi_1255_ = _e738; - phi_1280_ = type_19(0u, type_19().member_1); + phi_1235_ = _e731; + phi_1260_ = type_12(0u, type_12().member_1); } - let _e753 = phi_1255_; - let _e755 = phi_1280_; - switch bitcast(_e755.member) { + let _e746 = phi_1235_; + let _e748 = phi_1260_; + switch bitcast(_e748.member) { case 0: { - phi_1258_ = i32(); - phi_1322_ = false; + phi_1238_ = i32(); + phi_1302_ = false; break; } case 1: { - if (_e755.member_1 < 8u) { + if (_e748.member_1 < 8u) { } else { - phi_2761_ = true; + phi_2707_ = true; break; } - let _e762 = local_1[_e755.member_1][0u]; - let _e765 = local_1[_e755.member_1][1u]; - let _e768 = local_1[_e755.member_1][2u]; - local_2 = array(_e762, _e765, _e768); - let _e770 = (_e733.member_1 < 3u); - if _e770 { + let _e755 = local_1[_e748.member_1][0u]; + let _e758 = local_1[_e748.member_1][1u]; + let _e761 = local_1[_e748.member_1][2u]; + local_2 = array(_e755, _e758, _e761); + let _e763 = (_e726.member_1 < 3u); + if _e763 { } else { - phi_2761_ = true; + phi_2707_ = true; break; } - let _e772 = local_2[_e733.member_1]; - local_3 = array(_e713.x, _e713.y, _e713.z); - if _e770 { + let _e765 = local_2[_e726.member_1]; + local_3 = array(_e706.x, _e706.y, _e706.z); + if _e763 { } else { - phi_2761_ = true; + phi_2707_ = true; break; } - let _e778 = local_3[_e733.member_1]; - if (_e772 < _e778) { - phi_1321_ = (_e740 + 1i); + let _e771 = local_3[_e726.member_1]; + if (_e765 < _e771) { + phi_1301_ = (_e733 + 1i); } else { - phi_1321_ = _e740; + phi_1301_ = _e733; } - let _e782 = phi_1321_; - phi_1258_ = _e782; - phi_1322_ = true; + let _e775 = phi_1301_; + phi_1238_ = _e775; + phi_1302_ = true; break; } default: { - phi_1258_ = i32(); - phi_1322_ = bool(); + phi_1238_ = i32(); + phi_1302_ = bool(); break; } } - let _e784 = phi_1258_; - let _e786 = phi_1322_; + let _e777 = phi_1238_; + let _e779 = phi_1302_; continue; continuing { - phi_1254_ = _e753; - phi_1257_ = _e784; - phi_2761_ = _e716; - break if !(_e786); + phi_1234_ = _e746; + phi_1237_ = _e777; + phi_2707_ = _e709; + break if !(_e779); } } - let _e789 = phi_2761_; - phi_2773_ = _e789; - phi_2048_ = bool(); - phi_2047_ = bool(); - phi_2046_ = bool(); - if _e789 { + let _e782 = phi_2707_; + phi_2719_ = _e782; + phi_2011_ = bool(); + phi_2010_ = bool(); + phi_2009_ = bool(); + if _e782 { break; } - let _e791 = local_8; - let _e792 = (_e791 == 8i); - if _e792 { - phi_2775_ = _e789; - phi_1403_ = false; - phi_1404_ = false; + let _e784 = local_8; + let _e785 = (_e784 == 8i); + if _e785 { + phi_2721_ = _e782; + phi_1383_ = false; + phi_1384_ = false; } else { - phi_1329_ = type_19(0u, 8u); - phi_1332_ = 0i; + phi_1309_ = type_12(0u, 8u); + phi_1312_ = 0i; loop { - let _e794 = phi_1329_; - let _e796 = phi_1332_; - local_9 = _e796; - if (_e794.member < _e794.member_1) { - phi_1330_ = type_19((_e794.member + 1u), _e794.member_1); - phi_1355_ = type_19(1u, _e794.member); + let _e787 = phi_1309_; + let _e789 = phi_1312_; + local_9 = _e789; + if (_e787.member < _e787.member_1) { + phi_1310_ = type_12((_e787.member + 1u), _e787.member_1); + phi_1335_ = type_12(1u, _e787.member); } else { - phi_1330_ = _e794; - phi_1355_ = type_19(0u, type_19().member_1); + phi_1310_ = _e787; + phi_1335_ = type_12(0u, type_12().member_1); } - let _e809 = phi_1330_; - let _e811 = phi_1355_; - switch bitcast(_e811.member) { + let _e802 = phi_1310_; + let _e804 = phi_1335_; + switch bitcast(_e804.member) { case 0: { - phi_1333_ = i32(); - phi_1397_ = false; + phi_1313_ = i32(); + phi_1377_ = false; break; } case 1: { - if (_e811.member_1 < 8u) { + if (_e804.member_1 < 8u) { } else { - phi_2768_ = true; + phi_2714_ = true; break; } - let _e818 = local_1[_e811.member_1][0u]; - let _e821 = local_1[_e811.member_1][1u]; - let _e824 = local_1[_e811.member_1][2u]; - local_4 = array(_e818, _e821, _e824); - let _e826 = (_e733.member_1 < 3u); - if _e826 { + let _e811 = local_1[_e804.member_1][0u]; + let _e814 = local_1[_e804.member_1][1u]; + let _e817 = local_1[_e804.member_1][2u]; + local_4 = array(_e811, _e814, _e817); + let _e819 = (_e726.member_1 < 3u); + if _e819 { } else { - phi_2768_ = true; + phi_2714_ = true; break; } - let _e828 = local_4[_e733.member_1]; - local_5 = array(_e714.x, _e714.y, _e714.z); - if _e826 { + let _e821 = local_4[_e726.member_1]; + local_5 = array(_e707.x, _e707.y, _e707.z); + if _e819 { } else { - phi_2768_ = true; + phi_2714_ = true; break; } - let _e834 = local_5[_e733.member_1]; - if (_e828 > _e834) { - phi_1396_ = (_e796 + 1i); + let _e827 = local_5[_e726.member_1]; + if (_e821 > _e827) { + phi_1376_ = (_e789 + 1i); } else { - phi_1396_ = _e796; + phi_1376_ = _e789; } - let _e838 = phi_1396_; - phi_1333_ = _e838; - phi_1397_ = true; + let _e831 = phi_1376_; + phi_1313_ = _e831; + phi_1377_ = true; break; } default: { - phi_1333_ = i32(); - phi_1397_ = bool(); + phi_1313_ = i32(); + phi_1377_ = bool(); break; } } - let _e840 = phi_1333_; - let _e842 = phi_1397_; + let _e833 = phi_1313_; + let _e835 = phi_1377_; continue; continuing { - phi_1329_ = _e809; - phi_1332_ = _e840; - phi_2768_ = _e789; - break if !(_e842); + phi_1309_ = _e802; + phi_1312_ = _e833; + phi_2714_ = _e782; + break if !(_e835); } } - let _e845 = phi_2768_; - phi_2773_ = _e845; - phi_2048_ = bool(); - phi_2047_ = bool(); - phi_2046_ = bool(); - if _e845 { + let _e838 = phi_2714_; + phi_2719_ = _e838; + phi_2011_ = bool(); + phi_2010_ = bool(); + phi_2009_ = bool(); + if _e838 { break; } - let _e847 = local_9; - let _e848 = (_e847 == 8i); - phi_2775_ = _e845; - phi_1403_ = select(true, false, _e848); - phi_1404_ = _e848; + let _e840 = local_9; + let _e841 = (_e840 == 8i); + phi_2721_ = _e838; + phi_1383_ = select(true, false, _e841); + phi_1384_ = _e841; } - let _e851 = phi_2775_; - let _e853 = phi_1403_; - let _e855 = phi_1404_; - phi_2774_ = _e851; - phi_1405_ = _e853; - phi_1406_ = false; - phi_1407_ = _e792; - phi_1408_ = _e855; + let _e844 = phi_2721_; + let _e846 = phi_1383_; + let _e848 = phi_1384_; + phi_2720_ = _e844; + phi_1385_ = _e846; + phi_1386_ = false; + phi_1387_ = _e785; + phi_1388_ = _e848; break; } default: { - phi_2774_ = _e716; - phi_1405_ = bool(); - phi_1406_ = bool(); - phi_1407_ = bool(); - phi_1408_ = bool(); + phi_2720_ = _e709; + phi_1385_ = bool(); + phi_1386_ = bool(); + phi_1387_ = bool(); + phi_1388_ = bool(); break; } } - let _e857 = phi_2774_; - let _e859 = phi_1405_; - let _e861 = phi_1406_; - let _e863 = phi_1407_; - let _e865 = phi_1408_; + let _e850 = phi_2720_; + let _e852 = phi_1385_; + let _e854 = phi_1386_; + let _e856 = phi_1387_; + let _e858 = phi_1388_; continue; continuing { - phi_2767_ = _e857; - phi_1220_ = _e731; - phi_2773_ = _e857; - phi_2048_ = _e865; - phi_2047_ = _e863; - phi_2046_ = _e861; - break if !(_e859); + phi_2713_ = _e850; + phi_1200_ = _e724; + phi_2719_ = _e850; + phi_2011_ = _e858; + phi_2010_ = _e856; + phi_2009_ = _e854; + break if !(_e852); } } - let _e868 = phi_2773_; - let _e870 = phi_2048_; - let _e872 = phi_2047_; - let _e874 = phi_2046_; - if _e868 { + let _e861 = phi_2719_; + let _e863 = phi_2011_; + let _e865 = phi_2010_; + let _e867 = phi_2009_; + if _e861 { break; } - let _e875 = select(_e872, false, _e874); - if select(true, false, select(_e875, true, select(select(_e870, false, _e874), false, _e875))) { - phi_1431_ = type_33(false, 0u); + let _e868 = select(_e865, false, _e867); + if select(true, false, select(_e868, true, select(select(_e863, false, _e867), false, _e868))) { + phi_1411_ = type_33(false, 0u); } else { - phi_1431_ = type_33(true, 0u); + phi_1411_ = type_33(true, 0u); } - let _e881 = phi_1431_; - phi_1432_ = _e881; + let _e874 = phi_1411_; + phi_1412_ = _e874; } else { - phi_1432_ = type_33(); + phi_1412_ = type_33(); } - let _e883 = phi_1432_; - if select(true, false, _e711) { - let _e886 = local_10; - phi_1438_ = type_33(true, _e886); + let _e876 = phi_1412_; + if select(true, false, _e704) { + let _e879 = local_10; + phi_1418_ = type_33(true, _e879); } else { - phi_1438_ = _e883; + phi_1418_ = _e876; } - let _e889 = phi_1438_; - phi_1439_ = _e889; + let _e882 = phi_1418_; + phi_1419_ = _e882; } - let _e891 = phi_1439_; - if (_e891.member != true) { + let _e884 = phi_1419_; + if (_e884.member != true) { global_2.member[_e98.x].member_1 = 1u; - if _e206.member_7 { - let _e897 = global_1.member[0u]; - let _e900 = global_1.member[1u]; - let _e903 = global_1.member[3u]; - let _e906 = global_1.member[4u]; - let _e907 = f32(_e897); - let _e949 = fma(_e508.member.member_3.z, _e508.member_1.member.w, fma(_e508.member.member_2.z, _e508.member_1.member.z, fma(_e508.member.member.z, _e508.member_1.member.x, (_e508.member.member_1.z * _e508.member_1.member.y)))); - let _e950 = fma(_e508.member.member_3.w, _e508.member_1.member.w, fma(_e508.member.member_2.w, _e508.member_1.member.z, fma(_e508.member.member.w, _e508.member_1.member.x, (_e508.member.member_1.w * _e508.member_1.member.y)))); - let _e970 = fma(_e508.member.member_3.z, _e508.member_1.member_1.w, fma(_e508.member.member_2.z, _e508.member_1.member_1.z, fma(_e508.member.member.z, _e508.member_1.member_1.x, (_e508.member.member_1.z * _e508.member_1.member_1.y)))); - let _e971 = fma(_e508.member.member_3.w, _e508.member_1.member_1.w, fma(_e508.member.member_2.w, _e508.member_1.member_1.z, fma(_e508.member.member.w, _e508.member_1.member_1.x, (_e508.member.member_1.w * _e508.member_1.member_1.y)))); - let _e991 = fma(_e508.member.member_3.z, _e508.member_1.member_2.w, fma(_e508.member.member_2.z, _e508.member_1.member_2.z, fma(_e508.member.member.z, _e508.member_1.member_2.x, (_e508.member.member_1.z * _e508.member_1.member_2.y)))); - let _e992 = fma(_e508.member.member_3.w, _e508.member_1.member_2.w, fma(_e508.member.member_2.w, _e508.member_1.member_2.z, fma(_e508.member.member.w, _e508.member_1.member_2.x, (_e508.member.member_1.w * _e508.member_1.member_2.y)))); - let _e1012 = fma(_e508.member.member_3.z, _e508.member_1.member_3.w, fma(_e508.member.member_2.z, _e508.member_1.member_3.z, fma(_e508.member.member.z, _e508.member_1.member_3.x, (_e508.member.member_1.z * _e508.member_1.member_3.y)))); - let _e1013 = fma(_e508.member.member_3.w, _e508.member_1.member_3.w, fma(_e508.member.member_2.w, _e508.member_1.member_3.z, fma(_e508.member.member.w, _e508.member_1.member_3.x, (_e508.member.member_1.w * _e508.member_1.member_3.y)))); - let _e1025 = (fma(_e992, _e636, fma(_e950, _e634, (_e971 * _e635))) + _e1013); - let _e1030 = fma(_e642, _e508.member_3.member_1[5].x, _e634); - let _e1031 = fma(_e642, _e508.member_3.member_1[5].y, _e635); - let _e1032 = fma(_e642, _e508.member_3.member_1[5].z, _e636); - let _e1046 = fma(_e642, _e508.member_3.member_1[0].x, _e634); - let _e1047 = fma(_e642, _e508.member_3.member_1[0].y, _e635); - let _e1048 = fma(_e642, _e508.member_3.member_1[0].z, _e636); - let _e1065 = (vec2(((((fma(fma(_e508.member.member_3.x, _e508.member_1.member_2.w, fma(_e508.member.member_2.x, _e508.member_1.member_2.z, fma(_e508.member.member.x, _e508.member_1.member_2.x, (_e508.member.member_1.x * _e508.member_1.member_2.y)))), _e636, fma(fma(_e508.member.member_3.x, _e508.member_1.member.w, fma(_e508.member.member_2.x, _e508.member_1.member.z, fma(_e508.member.member.x, _e508.member_1.member.x, (_e508.member.member_1.x * _e508.member_1.member.y)))), _e634, (fma(_e508.member.member_3.x, _e508.member_1.member_1.w, fma(_e508.member.member_2.x, _e508.member_1.member_1.z, fma(_e508.member.member.x, _e508.member_1.member_1.x, (_e508.member.member_1.x * _e508.member_1.member_1.y)))) * _e635))) + fma(_e508.member.member_3.x, _e508.member_1.member_3.w, fma(_e508.member.member_2.x, _e508.member_1.member_3.z, fma(_e508.member.member.x, _e508.member_1.member_3.x, (_e508.member.member_1.x * _e508.member_1.member_3.y))))) / _e1025) + 1f) * 0.5f), fma((-1f - ((fma(fma(_e508.member.member_3.y, _e508.member_1.member_2.w, fma(_e508.member.member_2.y, _e508.member_1.member_2.z, fma(_e508.member.member.y, _e508.member_1.member_2.x, (_e508.member.member_1.y * _e508.member_1.member_2.y)))), _e636, fma(fma(_e508.member.member_3.y, _e508.member_1.member.w, fma(_e508.member.member_2.y, _e508.member_1.member.z, fma(_e508.member.member.y, _e508.member_1.member.x, (_e508.member.member_1.y * _e508.member_1.member.y)))), _e634, (fma(_e508.member.member_3.y, _e508.member_1.member_1.w, fma(_e508.member.member_2.y, _e508.member_1.member_1.z, fma(_e508.member.member.y, _e508.member_1.member_1.x, (_e508.member.member_1.y * _e508.member_1.member_1.y)))) * _e635))) + fma(_e508.member.member_3.y, _e508.member_1.member_3.w, fma(_e508.member.member_2.y, _e508.member_1.member_3.z, fma(_e508.member.member.y, _e508.member_1.member_3.x, (_e508.member.member_1.y * _e508.member_1.member_3.y))))) / _e1025)), 0.5f, 1f)) * vec2(_e907, f32(_e900))); - let _e1066 = (_e642 / _e1025); - let _e1068 = -(_e907); - let _e1072 = vec3(fma(_e1068, _e1066, _e1065.x), fma(_e1068, _e1066, _e1065.y), ((_e1012 + fma(_e991, _e1032, fma(_e970, _e1031, (_e949 * _e1030)))) / (_e1013 + fma(_e992, _e1032, fma(_e971, _e1031, (_e950 * _e1030)))))); - let _e1075 = vec3(fma(_e907, _e1066, _e1065.x), fma(_e907, _e1066, _e1065.y), ((_e1012 + fma(_e991, _e1048, fma(_e970, _e1047, (_e949 * _e1046)))) / (_e1013 + fma(_e992, _e1048, fma(_e971, _e1047, (_e950 * _e1046)))))); - let _e1076 = min(_e1072, _e1075); - let _e1077 = max(_e1072, _e1075); - let _e1082 = (_e1077.x - _e1076.x); - let _e1083 = (_e1077.y - _e1076.y); - let _e1087 = floor(log2(select(_e1083, _e1082, (_e1082 > _e1083)))); - let _e1092 = select(select(u32(_e1087), 0u, (_e1087 < 0f)), 4294967295u, (_e1087 > 4294967000f)); - let _e1093 = (_e906 - 1u); - let _e1095 = select(_e1092, _e1093, (_e1092 > _e1093)); - let _e1101 = round(((_e1076.x + _e1077.x) * 0.5f)); - let _e1107 = (_e1095 & 31u); - let _e1110 = round(((_e1076.y + _e1077.y) * 0.5f)); - if (_e1095 >= _e906) { - phi_1703_ = 4294967295u; + if _e199.member_6 { + let _e890 = global_1.member[0u]; + let _e893 = global_1.member[1u]; + let _e896 = global_1.member[3u]; + let _e899 = global_1.member[4u]; + let _e900 = f32(_e890); + let _e942 = fma(_e501.member.member_3.z, _e501.member_1.member.w, fma(_e501.member.member_2.z, _e501.member_1.member.z, fma(_e501.member.member.z, _e501.member_1.member.x, (_e501.member.member_1.z * _e501.member_1.member.y)))); + let _e943 = fma(_e501.member.member_3.w, _e501.member_1.member.w, fma(_e501.member.member_2.w, _e501.member_1.member.z, fma(_e501.member.member.w, _e501.member_1.member.x, (_e501.member.member_1.w * _e501.member_1.member.y)))); + let _e963 = fma(_e501.member.member_3.z, _e501.member_1.member_1.w, fma(_e501.member.member_2.z, _e501.member_1.member_1.z, fma(_e501.member.member.z, _e501.member_1.member_1.x, (_e501.member.member_1.z * _e501.member_1.member_1.y)))); + let _e964 = fma(_e501.member.member_3.w, _e501.member_1.member_1.w, fma(_e501.member.member_2.w, _e501.member_1.member_1.z, fma(_e501.member.member.w, _e501.member_1.member_1.x, (_e501.member.member_1.w * _e501.member_1.member_1.y)))); + let _e984 = fma(_e501.member.member_3.z, _e501.member_1.member_2.w, fma(_e501.member.member_2.z, _e501.member_1.member_2.z, fma(_e501.member.member.z, _e501.member_1.member_2.x, (_e501.member.member_1.z * _e501.member_1.member_2.y)))); + let _e985 = fma(_e501.member.member_3.w, _e501.member_1.member_2.w, fma(_e501.member.member_2.w, _e501.member_1.member_2.z, fma(_e501.member.member.w, _e501.member_1.member_2.x, (_e501.member.member_1.w * _e501.member_1.member_2.y)))); + let _e1005 = fma(_e501.member.member_3.z, _e501.member_1.member_3.w, fma(_e501.member.member_2.z, _e501.member_1.member_3.z, fma(_e501.member.member.z, _e501.member_1.member_3.x, (_e501.member.member_1.z * _e501.member_1.member_3.y)))); + let _e1006 = fma(_e501.member.member_3.w, _e501.member_1.member_3.w, fma(_e501.member.member_2.w, _e501.member_1.member_3.z, fma(_e501.member.member.w, _e501.member_1.member_3.x, (_e501.member.member_1.w * _e501.member_1.member_3.y)))); + let _e1018 = (fma(_e985, _e629, fma(_e943, _e627, (_e964 * _e628))) + _e1006); + let _e1023 = fma(_e635, _e501.member_3.member_1[5].x, _e627); + let _e1024 = fma(_e635, _e501.member_3.member_1[5].y, _e628); + let _e1025 = fma(_e635, _e501.member_3.member_1[5].z, _e629); + let _e1039 = fma(_e635, _e501.member_3.member_1[0].x, _e627); + let _e1040 = fma(_e635, _e501.member_3.member_1[0].y, _e628); + let _e1041 = fma(_e635, _e501.member_3.member_1[0].z, _e629); + let _e1058 = (vec2(((((fma(fma(_e501.member.member_3.x, _e501.member_1.member_2.w, fma(_e501.member.member_2.x, _e501.member_1.member_2.z, fma(_e501.member.member.x, _e501.member_1.member_2.x, (_e501.member.member_1.x * _e501.member_1.member_2.y)))), _e629, fma(fma(_e501.member.member_3.x, _e501.member_1.member.w, fma(_e501.member.member_2.x, _e501.member_1.member.z, fma(_e501.member.member.x, _e501.member_1.member.x, (_e501.member.member_1.x * _e501.member_1.member.y)))), _e627, (fma(_e501.member.member_3.x, _e501.member_1.member_1.w, fma(_e501.member.member_2.x, _e501.member_1.member_1.z, fma(_e501.member.member.x, _e501.member_1.member_1.x, (_e501.member.member_1.x * _e501.member_1.member_1.y)))) * _e628))) + fma(_e501.member.member_3.x, _e501.member_1.member_3.w, fma(_e501.member.member_2.x, _e501.member_1.member_3.z, fma(_e501.member.member.x, _e501.member_1.member_3.x, (_e501.member.member_1.x * _e501.member_1.member_3.y))))) / _e1018) + 1f) * 0.5f), fma((-1f - ((fma(fma(_e501.member.member_3.y, _e501.member_1.member_2.w, fma(_e501.member.member_2.y, _e501.member_1.member_2.z, fma(_e501.member.member.y, _e501.member_1.member_2.x, (_e501.member.member_1.y * _e501.member_1.member_2.y)))), _e629, fma(fma(_e501.member.member_3.y, _e501.member_1.member.w, fma(_e501.member.member_2.y, _e501.member_1.member.z, fma(_e501.member.member.y, _e501.member_1.member.x, (_e501.member.member_1.y * _e501.member_1.member.y)))), _e627, (fma(_e501.member.member_3.y, _e501.member_1.member_1.w, fma(_e501.member.member_2.y, _e501.member_1.member_1.z, fma(_e501.member.member.y, _e501.member_1.member_1.x, (_e501.member.member_1.y * _e501.member_1.member_1.y)))) * _e628))) + fma(_e501.member.member_3.y, _e501.member_1.member_3.w, fma(_e501.member.member_2.y, _e501.member_1.member_3.z, fma(_e501.member.member.y, _e501.member_1.member_3.x, (_e501.member.member_1.y * _e501.member_1.member_3.y))))) / _e1018)), 0.5f, 1f)) * vec2(_e900, f32(_e893))); + let _e1059 = (_e635 / _e1018); + let _e1061 = -(_e900); + let _e1065 = vec3(fma(_e1061, _e1059, _e1058.x), fma(_e1061, _e1059, _e1058.y), ((_e1005 + fma(_e984, _e1025, fma(_e963, _e1024, (_e942 * _e1023)))) / (_e1006 + fma(_e985, _e1025, fma(_e964, _e1024, (_e943 * _e1023)))))); + let _e1068 = vec3(fma(_e900, _e1059, _e1058.x), fma(_e900, _e1059, _e1058.y), ((_e1005 + fma(_e984, _e1041, fma(_e963, _e1040, (_e942 * _e1039)))) / (_e1006 + fma(_e985, _e1041, fma(_e964, _e1040, (_e943 * _e1039)))))); + let _e1069 = min(_e1065, _e1068); + let _e1070 = max(_e1065, _e1068); + let _e1075 = (_e1070.x - _e1069.x); + let _e1076 = (_e1070.y - _e1069.y); + let _e1080 = floor(log2(select(_e1076, _e1075, (_e1075 > _e1076)))); + let _e1085 = select(select(u32(_e1080), 0u, (_e1080 < 0f)), 4294967295u, (_e1080 > 4294967000f)); + let _e1086 = (_e899 - 1u); + let _e1088 = select(_e1085, _e1086, (_e1085 > _e1086)); + let _e1094 = round(((_e1069.x + _e1070.x) * 0.5f)); + let _e1100 = (_e1088 & 31u); + let _e1103 = round(((_e1069.y + _e1070.y) * 0.5f)); + if (_e1088 >= _e899) { + phi_1683_ = 4294967295u; } else { - phi_1703_ = (_e903 + (2u * _e1095)); + phi_1683_ = (_e896 + (2u * _e1088)); } - let _e1122 = phi_1703_; + let _e1115 = phi_1683_; if (_e95 >= 2u) { - phi_2559_ = (_e1122 <= (_e95 - 2u)); + phi_2505_ = (_e1115 <= (_e95 - 2u)); } else { - phi_2559_ = false; + phi_2505_ = false; } - let _e1127 = phi_2559_; - if _e1127 { - let _e1130 = global_1.member[_e1122]; - let _e1134 = global_1.member[(_e1122 + 1u)]; - phi_1721_ = type_19(_e1130, _e1134); + let _e1120 = phi_2505_; + if _e1120 { + let _e1123 = global_1.member[_e1115]; + let _e1127 = global_1.member[(_e1115 + 1u)]; + phi_1701_ = type_12(_e1123, _e1127); } else { - phi_1721_ = type_19(4294967295u, 0u); + phi_1701_ = type_12(4294967295u, 0u); } - let _e1137 = phi_1721_; - let _e1143 = (((select(select(u32(_e1110), 0u, (_e1110 < 0f)), 4294967295u, (_e1110 > 4294967000f)) >> bitcast(_e1107)) * (_e897 >> bitcast(_e1107))) + (select(select(u32(_e1101), 0u, (_e1101 < 0f)), 4294967295u, (_e1101 > 4294967000f)) >> bitcast(_e1107))); - if (_e1143 >= _e1137.member_1) { - phi_2585_ = 4294967295u; + let _e1130 = phi_1701_; + let _e1136 = (((select(select(u32(_e1103), 0u, (_e1103 < 0f)), 4294967295u, (_e1103 > 4294967000f)) >> bitcast(_e1100)) * (_e890 >> bitcast(_e1100))) + (select(select(u32(_e1094), 0u, (_e1094 < 0f)), 4294967295u, (_e1094 > 4294967000f)) >> bitcast(_e1100))); + if (_e1136 >= _e1130.member_1) { + phi_2531_ = 4294967295u; } else { - phi_2585_ = (_e1137.member + _e1143); + phi_2531_ = (_e1130.member + _e1136); } - let _e1147 = phi_2585_; - let _e1150 = global_1.member[_e1147]; - if select((_e1076.z > 1f), true, (_e1076.z > bitcast(_e1150))) { + let _e1140 = phi_2531_; + let _e1143 = global_1.member[_e1140]; + if select((_e1069.z > 1f), true, (_e1069.z > bitcast(_e1143))) { global_2.member[_e98.x].member_1 = 0u; } } diff --git a/crates/renderling/shaders/cull-compute_downsample_depth_pyramid.spv b/crates/renderling/shaders/cull-compute_downsample_depth_pyramid.spv index adc86d7e140a28cdc9f612e21c76617256209ec1..25e11dd2642a430c8033fa943365037cf5f4d49d 100644 GIT binary patch delta 1433 zcmY*ZJ!n%=6uvKcNt2kw{I@Z!ZKyWJ_Sw)Tjj=?L4pKxkIEi#{aFU{>I0#Br5YbI8 z9UO}ITRXJ0O3^BUAP#~BJE%i(P;hYQAXKnJt>5=<-s2_od*|G9?)lDlPV%~5STD>M zHF;TUo#+xm1c6;ZO1MQ1wgZR@m)HZFMJx|Xzgy^Hw`uV(t#01$QAd$LjRC&{_x8b( zSKU{21)Md&;^`A&0wqH1L_w^6nFV{%ltleNzU~*{TZJX~TliS#3eN37Gk6ZblEV#9 z$RI46GCo*8>-E^6aOSX#d81)4-2n3-8_6YVHHtD zmW>wx=B#_q;am3#GURS9aW^jq#1I} zeH71%-jC;~o(XY%8<_hqP?VGUX{}HG*5hsLbsaNO=_i2w_`S>_X2`7PIPQ&k%31E? z3$O}&weqn1zGh+iUhP+jtf53am(i2^kuZ1O#6HD{4KjMzXoi= z=kN3%aJ4?a7x9lc7vz|K2y-v`%UVgU`G*{HRRZQl1FB0J6>6@fK;vAkcIHoD8oH*o zje{#19C9cg36kqhP;m{|72kqXyb)B2D~Rt0iU1XtU@gT5;V+wtYauG03{mlN$f-CT zW|w1O)#U^#l;XSLM#U%X%;)fH>e^1lo`_R%Ekdpv5ydrXSFA*+crDT!<&G~PejYdn z^hhIm1j;T(scbgtRJIW%n-NoNH*K~{u|{RL?aX3~yBvvA*-G50tSv#VT0(I>vMZ(% zRJN4ptx(xC;!l7F0C)KiHYl3R|5{Js<4?WqaJY9fC$mX%RPi+AsU+WsnIxzAo^(!Q pq^RIbN-21YYPILtRO2-7?98te_x!k-)1+HE%{OJ$&JMS9{|EJ^#i{@R delta 1411 zcmY*ZO=uHg5Z%otX*OjnVtFO&6`O!Tm4)8 zOGD~NQqhzyMNv9{nBq~guo=Xy*lP1osR`0YRo*vhbE(g3m_f>i;= z57(c)^%$RfMa^TT$j(Vhicd~SoxHlmeNX2oYZn35jVOMpcnLmxu!^W4%f8D1bN0FC z@a=O&5z<rCo;ZMI5*`pGu+1)U<3GS=VAE; zF2D?k4?a^T+cR0I``NkTKPol;KwQo&Zuzqb^4s(LbTaS#_n`h<6V=Z*P0Nn^z}^m| z0jUV53-H;oC@KL{CzsXnN`M`g16Idfhj%BCR=Y$>@5}Mm=)wFdume92`~$Am=l3K2 z5zj?2rB^Zcif*bUv8h*GbCrW~qd}`n3KiB|tHH*(_B)wB!8z!f-7^iYs8Mw(9yiE! z$FR6cPQ^Eaink3*aT)PpUdmvxE7+~nGhAPh1`l$VRktgwz`}~g{Amz zxKZ&LC-XV{n!5HycA28>h0>cwd>y<`91Z zJOH@Mhp>jyB>$(L!pBGcuklyHy~~`)B*;<0JtxKzd?V%)oaTGNJxw7=1rte2!CO>Y fdtOL3PV>&m{7Q1qk6SoRs, } @@ -9,7 +9,7 @@ struct type_7 { var global: vec3; @group(0) @binding(0) -var global_1: type_4; +var global_1: type_2; fn function() { var phi_504_: bool; diff --git a/crates/renderling/shaders/debug-debug_overlay_fragment.spv b/crates/renderling/shaders/debug-debug_overlay_fragment.spv index 2694044d7e6db9db343164b2272b61d3be1ff63c..c0c77211e51c87c3eaa6afbb914b5565ae83c623 100644 GIT binary patch literal 20744 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 literal 20744 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 diff --git a/crates/renderling/shaders/debug-debug_overlay_fragment.wgsl b/crates/renderling/shaders/debug-debug_overlay_fragment.wgsl index 7f7beb3f..81940f3a 100644 --- a/crates/renderling/shaders/debug-debug_overlay_fragment.wgsl +++ b/crates/renderling/shaders/debug-debug_overlay_fragment.wgsl @@ -1,8 +1,8 @@ -struct type_10 { +struct type_2 { member: array, } -struct type_17 { +struct type_12 { member: u32, member_1: u32, } @@ -25,7 +25,7 @@ struct type_26 { } @group(0) @binding(0) -var global: type_10; +var global: type_2; var global_1: vec4; @group(0) @binding(1) var global_2: type_23; @@ -41,43 +41,43 @@ fn function() { var local_6: array, 8>; var local_7: array, 6>; var phi_2208_: bool; - var phi_539_: type_17; - var phi_540_: type_17; - var phi_563_: type_17; - var phi_733_: type_17; - var phi_734_: type_17; - var phi_757_: type_17; + var phi_539_: type_12; + var phi_540_: type_12; + var phi_563_: type_12; + var phi_733_: type_12; + var phi_734_: type_12; + var phi_757_: type_12; var phi_784_: bool; - var phi_790_: type_17; - var phi_791_: type_17; - var phi_814_: type_17; + var phi_790_: type_12; + var phi_791_: type_12; + var phi_814_: type_12; var phi_837_: bool; var phi_906_: type_26; - var phi_1049_: type_17; - var phi_1050_: type_17; - var phi_1073_: type_17; + var phi_1049_: type_12; + var phi_1050_: type_12; + var phi_1073_: type_12; var phi_1117_: bool; var phi_1121_: bool; var phi_1122_: bool; var phi_2195_: bool; var phi_1644_: bool; var phi_2216_: bool; - var phi_1129_: type_17; - var phi_1130_: type_17; - var phi_1153_: type_17; - var phi_1163_: type_17; + var phi_1129_: type_12; + var phi_1130_: type_12; + var phi_1153_: type_12; + var phi_1163_: type_12; var phi_1166_: i32; - var phi_1164_: type_17; - var phi_1189_: type_17; + var phi_1164_: type_12; + var phi_1189_: type_12; var phi_1230_: i32; var phi_1167_: i32; var phi_1231_: bool; var phi_2210_: bool; var local_8: i32; - var phi_1238_: type_17; + var phi_1238_: type_12; var phi_1241_: i32; - var phi_1239_: type_17; - var phi_1264_: type_17; + var phi_1239_: type_12; + var phi_1264_: type_12; var phi_1305_: i32; var phi_1242_: i32; var phi_1306_: bool; @@ -101,16 +101,16 @@ fn function() { let _e81 = global.member[3u]; global_1 = vec4(0f, 0f, 0f, 0f); phi_2208_ = false; - phi_539_ = type_17(0u, arrayLength((&global_2.member))); + phi_539_ = type_12(0u, arrayLength((&global_2.member))); loop { let _e84 = phi_2208_; let _e86 = phi_539_; if (_e86.member < _e86.member_1) { - phi_540_ = type_17((_e86.member + 1u), _e86.member_1); - phi_563_ = type_17(1u, _e86.member); + phi_540_ = type_12((_e86.member + 1u), _e86.member_1); + phi_563_ = type_12(1u, _e86.member); } else { phi_540_ = _e86; - phi_563_ = type_17(0u, type_17().member_1); + phi_563_ = type_12(0u, type_12().member_1); } let _e99 = phi_540_; let _e101 = phi_563_; @@ -188,15 +188,15 @@ fn function() { let _e270 = global.member[(_e112 + 31u)]; let _e271 = bitcast(_e270); local_7 = array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); - phi_733_ = type_17(0u, 6u); + phi_733_ = type_12(0u, 6u); loop { let _e274 = phi_733_; if (_e274.member < _e274.member_1) { - phi_734_ = type_17((_e274.member + 1u), _e274.member_1); - phi_757_ = type_17(1u, _e274.member); + phi_734_ = type_12((_e274.member + 1u), _e274.member_1); + phi_757_ = type_12(1u, _e274.member); } else { phi_734_ = _e274; - phi_757_ = type_17(0u, type_17().member_1); + phi_757_ = type_12(0u, type_12().member_1); } let _e287 = phi_734_; let _e289 = phi_757_; @@ -229,15 +229,15 @@ fn function() { } let _e319 = local_7; local_6 = array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); - phi_790_ = type_17(0u, 8u); + phi_790_ = type_12(0u, 8u); loop { let _e322 = phi_790_; if (_e322.member < _e322.member_1) { - phi_791_ = type_17((_e322.member + 1u), _e322.member_1); - phi_814_ = type_17(1u, _e322.member); + phi_791_ = type_12((_e322.member + 1u), _e322.member_1); + phi_814_ = type_12(1u, _e322.member); } else { phi_791_ = _e322; - phi_814_ = type_17(0u, type_17().member_1); + phi_814_ = type_12(0u, type_12().member_1); } let _e335 = phi_791_; let _e337 = phi_814_; @@ -318,15 +318,15 @@ fn function() { if ((fma(_e523, _e506, fma(_e515, _e504, (_e518 * _e505))) + _e527) < _e529) { phi_2231_ = _e84; } else { - phi_1049_ = type_17(0u, 6u); + phi_1049_ = type_12(0u, 6u); loop { let _e532 = phi_1049_; if (_e532.member < _e532.member_1) { - phi_1050_ = type_17((_e532.member + 1u), _e532.member_1); - phi_1073_ = type_17(1u, _e532.member); + phi_1050_ = type_12((_e532.member + 1u), _e532.member_1); + phi_1073_ = type_12(1u, _e532.member); } else { phi_1050_ = _e532; - phi_1073_ = type_17(0u, type_17().member_1); + phi_1073_ = type_12(0u, type_12().member_1); } let _e545 = phi_1050_; let _e547 = phi_1073_; @@ -384,16 +384,16 @@ fn function() { let _e583 = (_e507 - _e582); let _e584 = (_e507 + _e582); phi_2216_ = _e579; - phi_1129_ = type_17(0u, 3u); + phi_1129_ = type_12(0u, 3u); loop { let _e586 = phi_2216_; let _e588 = phi_1129_; if (_e588.member < _e588.member_1) { - phi_1130_ = type_17((_e588.member + 1u), _e588.member_1); - phi_1153_ = type_17(1u, _e588.member); + phi_1130_ = type_12((_e588.member + 1u), _e588.member_1); + phi_1153_ = type_12(1u, _e588.member); } else { phi_1130_ = _e588; - phi_1153_ = type_17(0u, type_17().member_1); + phi_1153_ = type_12(0u, type_12().member_1); } let _e601 = phi_1130_; let _e603 = phi_1153_; @@ -404,18 +404,18 @@ fn function() { break; } case 1: { - phi_1163_ = type_17(0u, 8u); + phi_1163_ = type_12(0u, 8u); phi_1166_ = 0i; loop { let _e608 = phi_1163_; let _e610 = phi_1166_; local_8 = _e610; if (_e608.member < _e608.member_1) { - phi_1164_ = type_17((_e608.member + 1u), _e608.member_1); - phi_1189_ = type_17(1u, _e608.member); + phi_1164_ = type_12((_e608.member + 1u), _e608.member_1); + phi_1189_ = type_12(1u, _e608.member); } else { phi_1164_ = _e608; - phi_1189_ = type_17(0u, type_17().member_1); + phi_1189_ = type_12(0u, type_12().member_1); } let _e623 = phi_1164_; let _e625 = phi_1189_; @@ -485,18 +485,18 @@ fn function() { phi_2224_ = _e659; phi_1312_ = false; } else { - phi_1238_ = type_17(0u, 8u); + phi_1238_ = type_12(0u, 8u); phi_1241_ = 0i; loop { let _e664 = phi_1238_; let _e666 = phi_1241_; local_9 = _e666; if (_e664.member < _e664.member_1) { - phi_1239_ = type_17((_e664.member + 1u), _e664.member_1); - phi_1264_ = type_17(1u, _e664.member); + phi_1239_ = type_12((_e664.member + 1u), _e664.member_1); + phi_1264_ = type_12(1u, _e664.member); } else { phi_1239_ = _e664; - phi_1264_ = type_17(0u, type_17().member_1); + phi_1264_ = type_12(0u, type_12().member_1); } let _e679 = phi_1239_; let _e681 = phi_1264_; diff --git a/crates/renderling/shaders/debug-debug_overlay_vertex.spv b/crates/renderling/shaders/debug-debug_overlay_vertex.spv index 6e631c962e92435e37bf9308e8787334851abfbe..dd32e9148ab5a7ed5d3146cd672824d02fbea3a6 100644 GIT binary patch delta 174 zcmdnNwu5bh0;7dB0}BH?0|NsS5HkX?HjvK-r1^mu1VDTaAT0pqHQ0*)RSE*xlRX$M zLP3H$K<%7BS`>&ud?6qfhO%LDVo*Lv9$iixC51@PIjOO6A&{_mSpm06quaJ$?KXv(^MzYoyLzi$T!CpqKvOO0`v|)P2Dp0JR1$0pNf+1{LX{s^+}afa(Ky148}eE!Y~*a9#$X-gvGC zm8&tHb2Ua;qxm)$88qK)`)G~RNKRQ}(RW5FXI%81ae+qNc~D=_xT>dq6!WoO+1n!9 zi0{O=kGy9`yY)v*q}BWky1mb*Ce%iL-bBso{2vZ*-tGoiLVoh`eSfum&Qqv4*g}3 zGc*cA8Nmha5jdRz7~Dj&eV#W$^%@?j%X({YhwMK zIS%;5x8MeZ`XM_N@Hwe=B`2|-Ws?HC7SX=0Iqz*i^#&}1P~Uq?wnmKeVG!!2=W0;7 z8WTBJ<2f?*-s@as(0sdZ#~P=RoU+EE?~GK=_{w+2B^ve1z50m8bv^N;Dlcx){#)cT z;w$m()qJ(1{r8`liZ=2y=(dqhOsISLc~j|KM5d`X!K(FrLVh0{0s6jy)VGWHA29xl{MfdN5O!Y5p-}Qsw5ReL>)mzK@rgz10YC46D8*cnj}gVBuSEtfCz$! zfN9KeMp3{tW*r3sK~eeFd#S~LrXTCMXU^Jt?Y;J{Q>W^y`}M_HXu)SMHfxauX3d(l z?5rD>%9P`Avlg7iWB$o)_uOXWo9j8n)$!WCfc!J z#x6VUID7B)*WYXQw%hN%-#d5Rc8@)F+HJ>o?z_W#_TFKCF|roUSR`Z7jKwmR$k-&_ z?I$08lSJ;2ndYX6h8@p-WSa48+Zfj+)cy&geWRwqw-ctIlJC z^}weeaVuujx6tIXFnp_Ic8q#_^Xu`AdU|_ze2ZqZ_Z z({C&+)_I9#H&&1I9cnx3n|~d|&A$$-&t&}HT)yTm9{j}AbWST~I980kQ)V&z&&Zi> zKj9Uoy~-B1bLOQpcF0&h+?*NztXWSAw@WZvPwZVM+cl88TV`v>|Aa*Co_VEs_Q(vc zmKgQlli^^~+iS-9|MuQ9_S}t@i^e{|wD--dFZtDRQ#z;G2L$VFg~YF%S#0CgIWS|^ zthu+f?m;v5tc_MpkLnzfvC4!G4X*BC!4K!yAiCDk`Krry&i0Y>*5~1qt*$jXGPBzF z>dgyYJY$9IjOS#wUgKCG(fU6sqdCU}j~d6u)<^l{f~}8Sn(rOB%?}?E|TH; z*Isn8d)}AFerkqu)W=mB)?l^Fdg^fRtRCC`GrHzi2fuH=p|@+}Q|mby8$^%2#N?AB z=A)C{>tMbiBkab#-a9V!h>zds^>)s)!+B$Ua|A@sJ(ZL#|-v9v6mU_ zePb^>*!#uymQuY#Vn2Sc4~@NiZ0G3OT^!qa8tcWkdwiaYjy*CSjJ0YukG*nf>CV7c>#x?9I?F21>M3C1;dn_#(~ zeXYA~?B?Q|yInA@xwC`i9yjFf6uY_j=I$JfYwj+=a_#5V-8FV|@y*>W7}wn0gXP-$ z&D|q*bMejHGZ@$0eS+n>Pnx@L?B?Q|yPvp>=I$RX_xRy_4~X4dd~**B#x?iQV7czc z);%nCbMeic8;o<0oRZn`*I5hC?AKFcpO)c1F~2l1?k~^4zr-gVC$9Va^k93&vy0{# z!48_Z4`!U1AiZpMc)Fillr(VwnHDdn=?LKrsIiJ~y|5R{wuA9#B*7(%M zjd}9*W*u%17Dvl_o*MeNIC&0zh`A*8r5Wm)>4{JpA;X2B#ZEo(B!LElGI&{0f9|^{LCONOGGdr9Y?wX8iGt@B8o7VHXVDAQU zd+k3K?74{33oUsxMw`FA-4N{Bi;=HJ*XrZJT`O^2s~dxH2dBq5$-OCpz2O9Xn`!A$GO!)%s#Eu3BFT=Bw71gK2qhX_pYza8wn^{WoPb^a?@ zo$<5uzhk!!zIDD6jBB0m2J=}uhw_5EO6weAe&+al4sB>%2p`ux?u zJD9%TExIN@h+Tbr^?w+QtNxFI`KtBfU|Qp6`A=e33tz4O3C30Hr@?&f^=HBK`K$l) zVEW!k+v_i4S07*fUk2l<|EplWYW+Hx*7)x5o7mODSL?UIxN7}xFkiKP7ffq>m-v0` zYT>JOPcW`p_XhLz{`^C*Ue&<0#vg;#7~eVm6uUL>t?}nzTx;AH%vY`ZgK3TLAP>Z@ z7QR{!2IH#rmtekX{WX}@@x%UkD0a2*)%sg7u3CQ&=Bw5}f@zKKC=bW37QR|}q|d@t zYXQF`Wc2=AFxYwPR~>xoEEKGc-$lH?tQqY0G@lQPhVyx0_W7`KWETteyV})>TReD) zjQeLTJZs4bCuAmfsn~MOZ%Eg(<6k;hzN5a!OuoqFcg{!Nb(V=wEY4@(vY8z|196Yd zcw7d3^BeO#*V_ugK8ueMoWnWD6(^_X{Ip>DK98FF^w|9E&%HpMFA%CVnlnq6=4_MiR5Z`P~t6V?dUThDXN*!HsDqxHH*@GjF{e!-M) z?zLGf*j}c&cE&mx_VT(DPKlYG){CvSx!381!SWsTy=d~K?4x`6#qo*7xqj>+Qi_CJ~klFc~d%jx+yUw(`m){iJ zy^QZ(-YOW^=i-}#`Rr}qDQ+EXkI=GT*kY`W-qhC1XzOvb#dUALCD`5;V{gl~xAiZ_ z{-SAi{l(jl_8Y%h?>i>vt-*TRBHuXqp6}mddtddg<#W+9-ToKnUB){?uk+jDvv>B4 zPu;i2rf=@Gd`GZ2HQ$-BO$JV_ZG+XrZI^*_U%YF=37OH|J~mx*ulWwav>o-md-A27 zNAHUr;}eUs7iMR6SQp$*89QgtH}}5SFL?g@LasPD-6wko(;x4PePZ*szpmH5Q=E9~ zRXuap%Nog7L%yEM?H^17r$1cJ{eWP+qrL+tpY`Z{aZr3>t;NApy!(RxkjXwYvz)^+ zJ705uZ#+Dhu4_)?h+v2H#2uM2FGHTWzc(Ho>~|@-UAtp~cZ&|rdeD+bW3>6LfzS5i zg8kkoM!p*D?YsGXeC_C|qqiT#cIXZFy^K3D)G(_dhK=iY26qKlr{5Xe9iQ5`F;BkU zeCGTxSR5_)r5gG;K6ws(h+|M>;688E?(^ovU|iSnq+tB`d+*7y zn~QJmDZ#kz$2IlUYKLz_eNp8>g&+(~?(=#o3G)9}h`{u!5`$mj>HQL)k`3DHsTOGYE z8QY;Z+#(qZXQ*LTLkt_&eY1FQb-Hhs5SLoGF;9N?%~HYQXxTSv=;Oj^UG*X6qSznK zP}fXP3>(*db8&F5z1qF@m&A|j=hUUad|lVeg2j*f=<@igg|F5X!MJK&8O&F$tAc5b z-=BOWzG~sCb#*YVTGs^g_4l)DgY~Kgt~EXytj75L$#wCy2EH{u7L03+>x22Kbwe<% zW3&EU$B)NXEqt|Z48~RKreMBmeIl6F`2ESv@l^|7txpEys&z{+U(fwh!Fp8#*BZA5 zt1*7Ba$9_@fp3l5gK@3#>0rKUeI}UJ_}$58 zXVHPV@7-(P40gEJaNo-Kc7}V)-1GZR@P5gWtFAmT;zygm&z?JiJ$uB+r`JB7lKa{- z!#$^u6=OT}fqPoUQ!~^st09Js>$7Kt;Og|*^UV0v#*KOM`|MdMSR5_S9yRpw{p30H zA?D85cV(z+rYDAt>pgRKaIdx6z1BYn#`RkNFqm)Dp{K7osr#c~F|_@=teQSwe4qN` zVAs~cC;lg~`5pEBbn<0+ANBow@(F!I_LJOS#@Lo)I+o5~Tk!uXKDldU=tm8)&HGJo z^TajpxABj8`ViZ^-wkOK0NU|f6YI^7$;b)wld z`9o}eM}2>qd}G{wlTT>-ejtV#e2$*)gK>;~t0A^|e+_P)xaK`HU!Fe1Ht+94Uf`p7 z|A;Zx)2rC7)7-3up6HA1Iz1eWvtId`Ie+^p+kIx8>YEeS0`c)Xx=ssDzHyxvntYGs zKC+({kI(r|>5ulkL>yz^YKZOmE*0Foah;Z)FHaw0o43r6r;o1hvh(HXRc!MfH{=Co z{T}(A{qU@jUe%=`u50*&V7#>qoVkAw4)z>4G_(7;_964x{C`)W8NyerbdNJ!w3>#OS*9PyL9()#DoXUP@*epJN=jFNkx?l%w z-0L$o&!A*AaH&R|?~w+WUzzI$#PUvu%z-7Xl{-?@&;{o_3J zQ{U0?sUeon-{l+=pIF?uPS(r1i`hF^oVD|JJl53n%6B_2jqQ1&C*M2yyB$7S`zFqs zn`y0_nEir%Pf36Oi~}al-)bEge065rK@;b@nu8}CYDV{v*mTYMm>vJ2!L%Lq9X9#0 zgpYn#GdDi5ID6;t%no}8cSOdK8T8HluI8lR`M;}?D^5-9Ks ziW6_Ws%P$cStI#s$k$W3lY?pC^oQ%YpAw9B)OYISvmV}&d>?;Wd}6J|2c~%6)$pG_ z*=J;y^TEu{*G$v**6UB#f8k))-`{ERT^ruB=d8r4+h@i(!4B(ft?v2rg86;c*aPRswpShc?Q`pb_{8F!=Y>;@9&i_Bd^kf*bM-C`t{%-^ z<4fbm(bO+JxpYRG-?h@)<-wlGV&tpS{x;7utMAqNdvk1u{%~)|*djv>vl?R9xIS0k z6kMG?SGS5!ZQPhAUvI9_*1_Uvd9JFVk1Lbs(1)0-Vt*tL>2jM*7_F{>eljq4ii5?r0G(XR2S zjT`gica3%r7Dvk(siBYSljqQfm>Xh$JVRYGJuz%t*XYLJu94bZqnm>sq?O?vX7ynnV^VY9A_}2OFV0Fgt zP`(qpb?~k8-C$hn+!4%It?vcXnm4TF_hVNJU#&ZXan-sjn6FxQ2h;jLe`^xETKH=H zF!%=<)%sB|U-!|EgY~Kgj(?T(_>*9J%=(BK?<@D0`&8UdgT=bn&X4UL?DPC*!Fy-; zY#2WuejeX>8F=^fFETsa)3{$|{3^peY_8s~gR3XL-zWbj{^MiQ>>B+xSUgVeYS5!S z+WdVU{w~;aP>g)F`#hYRXN~8WI(j}PwnNXjBQg%pP{XW-7&flY!=r+$)92yQ@u`g) z^W^t=cx(+`_>aNeFKTzc{3#gM{qpBvzOL(i z!Q#i~;r+3zg|F5F!MJKY7|d6#zXa17pND^qT`hdI9ty@)>u$xEo$;BtP<*X}Z=HpMajmmRFkiJ64W>0d6BmoG zTKH-$9*nEj62W}cS~8f{_)J_XzG~sCwRAA9T8|0ltJX5Xw8rP&vhh_5U#-UmsK9o>-!w?uN+_N;9KW8!MN7>*I>SCJvW%v_;+}##8)kRwN?$rRcp0i zzG|%=Ol$mmyEWpg7QR|*2IH#rykNd+JwKS%`1f`%h_71sYONKFtJd1Vd|k_Rf}OX1 z)xqQZUc7FwXMnwH&Bcz-QO{G)WwGmp6YtsTze)4V^}E`U!KdVT?DNsV=kHxloqRqI z8+Y2|%dhn_zB!pc5T96wIKI;-Uvv4+n0#aI2PdD>hfld@#z)hr@2p^&Mtx@o(=?8n za?cAEBfh>1g2jlh@4{fU)vE8J$v5VHc=E~Z_nH?6J1^hMx0V`5PCZ-_?7s&S*PKg- z9OtD5?Zak0^0(y2E|uT^VmJP>;MNeYzL@Tb%VVoUSFC@dsMc|bqg|~lf=4a2#gxBt zKHi#)=W|tT=OeB;9~pA2f&Q#%`@1?=UAbcQ*W7DjkNwDX?(P4*>5W$7uN~rBOHBEX z4!pI}zkSf_ab2+f#kIeW1?z)0UVq)Y*T=Tc9Vg_Px)*MUZOw6w`*^T8=hC@?T z<8BHTXWuvO6S4JxYuwGj?n6g?pPYPZ)OX9|>wToZ7v;Woe>)nter*2Hw?S;@GWs^0 zd}ED`CSPmJNy5gH&%N3juZ&NPG56nMTL(w)tyjgzFTS~(OmT7>w`qL*W8AB!IK4FP zHSzI}aj%`?^w+q};^P7cpvvF;=jBQUi8n@Nt8`pO0$v5V{b@Dmy_V6F^^&Dxd>AcIoZQ#|xJMZ#uA9ywK z&b$0O23~!<^KS3k1UtvEr=4QACwpCtKC8L&z}xqDeU_gy@a_S;KKpsFOR&E9d!O$b ztS)W&V)W>q*)7;TGp_F*vH2Z6mjfrCxbCZi zWN_EUp45jL<>w8&J&9MZ{80mMPvX@sfAqlHlX!jf9FGll-u6{>)AwEPu+t z+e3JLmOpji?IFBA%bzyz_7Gm5?dkMjJ&k+lyx8r@9ulL^YMwvv_7Gm5*BMAaNR@K2irrV@8hxU zq0x6!Yii)Jn;4qUcK_49C&*OuXg!c2HqaR>!as*Yq0Yk_s|z& zwJI|kk!!t1kp=zGEX;_n{%ez3Z<<%{Vax-)pa3_Z5*yJPb^>ifmy8~4z!;HdtNS^2PXG?eUo%zE?XdO|qYm z;d?Z*-v=XX)>cux$^-}ltzWBUx{ukT60o{6LH$?@6a zqwgv4>6y=3`pkW5@PQUGhjZn7T73L!HSXzCoa^4WXT-;^e&be{;_R2kJu^OjJvDB{ zDNgCetrQ=>KCQ9ek)IW;AGPR+v3?(z*6)nWqkZ~(wm5%dLhGR5_huGjmP_9?=zmM` z>|lRmBF1;6V*D+J7`)iC zYQ}0A>YAOW7&fkbtRCDx?1T2PM*Qu=cf0Ll&G>Qc<9Wd}`1SGp%np6vUXZa?hPq~b zh+*T}$J)W|!#-;t>%`wad@tNS){P(6KGqAS!LN@OW_IWU_o9p!XQ*q|hZr`leXJkc zK5|JP?PG)Z+lTLz+s8}d$F+|QgK6-OHPq^N_b&|=r>=depUZRoUDr#pXY^}N*4?9``9wLeT?_Qo8oUD=-=s_K<$Zd!g%PuEvhRbm-Esw&i9A)4|!p zUH4vpb7OZ3rbU~My;5%HU|Kjjxb}H@^zr(nVa<2X?63#%d&J%|!y22dhZr`lYra>o zHFw<|y%+Y5-e181IE6;%^`0y>Mjwxb`tG zm_CVa7SkxlcBCzA7a?J_Hk@*`xx(qmi1X>zbbxY|X8=qxZtu@mq82J>CoF#E()zE(mTP4?9`?xH)eT?_Q~!vp&SI zaqZ)p;Px@z3)jZqKE`|Dqw(X~$92Ip_{SP*b&q{4Se&}{pMJW>uF4+L?|3hCz0B3P zA(#$b8rHVl$N8g!vxmFxz5eFL-WW`aHXVDV+)cr>aCC6(^CQv6>yw6a?LIeG<5R(6 z)uiv9sK(XKHDf&2-NU;k=4#v)OouLwJqPagU^+NG;`FjkFA3?l=4wV}B__O|u@vuyLc!uP49beL2{_rHZldYWy!ejL^N zz~meCPM>_E-Wii`)H^Fa=Q8S@J^4nxb0*)YckbjH_0EsaI*fW3OukX?!pS%4T{QXV z9W|}r#qp^lzW>&EeDwMIz04)SwAaeeCmk`>xGXjeeN^Lp;rXj^d2ltHKMgU}xH2~F zQRDsL`KxhN@Tj3@G1a&_wmz&;`#2#ye>JWNu7+!)4>8sFXl#9q8YhP5uf}!3qlP}j zRO9;C&T-T@DLj8QZU`PVoVS>2+!)&)vu-_?lf&~@*=eXM$V9{j6^>)%aX& z=Qs9wT6q3yd_K4u`m}Ch%70gGedsc|oS9|zMupXRW&*KBp=dZ?BgU24M zx0v!@A9(Ao2RYR{J+YoijsIqF^>Fg_+0W(A=EGZzf2a5SJ~Y_j`Hed`_UAHtUYl>t zJ?}e<&kuP%59Y*oZS?v5O~8Q}J@0SD=lU7#>)Y|QFW1WuSN^*LZ!HZulaA*a2}itSwWBDQ}Qyg>ZcORr*X zoUZ*sli!}HZ;|-KjlRX=lh?hq3_FLtMPrGK#WU;>s^IrHLi;vPeWh!`u>?6`oS+Bd$|nt&H53;#vPmUpOg3}1>57+roJanK5J0l zQzoA^==FU@@Cg|->RTz;{vLfR$F}F_Hg1hz*Pd>D&kMF!M&Ao!+XH;JOxJ9!VE$f< z-Gd#@9ruQewKJTnxqD}w;NA!B5B)fY^6L(KYg(JuT`xS1*4;eVp)T$f886IG*X-XA ztnrJ2Y0K?CeQ|L2DZcBxe(*ub!S^|MMy{u|X`dSe_dHGyb{=B7jxUKVhE_E`7~Zw1 z#)iSw=yecNjhBWOGisa}-nFd8MuWzQ!LGTOYP>AA7#j6$9PE7g`fpY*57x7qa>UrL z*4J8E*Z!T>D}(1>%YTcnYl-h#zAD&S;@k5kQ>^Dt_o=)wYT0YVj6!=uzRFywB-?7g#Vu*1EB z+csmX41Jk<@4Pvfw%p!3TL<@g<9of|66|{8+t*vCSl7F2Y!7#h|2U^Gg2mu^-tP|XdH=KZ+cCVDF=zIW^Uv-W$6Gi?@E(*q$5j4fjZ6_Xrj* z-#xXtIqzmiX8raJK0o7vj0-3KD)H|Zyg-IrF|_y3?3$Tri#s4#ta|6hUT)wHoP4<5 zbMCml1AHvD&-w8^;?VH)56-M!ZFB1#7EDVF{jrz1vGst{S2^#Rsky<=Wx zhx=H}kr_v1=)Ksu^S7^~g7qdwA98))V2zIs#yj{t+m4xh_DJK7oqT@B?|=7o zTzvfE>8Ss@{KBsvbL)RK-@%C0lQq~pT-W;gobP6_$F+Xdq+zbc*P}s)E{#nm&iZ{L zemXeoh_im*jNf7X#C$8`+Zp;Z>sJgLcXiI6-d*Xl{~aow|B3COgZn|o-5K)Cbi}Z6 z{qMJa99*6L_gg=SZ@VlkZp@SKT-E<+usB-QMGbv?Cp|j!A?CZW@0j{G(-Wf)T>pEN z?*->)=KFB9{rmLn*x!#6*Z=O}&S1W|iN@a*EZ+Cm)w(;r{LEei4jo zjb8@yRqI#5w2mFLejQ(aX0-6t`b{vdTE7kEtJePp)7m3@w0-?9zWmH+;j8ugU|hBC z3FfQTy}`8h9JKxrUw&q^@YVWbFs@pE3g+uG{m;S9TfgeyTj#!Db>1`7xj(-A%+$fR z&I7@?)_E|PuUdZzrZq3QJ^#PPm!BCee6=15##QTY!F<*FdoZoD2d#g^m!BCee6=19 z##JjHE3^2zj~0lnS2b{bt}PgBk69lv<9+4+>N9EKaAMtS=SQOVV4o@G#x9aL@$x;( zJb(IZy(jlF-qC09y^}Ae`e@uACg1oy>mTD2>ySGq^PeVPbNT)}`NrJ)CSM+xkG>P$ zA0JJl?}-lt(=_UPFqo#%_lCa(ixFSnKZ3=GukYbtwbiQ6|HC7`F?WHPmTJXGWmKR9T{%1+`ImFb{vgcB0m1n zw`6SR;^@9#Dn5Sk&0TtmQ@3%CiI0DbTV{$=x^c_K$3MnBF1B9A^LTu0>*Z+OcG>->$`nCJy^e8<2kAGjM%Q5qjAri zd}F^WO}??;XU8W-zjWw3hxYp~15Xq09Llde@bvM{q0hqS2HQXC)VFG|{X@IH)r0LH zdi@++KR7=#pI!ZTaqnIm#EEO%ONTh`B>jxrD1KbyUN*$hXxzrZxPFelJQzQ|+r1)o zer9^XH}{pnxV|566Ra-3_tI@MJG__Tw##@|hWAkOynHS>ryYWi&n&lnygOKLIG?k$ zw*FJU$7C)}XuCenoqlK^5 zZo#-}?HOe5c(fc7A5G@YUKk7+0 z!L-JA+9P7;XGRNOts{eR)tVQ~SFNLhX^ro#N5{_3j26CH#{}c5b!;$SwcZ;{YhH4@ zUdPAI&x{tnTJHsT4xS@ofN%bfJ3lj8_-cJH7+0+`gZZj;b}+5uhQ7{;ou3&k ze6`LE##QS>!F<&^FPPTeLtp2|&d-b%zFHRqkUD*yF?xA*XR>gVen!FsTl>ib@>y7okU-w#&HwXN^YVEV36-&5}j lrb$DN82>wZi{)D5d_J9$1^0PnX8UhC*yg|IYP=}p{{d2TwNU^7 literal 31360 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 diff --git a/crates/renderling/shaders/light-shadow_mapping_vertex.wgsl b/crates/renderling/shaders/light-shadow_mapping_vertex.wgsl index 5d2ed1a7..1c8f2c95 100644 --- a/crates/renderling/shaders/light-shadow_mapping_vertex.wgsl +++ b/crates/renderling/shaders/light-shadow_mapping_vertex.wgsl @@ -1,30 +1,26 @@ -struct type_8 { +struct type_3 { member: array, } -struct type_13 { +struct type_11 { + member: u32, + member_1: u32, +} + +struct type_14 { member: vec4, member_1: vec4, member_2: vec4, member_3: vec4, } -struct type_14 { - member: u32, - member_1: u32, -} - struct type_17 { member: vec3, member_1: vec4, member_2: vec3, } -struct type_18 { - member: type_13, -} - -struct type_22 { +struct type_20 { member: vec3, member_1: vec4, member_2: vec3, @@ -35,878 +31,904 @@ struct type_22 { member_7: vec2, } -struct type_26 { +struct type_23 { member: vec3, member_1: vec3, member_2: vec3, } -struct type_27 { - member: type_14, - member_1: type_14, +struct type_24 { + member: type_11, + member_1: type_11, } var global: u32; var global_1: vec4 = vec4(0f, 0f, 0f, 1f); +var global_2: u32; @group(0) @binding(0) -var global_2: type_8; -var global_3: u32; +var global_3: type_3; @group(0) @binding(1) -var global_4: type_18; -var global_5: type_13 = type_13(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); +var global_4: type_3; +var global_5: type_14 = type_14(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); fn function() { var local: array; var local_1: array; var local_2: array; var local_3: array; - var phi_431_: u32; - var phi_2144_: bool; - var phi_438_: u32; - var phi_439_: u32; - var phi_449_: u32; - var phi_531_: type_14; - var phi_532_: type_14; - var phi_555_: type_14; - var phi_568_: bool; - var phi_574_: type_14; - var phi_575_: type_14; - var phi_598_: type_14; - var phi_612_: bool; - var phi_618_: type_14; - var phi_621_: type_22; - var phi_619_: type_14; - var phi_644_: type_14; - var phi_661_: u32; - var phi_2174_: bool; - var phi_679_: type_14; - var phi_2200_: u32; - var phi_2219_: bool; - var phi_729_: type_26; - var phi_739_: u32; - var phi_2241_: bool; - var phi_747_: f32; - var phi_622_: type_22; - var phi_800_: bool; - var phi_2264_: bool; - var phi_921_: type_27; - var local_4: type_22; - var phi_924_: type_14; - var phi_927_: type_13; - var phi_925_: type_14; - var phi_950_: type_14; - var local_5: type_22; - var phi_974_: u32; - var phi_2298_: bool; - var phi_983_: u32; - var phi_2322_: bool; - var phi_1032_: type_17; - var phi_1042_: u32; - var phi_2347_: bool; - var phi_1115_: type_13; - var phi_928_: type_13; - var phi_1352_: bool; - var phi_2772_: bool; - var local_6: type_13; - var local_7: type_13; - var local_8: type_13; - var local_9: type_13; - var phi_1379_: bool; + var phi_419_: u32; + var phi_2240_: bool; + var phi_426_: u32; + var phi_427_: u32; + var phi_437_: u32; + var phi_519_: type_11; + var phi_520_: type_11; + var phi_543_: type_11; + var phi_556_: bool; + var phi_562_: type_11; + var phi_563_: type_11; + var phi_586_: type_11; + var phi_600_: bool; + var phi_606_: type_11; + var phi_609_: type_20; + var phi_607_: type_11; + var phi_632_: type_11; + var phi_649_: u32; + var phi_2270_: bool; + var phi_667_: type_11; + var phi_2296_: u32; + var phi_2315_: bool; + var phi_717_: type_23; + var phi_727_: u32; + var phi_2337_: bool; + var phi_735_: f32; + var phi_610_: type_20; + var phi_788_: bool; + var phi_2357_: bool; + var phi_884_: type_24; + var local_4: type_20; + var phi_887_: type_11; + var phi_890_: type_14; + var phi_888_: type_11; + var phi_913_: type_11; + var local_5: type_20; + var phi_937_: u32; + var phi_2391_: bool; + var phi_946_: u32; + var phi_2415_: bool; + var phi_995_: type_17; + var phi_1005_: u32; + var phi_2440_: bool; + var phi_1078_: type_14; + var phi_891_: type_14; + var phi_1315_: bool; + var phi_2882_: bool; + var local_6: type_14; + var local_7: type_14; + var local_8: type_14; + var local_9: type_14; + var phi_1342_: bool; + var phi_1344_: bool; + var phi_1345_: bool; + var phi_1346_: bool; + var phi_1347_: bool; + var local_10: type_14; + var local_11: type_14; + var local_12: type_14; + var local_13: type_14; var phi_1381_: bool; - var phi_1382_: bool; var phi_1383_: bool; var phi_1384_: bool; - var local_10: type_13; - var local_11: type_13; - var local_12: type_13; - var local_13: type_13; - var phi_1418_: bool; + var phi_1385_: bool; + var phi_1386_: bool; + var local_14: type_14; + var local_15: type_14; + var local_16: type_14; + var local_17: type_14; var phi_1420_: bool; - var phi_1421_: bool; var phi_1422_: bool; var phi_1423_: bool; - var local_14: type_13; - var local_15: type_13; - var local_16: type_13; - var local_17: type_13; - var phi_1457_: bool; + var phi_1424_: bool; + var phi_1425_: bool; + var local_18: type_14; + var local_19: type_14; + var local_20: type_14; + var local_21: type_14; var phi_1459_: bool; - var phi_1460_: bool; var phi_1461_: bool; var phi_1462_: bool; - var local_18: type_13; - var local_19: type_13; - var local_20: type_13; - var local_21: type_13; - var phi_1496_: bool; - var phi_1498_: bool; - var phi_1499_: bool; - var phi_1500_: bool; - var phi_1501_: bool; - var phi_1506_: bool; - var phi_1508_: bool; - var phi_1509_: bool; - var phi_1510_: bool; - var phi_1511_: bool; - var phi_1519_: type_13; - var phi_2482_: bool; - var phi_2547_: vec4; - var phi_2577_: vec4; - var phi_2579_: vec4; - var phi_2588_: type_17; - var phi_2589_: type_17; - var phi_2594_: type_17; - var phi_2595_: type_17; - var phi_2596_: bool; - var phi_2600_: type_17; - var phi_1521_: type_17; - var phi_1523_: type_17; - var phi_1524_: bool; - var phi_2694_: bool; - var phi_1577_: type_17; - var phi_1578_: type_17; - var local_22: type_22; - var local_23: type_13; + var phi_1463_: bool; + var phi_1464_: bool; + var phi_1469_: bool; + var phi_1471_: bool; + var phi_1472_: bool; + var phi_1473_: bool; + var phi_1474_: bool; + var phi_1482_: type_14; + var phi_2575_: bool; + var phi_2640_: vec4; + var phi_2670_: vec4; + var phi_2672_: vec4; + var phi_2681_: type_17; + var phi_2682_: type_17; + var phi_2687_: type_17; + var phi_2688_: type_17; + var phi_2689_: bool; + var phi_2693_: type_17; + var phi_1484_: type_17; + var phi_1486_: type_17; + var phi_1487_: bool; + var phi_2787_: bool; + var phi_1540_: type_17; + var phi_1541_: type_17; + var local_22: type_20; + var phi_1640_: u32; + var local_23: type_14; switch bitcast(0u) { default: { - let _e63 = global_3; + let _e63 = global_2; let _e64 = global; - let _e66 = arrayLength((&global_2.member)); - let _e70 = global_2.member[_e63]; - let _e75 = global_2.member[(_e63 + 1u)]; - let _e79 = global_2.member[(_e63 + 2u)]; - let _e83 = global_2.member[(_e63 + 7u)]; - let _e87 = global_2.member[(_e63 + 8u)]; - let _e91 = global_2.member[(_e63 + 10u)]; - let _e95 = global_2.member[(_e63 + 12u)]; - let _e99 = global_2.member[(_e63 + 13u)]; - let _e103 = global_2.member[(_e63 + 14u)]; - let _e107 = global_2.member[(_e63 + 15u)]; - let _e111 = global_2.member[(_e63 + 16u)]; - let _e115 = global_2.member[(_e63 + 17u)]; - if (_e70 == 1u) { - if (_e83 == 4294967295u) { - phi_439_ = _e64; + let _e66 = arrayLength((&global_3.member)); + let _e69 = global_3.member[_e63]; + let _e74 = global_3.member[(_e63 + 1u)]; + let _e78 = global_3.member[(_e63 + 2u)]; + let _e82 = global_3.member[(_e63 + 7u)]; + let _e86 = global_3.member[(_e63 + 8u)]; + let _e90 = global_3.member[(_e63 + 10u)]; + let _e94 = global_3.member[(_e63 + 12u)]; + let _e98 = global_3.member[(_e63 + 13u)]; + let _e102 = global_3.member[(_e63 + 14u)]; + let _e106 = global_3.member[(_e63 + 15u)]; + let _e110 = global_3.member[(_e63 + 16u)]; + let _e114 = global_3.member[(_e63 + 17u)]; + if (_e69 == 1u) { + if (_e82 == 4294967295u) { + phi_427_ = _e64; } else { - if (_e64 >= _e87) { - phi_431_ = 4294967295u; + if (_e64 >= _e86) { + phi_419_ = 4294967295u; } else { - phi_431_ = (_e83 + _e64); + phi_419_ = (_e82 + _e64); } - let _e120 = phi_431_; + let _e119 = phi_419_; if (_e66 >= 1u) { - phi_2144_ = (_e120 <= (_e66 - 1u)); + phi_2240_ = (_e119 <= (_e66 - 1u)); } else { - phi_2144_ = false; + phi_2240_ = false; } - let _e125 = phi_2144_; - if _e125 { - let _e128 = global_2.member[_e120]; - phi_438_ = _e128; + let _e124 = phi_2240_; + if _e124 { + let _e127 = global_3.member[_e119]; + phi_426_ = _e127; } else { - phi_438_ = 0u; + phi_426_ = 0u; } - let _e130 = phi_438_; - phi_439_ = _e130; + let _e129 = phi_426_; + phi_427_ = _e129; } - let _e132 = phi_439_; - if (_e132 >= _e79) { - phi_449_ = 4294967295u; + let _e131 = phi_427_; + if (_e131 >= _e78) { + phi_437_ = 4294967295u; } else { - phi_449_ = (_e75 + (26u * _e132)); + phi_437_ = (_e74 + (26u * _e131)); } - let _e137 = phi_449_; - let _e140 = global_2.member[_e137]; - let _e145 = global_2.member[(_e137 + 1u)]; - let _e150 = global_2.member[(_e137 + 2u)]; - let _e156 = global_2.member[(_e137 + 3u)]; - let _e161 = global_2.member[(_e137 + 4u)]; - let _e166 = global_2.member[(_e137 + 5u)]; - let _e171 = global_2.member[(_e137 + 6u)]; - let _e177 = global_2.member[(_e137 + 7u)]; - let _e182 = global_2.member[(_e137 + 8u)]; - let _e188 = global_2.member[(_e137 + 9u)]; - let _e193 = global_2.member[(_e137 + 10u)]; - let _e199 = global_2.member[(_e137 + 11u)]; - let _e204 = global_2.member[(_e137 + 12u)]; - let _e209 = global_2.member[(_e137 + 13u)]; - let _e215 = global_2.member[(_e137 + 14u)]; - let _e220 = global_2.member[(_e137 + 15u)]; - let _e225 = global_2.member[(_e137 + 16u)]; - let _e230 = global_2.member[(_e137 + 17u)]; + let _e136 = phi_437_; + let _e139 = global_3.member[_e136]; + let _e144 = global_3.member[(_e136 + 1u)]; + let _e149 = global_3.member[(_e136 + 2u)]; + let _e155 = global_3.member[(_e136 + 3u)]; + let _e160 = global_3.member[(_e136 + 4u)]; + let _e165 = global_3.member[(_e136 + 5u)]; + let _e170 = global_3.member[(_e136 + 6u)]; + let _e176 = global_3.member[(_e136 + 7u)]; + let _e181 = global_3.member[(_e136 + 8u)]; + let _e187 = global_3.member[(_e136 + 9u)]; + let _e192 = global_3.member[(_e136 + 10u)]; + let _e198 = global_3.member[(_e136 + 11u)]; + let _e203 = global_3.member[(_e136 + 12u)]; + let _e208 = global_3.member[(_e136 + 13u)]; + let _e214 = global_3.member[(_e136 + 14u)]; + let _e219 = global_3.member[(_e136 + 15u)]; + let _e224 = global_3.member[(_e136 + 16u)]; + let _e229 = global_3.member[(_e136 + 17u)]; local_3 = array(0u, 0u, 0u, 0u); - phi_531_ = type_14(0u, 4u); + phi_519_ = type_11(0u, 4u); loop { - let _e235 = phi_531_; - if (_e235.member < _e235.member_1) { - phi_532_ = type_14((_e235.member + 1u), _e235.member_1); - phi_555_ = type_14(1u, _e235.member); + let _e234 = phi_519_; + if (_e234.member < _e234.member_1) { + phi_520_ = type_11((_e234.member + 1u), _e234.member_1); + phi_543_ = type_11(1u, _e234.member); } else { - phi_532_ = _e235; - phi_555_ = type_14(0u, type_14().member_1); + phi_520_ = _e234; + phi_543_ = type_11(0u, type_11().member_1); } - let _e248 = phi_532_; - let _e250 = phi_555_; - switch bitcast(_e250.member) { + let _e247 = phi_520_; + let _e249 = phi_543_; + switch bitcast(_e249.member) { case 0: { - phi_568_ = false; + phi_556_ = false; break; } case 1: { - let _e257 = global_2.member[((_e137 + 18u) + _e250.member_1)]; - local_3[_e250.member_1] = _e257; - phi_568_ = true; + let _e256 = global_3.member[((_e136 + 18u) + _e249.member_1)]; + local_3[_e249.member_1] = _e256; + phi_556_ = true; break; } default: { - phi_568_ = bool(); + phi_556_ = bool(); break; } } - let _e260 = phi_568_; + let _e259 = phi_556_; continue; continuing { - phi_531_ = _e248; - break if !(_e260); + phi_519_ = _e247; + break if !(_e259); } } - let _e262 = local_3; + let _e261 = local_3; local_2 = array(0f, 0f, 0f, 0f); - phi_574_ = type_14(0u, 4u); + phi_562_ = type_11(0u, 4u); loop { - let _e265 = phi_574_; - if (_e265.member < _e265.member_1) { - phi_575_ = type_14((_e265.member + 1u), _e265.member_1); - phi_598_ = type_14(1u, _e265.member); + let _e264 = phi_562_; + if (_e264.member < _e264.member_1) { + phi_563_ = type_11((_e264.member + 1u), _e264.member_1); + phi_586_ = type_11(1u, _e264.member); } else { - phi_575_ = _e265; - phi_598_ = type_14(0u, type_14().member_1); + phi_563_ = _e264; + phi_586_ = type_11(0u, type_11().member_1); } - let _e278 = phi_575_; - let _e280 = phi_598_; - switch bitcast(_e280.member) { + let _e277 = phi_563_; + let _e279 = phi_586_; + switch bitcast(_e279.member) { case 0: { - phi_612_ = false; + phi_600_ = false; break; } case 1: { - let _e287 = global_2.member[((_e137 + 22u) + _e280.member_1)]; - local_2[_e280.member_1] = bitcast(_e287); - phi_612_ = true; + let _e286 = global_3.member[((_e136 + 22u) + _e279.member_1)]; + local_2[_e279.member_1] = bitcast(_e286); + phi_600_ = true; break; } default: { - phi_612_ = bool(); + phi_600_ = bool(); break; } } - let _e291 = phi_612_; + let _e290 = phi_600_; continue; continuing { - phi_574_ = _e278; - break if !(_e291); + phi_562_ = _e277; + break if !(_e290); } } - let _e293 = local_2; - phi_618_ = type_14(0u, _e103); - phi_621_ = type_22(vec3(bitcast(_e140), bitcast(_e145), bitcast(_e150)), vec4(bitcast(_e156), bitcast(_e161), bitcast(_e166), bitcast(_e171)), vec3(bitcast(_e199), bitcast(_e204), bitcast(_e209)), vec4(bitcast(_e215), bitcast(_e220), bitcast(_e225), bitcast(_e230)), _e262, _e293, vec2(bitcast(_e177), bitcast(_e182)), vec2(bitcast(_e188), bitcast(_e193))); + let _e292 = local_2; + phi_606_ = type_11(0u, _e102); + phi_609_ = type_20(vec3(bitcast(_e139), bitcast(_e144), bitcast(_e149)), vec4(bitcast(_e155), bitcast(_e160), bitcast(_e165), bitcast(_e170)), vec3(bitcast(_e198), bitcast(_e203), bitcast(_e208)), vec4(bitcast(_e214), bitcast(_e219), bitcast(_e224), bitcast(_e229)), _e261, _e292, vec2(bitcast(_e176), bitcast(_e181)), vec2(bitcast(_e187), bitcast(_e192))); loop { - let _e297 = phi_618_; - let _e299 = phi_621_; - local_4 = _e299; - local_5 = _e299; - local_22 = _e299; - if (_e297.member < _e297.member_1) { - phi_619_ = type_14((_e297.member + 1u), _e297.member_1); - phi_644_ = type_14(1u, _e297.member); + let _e296 = phi_606_; + let _e298 = phi_609_; + local_4 = _e298; + local_5 = _e298; + local_22 = _e298; + if (_e296.member < _e296.member_1) { + phi_607_ = type_11((_e296.member + 1u), _e296.member_1); + phi_632_ = type_11(1u, _e296.member); } else { - phi_619_ = _e297; - phi_644_ = type_14(0u, type_14().member_1); + phi_607_ = _e296; + phi_632_ = type_11(0u, type_11().member_1); } - let _e312 = phi_619_; - let _e314 = phi_644_; - switch bitcast(_e314.member) { + let _e311 = phi_607_; + let _e313 = phi_632_; + switch bitcast(_e313.member) { case 0: { - phi_622_ = type_22(); - phi_800_ = false; + phi_610_ = type_20(); + phi_788_ = false; break; } case 1: { - if (_e314.member_1 >= _e103) { - phi_661_ = 4294967295u; + if (_e313.member_1 >= _e102) { + phi_649_ = 4294967295u; } else { - phi_661_ = (_e99 + (2u * _e314.member_1)); + phi_649_ = (_e98 + (2u * _e313.member_1)); } - let _e322 = phi_661_; + let _e321 = phi_649_; if (_e66 >= 2u) { - phi_2174_ = (_e322 <= (_e66 - 2u)); + phi_2270_ = (_e321 <= (_e66 - 2u)); } else { - phi_2174_ = false; + phi_2270_ = false; } - let _e327 = phi_2174_; - if _e327 { - let _e330 = global_2.member[_e322]; - let _e334 = global_2.member[(_e322 + 1u)]; - phi_679_ = type_14(_e330, _e334); + let _e326 = phi_2270_; + if _e326 { + let _e329 = global_3.member[_e321]; + let _e333 = global_3.member[(_e321 + 1u)]; + phi_667_ = type_11(_e329, _e333); } else { - phi_679_ = type_14(4294967295u, 0u); + phi_667_ = type_11(4294967295u, 0u); } - let _e337 = phi_679_; - if (_e132 >= _e337.member_1) { - phi_2200_ = 4294967295u; + let _e336 = phi_667_; + if (_e131 >= _e336.member_1) { + phi_2296_ = 4294967295u; } else { - phi_2200_ = (_e337.member + (9u * _e132)); + phi_2296_ = (_e336.member + (9u * _e131)); } - let _e344 = phi_2200_; + let _e343 = phi_2296_; if (_e66 >= 9u) { - phi_2219_ = (_e344 <= (_e66 - 9u)); + phi_2315_ = (_e343 <= (_e66 - 9u)); } else { - phi_2219_ = false; + phi_2315_ = false; } - let _e349 = phi_2219_; - if _e349 { - let _e352 = global_2.member[_e344]; - let _e357 = global_2.member[(_e344 + 1u)]; - let _e362 = global_2.member[(_e344 + 2u)]; - let _e368 = global_2.member[(_e344 + 3u)]; - let _e373 = global_2.member[(_e344 + 4u)]; - let _e378 = global_2.member[(_e344 + 5u)]; - let _e384 = global_2.member[(_e344 + 6u)]; - let _e389 = global_2.member[(_e344 + 7u)]; - let _e394 = global_2.member[(_e344 + 8u)]; - phi_729_ = type_26(vec3(bitcast(_e352), bitcast(_e357), bitcast(_e362)), vec3(bitcast(_e368), bitcast(_e373), bitcast(_e378)), vec3(bitcast(_e384), bitcast(_e389), bitcast(_e394))); + let _e348 = phi_2315_; + if _e348 { + let _e351 = global_3.member[_e343]; + let _e356 = global_3.member[(_e343 + 1u)]; + let _e361 = global_3.member[(_e343 + 2u)]; + let _e367 = global_3.member[(_e343 + 3u)]; + let _e372 = global_3.member[(_e343 + 4u)]; + let _e377 = global_3.member[(_e343 + 5u)]; + let _e383 = global_3.member[(_e343 + 6u)]; + let _e388 = global_3.member[(_e343 + 7u)]; + let _e393 = global_3.member[(_e343 + 8u)]; + phi_717_ = type_23(vec3(bitcast(_e351), bitcast(_e356), bitcast(_e361)), vec3(bitcast(_e367), bitcast(_e372), bitcast(_e377)), vec3(bitcast(_e383), bitcast(_e388), bitcast(_e393))); } else { - phi_729_ = type_26(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); + phi_717_ = type_23(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); } - let _e399 = phi_729_; - if (_e314.member_1 >= _e111) { - phi_739_ = 4294967295u; + let _e398 = phi_717_; + if (_e313.member_1 >= _e110) { + phi_727_ = 4294967295u; } else { - phi_739_ = (_e107 + _e314.member_1); + phi_727_ = (_e106 + _e313.member_1); } - let _e403 = phi_739_; + let _e402 = phi_727_; if (_e66 >= 1u) { - phi_2241_ = (_e403 <= (_e66 - 1u)); + phi_2337_ = (_e402 <= (_e66 - 1u)); } else { - phi_2241_ = false; + phi_2337_ = false; } - let _e408 = phi_2241_; - if _e408 { - let _e411 = global_2.member[_e403]; - phi_747_ = bitcast(_e411); + let _e407 = phi_2337_; + if _e407 { + let _e410 = global_3.member[_e402]; + phi_735_ = bitcast(_e410); } else { - phi_747_ = 0f; + phi_735_ = 0f; } - let _e414 = phi_747_; - let _e437 = type_22(vec3(fma(_e414, _e399.member.x, _e299.member.x), fma(_e414, _e399.member.y, _e299.member.y), fma(_e414, _e399.member.z, _e299.member.z)), _e299.member_1, _e299.member_2, _e299.member_3, _e299.member_4, _e299.member_5, _e299.member_6, _e299.member_7); - let _e460 = type_22(_e437.member, _e437.member_1, vec3(fma(_e414, _e399.member_1.x, _e299.member_2.x), fma(_e414, _e399.member_1.y, _e299.member_2.y), fma(_e414, _e399.member_1.z, _e299.member_2.z)), _e437.member_3, _e437.member_4, _e437.member_5, _e437.member_6, _e437.member_7); - phi_622_ = type_22(_e460.member, _e460.member_1, _e460.member_2, vec4(fma(_e414, _e399.member_2.x, _e299.member_3.x), fma(_e414, _e399.member_2.y, _e299.member_3.y), fma(_e414, _e399.member_2.z, _e299.member_3.z), _e299.member_3.w), _e460.member_4, _e460.member_5, _e460.member_6, _e460.member_7); - phi_800_ = true; + let _e413 = phi_735_; + let _e436 = type_20(vec3(fma(_e413, _e398.member.x, _e298.member.x), fma(_e413, _e398.member.y, _e298.member.y), fma(_e413, _e398.member.z, _e298.member.z)), _e298.member_1, _e298.member_2, _e298.member_3, _e298.member_4, _e298.member_5, _e298.member_6, _e298.member_7); + let _e459 = type_20(_e436.member, _e436.member_1, vec3(fma(_e413, _e398.member_1.x, _e298.member_2.x), fma(_e413, _e398.member_1.y, _e298.member_2.y), fma(_e413, _e398.member_1.z, _e298.member_2.z)), _e436.member_3, _e436.member_4, _e436.member_5, _e436.member_6, _e436.member_7); + phi_610_ = type_20(_e459.member, _e459.member_1, _e459.member_2, vec4(fma(_e413, _e398.member_2.x, _e298.member_3.x), fma(_e413, _e398.member_2.y, _e298.member_3.y), fma(_e413, _e398.member_2.z, _e298.member_3.z), _e298.member_3.w), _e459.member_4, _e459.member_5, _e459.member_6, _e459.member_7); + phi_788_ = true; break; } default: { - phi_622_ = type_22(); - phi_800_ = bool(); + phi_610_ = type_20(); + phi_788_ = bool(); break; } } - let _e487 = phi_622_; - let _e489 = phi_800_; + let _e486 = phi_610_; + let _e488 = phi_788_; continue; continuing { - phi_618_ = _e312; - phi_621_ = _e487; - break if !(_e489); + phi_606_ = _e311; + phi_609_ = _e486; + break if !(_e488); } } - let _e494 = global_2.member[(_e115 + 6u)]; - if (_e494 == 1u) { - let _e497 = ((_e95 == 4294967295u) != true); - if _e497 { + let _e493 = global_3.member[(_e114 + 6u)]; + if (_e493 == 1u) { + let _e496 = ((_e94 == 4294967295u) != true); + if _e496 { if (_e66 >= 4u) { - phi_2264_ = (_e95 <= (_e66 - 4u)); + phi_2357_ = (_e94 <= (_e66 - 4u)); } else { - phi_2264_ = false; + phi_2357_ = false; } - let _e502 = phi_2264_; - if _e502 { - let _e505 = global_2.member[_e95]; - let _e509 = global_2.member[(_e95 + 1u)]; - let _e513 = global_2.member[(_e95 + 2u)]; - let _e517 = global_2.member[(_e95 + 3u)]; - phi_921_ = type_27(type_14(_e505, _e509), type_14(_e513, _e517)); + let _e501 = phi_2357_; + if _e501 { + let _e504 = global_3.member[_e94]; + let _e508 = global_3.member[(_e94 + 1u)]; + let _e512 = global_3.member[(_e94 + 2u)]; + let _e516 = global_3.member[(_e94 + 3u)]; + phi_884_ = type_24(type_11(_e504, _e508), type_11(_e512, _e516)); } else { - phi_921_ = type_27(type_14(4294967295u, 0u), type_14(4294967295u, 0u)); + phi_884_ = type_24(type_11(4294967295u, 0u), type_11(4294967295u, 0u)); } - let _e522 = phi_921_; - let _e524 = local_4; - local = _e524.member_5; - phi_924_ = type_14(0u, 4u); - phi_927_ = type_13(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); + let _e521 = phi_884_; + let _e523 = local_4; + local = _e523.member_5; + phi_887_ = type_11(0u, 4u); + phi_890_ = type_14(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); loop { - let _e527 = phi_924_; - let _e529 = phi_927_; - local_6 = _e529; - local_7 = _e529; - local_8 = _e529; - local_9 = _e529; - local_10 = _e529; - local_11 = _e529; - local_12 = _e529; - local_13 = _e529; - local_14 = _e529; - local_15 = _e529; - local_16 = _e529; - local_17 = _e529; - local_18 = _e529; - local_19 = _e529; - local_20 = _e529; - local_21 = _e529; - local_23 = _e529; - if (_e527.member < _e527.member_1) { - phi_925_ = type_14((_e527.member + 1u), _e527.member_1); - phi_950_ = type_14(1u, _e527.member); + let _e526 = phi_887_; + let _e528 = phi_890_; + local_6 = _e528; + local_7 = _e528; + local_8 = _e528; + local_9 = _e528; + local_10 = _e528; + local_11 = _e528; + local_12 = _e528; + local_13 = _e528; + local_14 = _e528; + local_15 = _e528; + local_16 = _e528; + local_17 = _e528; + local_18 = _e528; + local_19 = _e528; + local_20 = _e528; + local_21 = _e528; + local_23 = _e528; + if (_e526.member < _e526.member_1) { + phi_888_ = type_11((_e526.member + 1u), _e526.member_1); + phi_913_ = type_11(1u, _e526.member); } else { - phi_925_ = _e527; - phi_950_ = type_14(0u, type_14().member_1); + phi_888_ = _e526; + phi_913_ = type_11(0u, type_11().member_1); } - let _e542 = phi_925_; - let _e544 = phi_950_; - switch bitcast(_e544.member) { + let _e541 = phi_888_; + let _e543 = phi_913_; + switch bitcast(_e543.member) { case 0: { - phi_928_ = type_13(); - phi_1352_ = false; + phi_891_ = type_14(); + phi_1315_ = false; break; } case 1: { - let _e549 = local_5; - local_1 = _e549.member_4; - let _e551 = (_e544.member_1 < 4u); - if _e551 { + let _e548 = local_5; + local_1 = _e548.member_4; + let _e550 = (_e543.member_1 < 4u); + if _e550 { } else { - phi_2772_ = true; + phi_2882_ = true; break; } - let _e553 = local_1[_e544.member_1]; - if (_e553 >= _e522.member.member_1) { - phi_974_ = 4294967295u; + let _e552 = local_1[_e543.member_1]; + if (_e552 >= _e521.member.member_1) { + phi_937_ = 4294967295u; } else { - phi_974_ = (_e522.member.member + _e553); + phi_937_ = (_e521.member.member + _e552); } - let _e561 = phi_974_; + let _e560 = phi_937_; if (_e66 >= 1u) { - phi_2298_ = (_e561 <= (_e66 - 1u)); + phi_2391_ = (_e560 <= (_e66 - 1u)); } else { - phi_2298_ = false; + phi_2391_ = false; } - let _e566 = phi_2298_; - if _e566 { - let _e569 = global_2.member[_e561]; - phi_983_ = _e569; + let _e565 = phi_2391_; + if _e565 { + let _e568 = global_3.member[_e560]; + phi_946_ = _e568; } else { - phi_983_ = 4294967295u; + phi_946_ = 4294967295u; } - let _e571 = phi_983_; + let _e570 = phi_946_; if (_e66 >= 10u) { - phi_2322_ = (_e571 <= (_e66 - 10u)); + phi_2415_ = (_e570 <= (_e66 - 10u)); } else { - phi_2322_ = false; + phi_2415_ = false; } - let _e576 = phi_2322_; - if _e576 { - let _e579 = global_2.member[_e571]; - let _e584 = global_2.member[(_e571 + 1u)]; - let _e589 = global_2.member[(_e571 + 2u)]; - let _e595 = global_2.member[(_e571 + 3u)]; - let _e600 = global_2.member[(_e571 + 4u)]; - let _e605 = global_2.member[(_e571 + 5u)]; - let _e610 = global_2.member[(_e571 + 6u)]; - let _e616 = global_2.member[(_e571 + 7u)]; - let _e621 = global_2.member[(_e571 + 8u)]; - let _e626 = global_2.member[(_e571 + 9u)]; - phi_1032_ = type_17(vec3(bitcast(_e579), bitcast(_e584), bitcast(_e589)), vec4(bitcast(_e595), bitcast(_e600), bitcast(_e605), bitcast(_e610)), vec3(bitcast(_e616), bitcast(_e621), bitcast(_e626))); + let _e575 = phi_2415_; + if _e575 { + let _e578 = global_3.member[_e570]; + let _e583 = global_3.member[(_e570 + 1u)]; + let _e588 = global_3.member[(_e570 + 2u)]; + let _e594 = global_3.member[(_e570 + 3u)]; + let _e599 = global_3.member[(_e570 + 4u)]; + let _e604 = global_3.member[(_e570 + 5u)]; + let _e609 = global_3.member[(_e570 + 6u)]; + let _e615 = global_3.member[(_e570 + 7u)]; + let _e620 = global_3.member[(_e570 + 8u)]; + let _e625 = global_3.member[(_e570 + 9u)]; + phi_995_ = type_17(vec3(bitcast(_e578), bitcast(_e583), bitcast(_e588)), vec4(bitcast(_e594), bitcast(_e599), bitcast(_e604), bitcast(_e609)), vec3(bitcast(_e615), bitcast(_e620), bitcast(_e625))); } else { - phi_1032_ = type_17(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); + phi_995_ = type_17(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); } - let _e631 = phi_1032_; - if (_e553 >= _e522.member_1.member_1) { - phi_1042_ = 4294967295u; + let _e630 = phi_995_; + if (_e552 >= _e521.member_1.member_1) { + phi_1005_ = 4294967295u; } else { - phi_1042_ = (_e522.member_1.member + (16u * _e553)); + phi_1005_ = (_e521.member_1.member + (16u * _e552)); } - let _e640 = phi_1042_; + let _e639 = phi_1005_; if (_e66 >= 16u) { - phi_2347_ = (_e640 <= (_e66 - 16u)); + phi_2440_ = (_e639 <= (_e66 - 16u)); } else { - phi_2347_ = false; + phi_2440_ = false; } - let _e645 = phi_2347_; - if _e645 { - let _e648 = global_2.member[_e640]; - let _e653 = global_2.member[(_e640 + 1u)]; - let _e658 = global_2.member[(_e640 + 2u)]; - let _e663 = global_2.member[(_e640 + 3u)]; - let _e669 = global_2.member[(_e640 + 4u)]; - let _e674 = global_2.member[(_e640 + 5u)]; - let _e679 = global_2.member[(_e640 + 6u)]; - let _e684 = global_2.member[(_e640 + 7u)]; - let _e690 = global_2.member[(_e640 + 8u)]; - let _e695 = global_2.member[(_e640 + 9u)]; - let _e700 = global_2.member[(_e640 + 10u)]; - let _e705 = global_2.member[(_e640 + 11u)]; - let _e711 = global_2.member[(_e640 + 12u)]; - let _e716 = global_2.member[(_e640 + 13u)]; - let _e721 = global_2.member[(_e640 + 14u)]; - let _e726 = global_2.member[(_e640 + 15u)]; - phi_1115_ = type_13(vec4(bitcast(_e648), bitcast(_e653), bitcast(_e658), bitcast(_e663)), vec4(bitcast(_e669), bitcast(_e674), bitcast(_e679), bitcast(_e684)), vec4(bitcast(_e690), bitcast(_e695), bitcast(_e700), bitcast(_e705)), vec4(bitcast(_e711), bitcast(_e716), bitcast(_e721), bitcast(_e726))); + let _e644 = phi_2440_; + if _e644 { + let _e647 = global_3.member[_e639]; + let _e652 = global_3.member[(_e639 + 1u)]; + let _e657 = global_3.member[(_e639 + 2u)]; + let _e662 = global_3.member[(_e639 + 3u)]; + let _e668 = global_3.member[(_e639 + 4u)]; + let _e673 = global_3.member[(_e639 + 5u)]; + let _e678 = global_3.member[(_e639 + 6u)]; + let _e683 = global_3.member[(_e639 + 7u)]; + let _e689 = global_3.member[(_e639 + 8u)]; + let _e694 = global_3.member[(_e639 + 9u)]; + let _e699 = global_3.member[(_e639 + 10u)]; + let _e704 = global_3.member[(_e639 + 11u)]; + let _e710 = global_3.member[(_e639 + 12u)]; + let _e715 = global_3.member[(_e639 + 13u)]; + let _e720 = global_3.member[(_e639 + 14u)]; + let _e725 = global_3.member[(_e639 + 15u)]; + phi_1078_ = type_14(vec4(bitcast(_e647), bitcast(_e652), bitcast(_e657), bitcast(_e662)), vec4(bitcast(_e668), bitcast(_e673), bitcast(_e678), bitcast(_e683)), vec4(bitcast(_e689), bitcast(_e694), bitcast(_e699), bitcast(_e704)), vec4(bitcast(_e710), bitcast(_e715), bitcast(_e720), bitcast(_e725))); } else { - phi_1115_ = type_13(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)); + phi_1078_ = type_14(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)); } - let _e731 = phi_1115_; - let _e739 = (_e631.member_1.x + _e631.member_1.x); - let _e740 = (_e631.member_1.y + _e631.member_1.y); - let _e741 = (_e631.member_1.z + _e631.member_1.z); - let _e743 = (_e631.member_1.z * _e741); - let _e744 = (_e631.member_1.w * _e739); - let _e745 = (_e631.member_1.w * _e740); - let _e746 = (_e631.member_1.w * _e741); - let _e766 = (vec4((1f - fma(_e631.member_1.y, _e740, _e743)), fma(_e631.member_1.x, _e740, _e746), fma(_e631.member_1.x, _e741, -(_e745)), 0f) * _e631.member_2.x); - let _e768 = (vec4(fma(_e631.member_1.x, _e740, -(_e746)), (1f - fma(_e631.member_1.x, _e739, _e743)), fma(_e631.member_1.y, _e741, _e744), 0f) * _e631.member_2.y); - let _e770 = (vec4(fma(_e631.member_1.x, _e741, _e745), fma(_e631.member_1.y, _e741, -(_e744)), (1f - fma(_e631.member_1.x, _e739, (_e631.member_1.y * _e740))), 0f) * _e631.member_2.z); - if _e551 { + let _e730 = phi_1078_; + let _e738 = (_e630.member_1.x + _e630.member_1.x); + let _e739 = (_e630.member_1.y + _e630.member_1.y); + let _e740 = (_e630.member_1.z + _e630.member_1.z); + let _e742 = (_e630.member_1.z * _e740); + let _e743 = (_e630.member_1.w * _e738); + let _e744 = (_e630.member_1.w * _e739); + let _e745 = (_e630.member_1.w * _e740); + let _e765 = (vec4((1f - fma(_e630.member_1.y, _e739, _e742)), fma(_e630.member_1.x, _e739, _e745), fma(_e630.member_1.x, _e740, -(_e744)), 0f) * _e630.member_2.x); + let _e767 = (vec4(fma(_e630.member_1.x, _e739, -(_e745)), (1f - fma(_e630.member_1.x, _e738, _e742)), fma(_e630.member_1.y, _e740, _e743), 0f) * _e630.member_2.y); + let _e769 = (vec4(fma(_e630.member_1.x, _e740, _e744), fma(_e630.member_1.y, _e740, -(_e743)), (1f - fma(_e630.member_1.x, _e738, (_e630.member_1.y * _e739))), 0f) * _e630.member_2.z); + if _e550 { } else { - phi_2772_ = true; + phi_2882_ = true; break; } - let _e875 = local[_e544.member_1]; - phi_928_ = type_13((_e529.member + (vec4(fma(_e631.member.x, _e731.member.w, fma(_e770.x, _e731.member.z, fma(_e766.x, _e731.member.x, (_e768.x * _e731.member.y)))), fma(_e631.member.y, _e731.member.w, fma(_e770.y, _e731.member.z, fma(_e766.y, _e731.member.x, (_e768.y * _e731.member.y)))), fma(_e631.member.z, _e731.member.w, fma(_e770.z, _e731.member.z, fma(_e766.z, _e731.member.x, (_e768.z * _e731.member.y)))), (fma(_e770.w, _e731.member.z, fma(_e766.w, _e731.member.x, (_e768.w * _e731.member.y))) + _e731.member.w)) * _e875)), (_e529.member_1 + (vec4(fma(_e631.member.x, _e731.member_1.w, fma(_e770.x, _e731.member_1.z, fma(_e766.x, _e731.member_1.x, (_e768.x * _e731.member_1.y)))), fma(_e631.member.y, _e731.member_1.w, fma(_e770.y, _e731.member_1.z, fma(_e766.y, _e731.member_1.x, (_e768.y * _e731.member_1.y)))), fma(_e631.member.z, _e731.member_1.w, fma(_e770.z, _e731.member_1.z, fma(_e766.z, _e731.member_1.x, (_e768.z * _e731.member_1.y)))), (fma(_e770.w, _e731.member_1.z, fma(_e766.w, _e731.member_1.x, (_e768.w * _e731.member_1.y))) + _e731.member_1.w)) * _e875)), (_e529.member_2 + (vec4(fma(_e631.member.x, _e731.member_2.w, fma(_e770.x, _e731.member_2.z, fma(_e766.x, _e731.member_2.x, (_e768.x * _e731.member_2.y)))), fma(_e631.member.y, _e731.member_2.w, fma(_e770.y, _e731.member_2.z, fma(_e766.y, _e731.member_2.x, (_e768.y * _e731.member_2.y)))), fma(_e631.member.z, _e731.member_2.w, fma(_e770.z, _e731.member_2.z, fma(_e766.z, _e731.member_2.x, (_e768.z * _e731.member_2.y)))), (fma(_e770.w, _e731.member_2.z, fma(_e766.w, _e731.member_2.x, (_e768.w * _e731.member_2.y))) + _e731.member_2.w)) * _e875)), (_e529.member_3 + (vec4(fma(_e631.member.x, _e731.member_3.w, fma(_e770.x, _e731.member_3.z, fma(_e766.x, _e731.member_3.x, (_e768.x * _e731.member_3.y)))), fma(_e631.member.y, _e731.member_3.w, fma(_e770.y, _e731.member_3.z, fma(_e766.y, _e731.member_3.x, (_e768.y * _e731.member_3.y)))), fma(_e631.member.z, _e731.member_3.w, fma(_e770.z, _e731.member_3.z, fma(_e766.z, _e731.member_3.x, (_e768.z * _e731.member_3.y)))), (fma(_e770.w, _e731.member_3.z, fma(_e766.w, _e731.member_3.x, (_e768.w * _e731.member_3.y))) + _e731.member_3.w)) * _e875))); - phi_1352_ = true; + let _e874 = local[_e543.member_1]; + phi_891_ = type_14((_e528.member + (vec4(fma(_e630.member.x, _e730.member.w, fma(_e769.x, _e730.member.z, fma(_e765.x, _e730.member.x, (_e767.x * _e730.member.y)))), fma(_e630.member.y, _e730.member.w, fma(_e769.y, _e730.member.z, fma(_e765.y, _e730.member.x, (_e767.y * _e730.member.y)))), fma(_e630.member.z, _e730.member.w, fma(_e769.z, _e730.member.z, fma(_e765.z, _e730.member.x, (_e767.z * _e730.member.y)))), (fma(_e769.w, _e730.member.z, fma(_e765.w, _e730.member.x, (_e767.w * _e730.member.y))) + _e730.member.w)) * _e874)), (_e528.member_1 + (vec4(fma(_e630.member.x, _e730.member_1.w, fma(_e769.x, _e730.member_1.z, fma(_e765.x, _e730.member_1.x, (_e767.x * _e730.member_1.y)))), fma(_e630.member.y, _e730.member_1.w, fma(_e769.y, _e730.member_1.z, fma(_e765.y, _e730.member_1.x, (_e767.y * _e730.member_1.y)))), fma(_e630.member.z, _e730.member_1.w, fma(_e769.z, _e730.member_1.z, fma(_e765.z, _e730.member_1.x, (_e767.z * _e730.member_1.y)))), (fma(_e769.w, _e730.member_1.z, fma(_e765.w, _e730.member_1.x, (_e767.w * _e730.member_1.y))) + _e730.member_1.w)) * _e874)), (_e528.member_2 + (vec4(fma(_e630.member.x, _e730.member_2.w, fma(_e769.x, _e730.member_2.z, fma(_e765.x, _e730.member_2.x, (_e767.x * _e730.member_2.y)))), fma(_e630.member.y, _e730.member_2.w, fma(_e769.y, _e730.member_2.z, fma(_e765.y, _e730.member_2.x, (_e767.y * _e730.member_2.y)))), fma(_e630.member.z, _e730.member_2.w, fma(_e769.z, _e730.member_2.z, fma(_e765.z, _e730.member_2.x, (_e767.z * _e730.member_2.y)))), (fma(_e769.w, _e730.member_2.z, fma(_e765.w, _e730.member_2.x, (_e767.w * _e730.member_2.y))) + _e730.member_2.w)) * _e874)), (_e528.member_3 + (vec4(fma(_e630.member.x, _e730.member_3.w, fma(_e769.x, _e730.member_3.z, fma(_e765.x, _e730.member_3.x, (_e767.x * _e730.member_3.y)))), fma(_e630.member.y, _e730.member_3.w, fma(_e769.y, _e730.member_3.z, fma(_e765.y, _e730.member_3.x, (_e767.y * _e730.member_3.y)))), fma(_e630.member.z, _e730.member_3.w, fma(_e769.z, _e730.member_3.z, fma(_e765.z, _e730.member_3.x, (_e767.z * _e730.member_3.y)))), (fma(_e769.w, _e730.member_3.z, fma(_e765.w, _e730.member_3.x, (_e767.w * _e730.member_3.y))) + _e730.member_3.w)) * _e874))); + phi_1315_ = true; break; } default: { - phi_928_ = type_13(); - phi_1352_ = bool(); + phi_891_ = type_14(); + phi_1315_ = bool(); break; } } - let _e890 = phi_928_; - let _e892 = phi_1352_; + let _e889 = phi_891_; + let _e891 = phi_1315_; continue; continuing { - phi_924_ = _e542; - phi_927_ = _e890; - phi_2772_ = false; - break if !(_e892); + phi_887_ = _e541; + phi_890_ = _e889; + phi_2882_ = false; + break if !(_e891); } } - let _e895 = phi_2772_; - if _e895 { + let _e894 = phi_2882_; + if _e894 { break; } - let _e897 = local_6; - let _e902 = global_5.member[0u]; - if (_e897.member.x == _e902) { - let _e905 = local_7; - let _e910 = global_5.member[1u]; - if (_e905.member.y == _e910) { - let _e913 = local_8; - let _e918 = global_5.member[2u]; - let _e919 = (_e913.member.z == _e918); - if _e919 { - let _e921 = local_9; - let _e926 = global_5.member[3u]; - phi_1379_ = (_e921.member.w == _e926); + let _e896 = local_6; + let _e901 = global_5.member[0u]; + if (_e896.member.x == _e901) { + let _e904 = local_7; + let _e909 = global_5.member[1u]; + if (_e904.member.y == _e909) { + let _e912 = local_8; + let _e917 = global_5.member[2u]; + let _e918 = (_e912.member.z == _e917); + if _e918 { + let _e920 = local_9; + let _e925 = global_5.member[3u]; + phi_1342_ = (_e920.member.w == _e925); } else { - phi_1379_ = bool(); + phi_1342_ = bool(); } - let _e929 = phi_1379_; - phi_1381_ = _e929; - phi_1382_ = select(true, false, _e919); + let _e928 = phi_1342_; + phi_1344_ = _e928; + phi_1345_ = select(true, false, _e918); } else { - phi_1381_ = bool(); - phi_1382_ = true; + phi_1344_ = bool(); + phi_1345_ = true; } - let _e932 = phi_1381_; - let _e934 = phi_1382_; - phi_1383_ = _e932; - phi_1384_ = _e934; + let _e931 = phi_1344_; + let _e933 = phi_1345_; + phi_1346_ = _e931; + phi_1347_ = _e933; } else { - phi_1383_ = bool(); - phi_1384_ = true; + phi_1346_ = bool(); + phi_1347_ = true; } - let _e936 = phi_1383_; - let _e938 = phi_1384_; - if select(_e936, false, _e938) { - let _e941 = local_10; - let _e946 = global_5.member_1[0u]; - if (_e941.member_1.x == _e946) { - let _e949 = local_11; - let _e954 = global_5.member_1[1u]; - if (_e949.member_1.y == _e954) { - let _e957 = local_12; - let _e962 = global_5.member_1[2u]; - let _e963 = (_e957.member_1.z == _e962); - if _e963 { - let _e965 = local_13; - let _e970 = global_5.member_1[3u]; - phi_1418_ = (_e965.member_1.w == _e970); + let _e935 = phi_1346_; + let _e937 = phi_1347_; + if select(_e935, false, _e937) { + let _e940 = local_10; + let _e945 = global_5.member_1[0u]; + if (_e940.member_1.x == _e945) { + let _e948 = local_11; + let _e953 = global_5.member_1[1u]; + if (_e948.member_1.y == _e953) { + let _e956 = local_12; + let _e961 = global_5.member_1[2u]; + let _e962 = (_e956.member_1.z == _e961); + if _e962 { + let _e964 = local_13; + let _e969 = global_5.member_1[3u]; + phi_1381_ = (_e964.member_1.w == _e969); } else { - phi_1418_ = bool(); + phi_1381_ = bool(); } - let _e973 = phi_1418_; - phi_1420_ = _e973; - phi_1421_ = select(true, false, _e963); + let _e972 = phi_1381_; + phi_1383_ = _e972; + phi_1384_ = select(true, false, _e962); } else { - phi_1420_ = bool(); - phi_1421_ = true; + phi_1383_ = bool(); + phi_1384_ = true; } - let _e976 = phi_1420_; - let _e978 = phi_1421_; - phi_1422_ = _e976; - phi_1423_ = _e978; + let _e975 = phi_1383_; + let _e977 = phi_1384_; + phi_1385_ = _e975; + phi_1386_ = _e977; } else { - phi_1422_ = bool(); - phi_1423_ = true; + phi_1385_ = bool(); + phi_1386_ = true; } - let _e980 = phi_1422_; - let _e982 = phi_1423_; - if select(_e980, false, _e982) { - let _e985 = local_14; - let _e990 = global_5.member_2[0u]; - if (_e985.member_2.x == _e990) { - let _e993 = local_15; - let _e998 = global_5.member_2[1u]; - if (_e993.member_2.y == _e998) { - let _e1001 = local_16; - let _e1006 = global_5.member_2[2u]; - let _e1007 = (_e1001.member_2.z == _e1006); - if _e1007 { - let _e1009 = local_17; - let _e1014 = global_5.member_2[3u]; - phi_1457_ = (_e1009.member_2.w == _e1014); + let _e979 = phi_1385_; + let _e981 = phi_1386_; + if select(_e979, false, _e981) { + let _e984 = local_14; + let _e989 = global_5.member_2[0u]; + if (_e984.member_2.x == _e989) { + let _e992 = local_15; + let _e997 = global_5.member_2[1u]; + if (_e992.member_2.y == _e997) { + let _e1000 = local_16; + let _e1005 = global_5.member_2[2u]; + let _e1006 = (_e1000.member_2.z == _e1005); + if _e1006 { + let _e1008 = local_17; + let _e1013 = global_5.member_2[3u]; + phi_1420_ = (_e1008.member_2.w == _e1013); } else { - phi_1457_ = bool(); + phi_1420_ = bool(); } - let _e1017 = phi_1457_; - phi_1459_ = _e1017; - phi_1460_ = select(true, false, _e1007); + let _e1016 = phi_1420_; + phi_1422_ = _e1016; + phi_1423_ = select(true, false, _e1006); } else { - phi_1459_ = bool(); - phi_1460_ = true; + phi_1422_ = bool(); + phi_1423_ = true; } - let _e1020 = phi_1459_; - let _e1022 = phi_1460_; - phi_1461_ = _e1020; - phi_1462_ = _e1022; + let _e1019 = phi_1422_; + let _e1021 = phi_1423_; + phi_1424_ = _e1019; + phi_1425_ = _e1021; } else { - phi_1461_ = bool(); - phi_1462_ = true; + phi_1424_ = bool(); + phi_1425_ = true; } - let _e1024 = phi_1461_; - let _e1026 = phi_1462_; - let _e1027 = select(_e1024, false, _e1026); - if _e1027 { - let _e1029 = local_18; - let _e1034 = global_5.member_3[0u]; - if (_e1029.member_3.x == _e1034) { - let _e1037 = local_19; - let _e1042 = global_5.member_3[1u]; - if (_e1037.member_3.y == _e1042) { - let _e1045 = local_20; - let _e1050 = global_5.member_3[2u]; - let _e1051 = (_e1045.member_3.z == _e1050); - if _e1051 { - let _e1053 = local_21; - let _e1058 = global_5.member_3[3u]; - phi_1496_ = (_e1053.member_3.w == _e1058); + let _e1023 = phi_1424_; + let _e1025 = phi_1425_; + let _e1026 = select(_e1023, false, _e1025); + if _e1026 { + let _e1028 = local_18; + let _e1033 = global_5.member_3[0u]; + if (_e1028.member_3.x == _e1033) { + let _e1036 = local_19; + let _e1041 = global_5.member_3[1u]; + if (_e1036.member_3.y == _e1041) { + let _e1044 = local_20; + let _e1049 = global_5.member_3[2u]; + let _e1050 = (_e1044.member_3.z == _e1049); + if _e1050 { + let _e1052 = local_21; + let _e1057 = global_5.member_3[3u]; + phi_1459_ = (_e1052.member_3.w == _e1057); } else { - phi_1496_ = bool(); + phi_1459_ = bool(); } - let _e1061 = phi_1496_; - phi_1498_ = _e1061; - phi_1499_ = select(true, false, _e1051); + let _e1060 = phi_1459_; + phi_1461_ = _e1060; + phi_1462_ = select(true, false, _e1050); } else { - phi_1498_ = bool(); - phi_1499_ = true; + phi_1461_ = bool(); + phi_1462_ = true; } - let _e1064 = phi_1498_; - let _e1066 = phi_1499_; - phi_1500_ = _e1064; - phi_1501_ = _e1066; + let _e1063 = phi_1461_; + let _e1065 = phi_1462_; + phi_1463_ = _e1063; + phi_1464_ = _e1065; } else { - phi_1500_ = bool(); - phi_1501_ = true; + phi_1463_ = bool(); + phi_1464_ = true; } - let _e1068 = phi_1500_; - let _e1070 = phi_1501_; - phi_1506_ = select(_e1068, false, _e1070); + let _e1067 = phi_1463_; + let _e1069 = phi_1464_; + phi_1469_ = select(_e1067, false, _e1069); } else { - phi_1506_ = bool(); + phi_1469_ = bool(); } - let _e1073 = phi_1506_; - phi_1508_ = _e1073; - phi_1509_ = select(true, false, _e1027); + let _e1072 = phi_1469_; + phi_1471_ = _e1072; + phi_1472_ = select(true, false, _e1026); } else { - phi_1508_ = bool(); - phi_1509_ = true; + phi_1471_ = bool(); + phi_1472_ = true; } - let _e1076 = phi_1508_; - let _e1078 = phi_1509_; - phi_1510_ = _e1076; - phi_1511_ = _e1078; + let _e1075 = phi_1471_; + let _e1077 = phi_1472_; + phi_1473_ = _e1075; + phi_1474_ = _e1077; } else { - phi_1510_ = bool(); - phi_1511_ = true; + phi_1473_ = bool(); + phi_1474_ = true; } - let _e1080 = phi_1510_; - let _e1082 = phi_1511_; - if select(_e1080, false, _e1082) { - phi_1519_ = type_13(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)); + let _e1079 = phi_1473_; + let _e1081 = phi_1474_; + if select(_e1079, false, _e1081) { + phi_1482_ = type_14(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)); } else { - let _e1532 = local_23; - phi_1519_ = _e1532; + let _e1607 = local_23; + phi_1482_ = _e1607; } - let _e1085 = phi_1519_; - let _e1108 = fma(_e1085.member_2.z, _e1085.member_3.w, -((_e1085.member_2.w * _e1085.member_3.z))); - let _e1111 = fma(_e1085.member_2.y, _e1085.member_3.w, -((_e1085.member_2.w * _e1085.member_3.y))); - let _e1114 = fma(_e1085.member_2.y, _e1085.member_3.z, -((_e1085.member_2.z * _e1085.member_3.y))); - let _e1117 = fma(_e1085.member_2.x, _e1085.member_3.w, -((_e1085.member_2.w * _e1085.member_3.x))); - let _e1120 = fma(_e1085.member_2.x, _e1085.member_3.z, -((_e1085.member_2.z * _e1085.member_3.x))); - let _e1123 = fma(_e1085.member_2.x, _e1085.member_3.y, -((_e1085.member_2.y * _e1085.member_3.x))); - let _e1145 = fma(-(_e1085.member.w), fma(_e1085.member_1.z, _e1123, fma(_e1085.member_1.x, _e1114, -((_e1085.member_1.y * _e1120)))), fma(_e1085.member.z, fma(_e1085.member_1.w, _e1123, fma(_e1085.member_1.x, _e1111, -((_e1085.member_1.y * _e1117)))), fma(_e1085.member.x, fma(_e1085.member_1.w, _e1114, fma(_e1085.member_1.y, _e1108, -((_e1085.member_1.z * _e1111)))), -((_e1085.member.y * fma(_e1085.member_1.w, _e1120, fma(_e1085.member_1.x, _e1108, -((_e1085.member_1.z * _e1117))))))))); - if (_e1145 == 0f) { - phi_2594_ = type_17(vec3(1f, 1f, 1f), vec4(0f, 0f, 0f, 1f), vec3(0f, 0f, 0f)); - phi_2595_ = type_17(); - phi_2596_ = true; + let _e1084 = phi_1482_; + let _e1107 = fma(_e1084.member_2.z, _e1084.member_3.w, -((_e1084.member_2.w * _e1084.member_3.z))); + let _e1110 = fma(_e1084.member_2.y, _e1084.member_3.w, -((_e1084.member_2.w * _e1084.member_3.y))); + let _e1113 = fma(_e1084.member_2.y, _e1084.member_3.z, -((_e1084.member_2.z * _e1084.member_3.y))); + let _e1116 = fma(_e1084.member_2.x, _e1084.member_3.w, -((_e1084.member_2.w * _e1084.member_3.x))); + let _e1119 = fma(_e1084.member_2.x, _e1084.member_3.z, -((_e1084.member_2.z * _e1084.member_3.x))); + let _e1122 = fma(_e1084.member_2.x, _e1084.member_3.y, -((_e1084.member_2.y * _e1084.member_3.x))); + let _e1144 = fma(-(_e1084.member.w), fma(_e1084.member_1.z, _e1122, fma(_e1084.member_1.x, _e1113, -((_e1084.member_1.y * _e1119)))), fma(_e1084.member.z, fma(_e1084.member_1.w, _e1122, fma(_e1084.member_1.x, _e1110, -((_e1084.member_1.y * _e1116)))), fma(_e1084.member.x, fma(_e1084.member_1.w, _e1113, fma(_e1084.member_1.y, _e1107, -((_e1084.member_1.z * _e1110)))), -((_e1084.member.y * fma(_e1084.member_1.w, _e1119, fma(_e1084.member_1.x, _e1107, -((_e1084.member_1.z * _e1116))))))))); + if (_e1144 == 0f) { + phi_2687_ = type_17(vec3(1f, 1f, 1f), vec4(0f, 0f, 0f, 1f), vec3(0f, 0f, 0f)); + phi_2688_ = type_17(); + phi_2689_ = true; } else { - let _e1154 = (sqrt(fma(_e1085.member.w, _e1085.member.w, fma(_e1085.member.z, _e1085.member.z, fma(_e1085.member.x, _e1085.member.x, (_e1085.member.y * _e1085.member.y))))) * select(-1f, 1f, (_e1145 >= 0f))); - let _e1159 = sqrt(fma(_e1085.member_1.w, _e1085.member_1.w, fma(_e1085.member_1.z, _e1085.member_1.z, fma(_e1085.member_1.x, _e1085.member_1.x, (_e1085.member_1.y * _e1085.member_1.y))))); - let _e1164 = sqrt(fma(_e1085.member_2.w, _e1085.member_2.w, fma(_e1085.member_2.z, _e1085.member_2.z, fma(_e1085.member_2.x, _e1085.member_2.x, (_e1085.member_2.y * _e1085.member_2.y))))); - if (_e1154 != 0f) { - phi_2482_ = select(true, false, (_e1159 != 0f)); + let _e1153 = (sqrt(fma(_e1084.member.w, _e1084.member.w, fma(_e1084.member.z, _e1084.member.z, fma(_e1084.member.x, _e1084.member.x, (_e1084.member.y * _e1084.member.y))))) * select(-1f, 1f, (_e1144 >= 0f))); + let _e1158 = sqrt(fma(_e1084.member_1.w, _e1084.member_1.w, fma(_e1084.member_1.z, _e1084.member_1.z, fma(_e1084.member_1.x, _e1084.member_1.x, (_e1084.member_1.y * _e1084.member_1.y))))); + let _e1163 = sqrt(fma(_e1084.member_2.w, _e1084.member_2.w, fma(_e1084.member_2.z, _e1084.member_2.z, fma(_e1084.member_2.x, _e1084.member_2.x, (_e1084.member_2.y * _e1084.member_2.y))))); + if (_e1153 != 0f) { + phi_2575_ = select(true, false, (_e1158 != 0f)); } else { - phi_2482_ = true; + phi_2575_ = true; } - let _e1171 = phi_2482_; - let _e1172 = select((_e1164 != 0f), false, _e1171); - if _e1172 { - let _e1173 = (1f / _e1154); - let _e1174 = (1f / _e1159); - let _e1175 = (1f / _e1164); - let _e1176 = (_e1085.member.x * _e1173); - let _e1177 = (_e1085.member.z * _e1173); - let _e1178 = (_e1085.member_1.x * _e1174); - let _e1179 = (_e1085.member_2.x * _e1175); - let _e1180 = (_e1085.member_2.y * _e1175); - if ((_e1085.member_2.z * _e1175) <= 0f) { - let _e1215 = fma(_e1085.member_1.y, _e1174, -(_e1176)); - let _e1217 = fma(-(_e1085.member_2.z), _e1175, 1f); - if (_e1215 <= 0f) { - let _e1231 = (_e1217 - _e1215); - let _e1233 = (0.5f / sqrt(_e1231)); - phi_2577_ = vec4((_e1231 * _e1233), (fma(_e1085.member.y, _e1173, _e1178) * _e1233), (fma(_e1085.member.z, _e1173, _e1179) * _e1233), (fma(_e1085.member_1.z, _e1174, -(_e1180)) * _e1233)); + let _e1170 = phi_2575_; + let _e1171 = select((_e1163 != 0f), false, _e1170); + if _e1171 { + let _e1172 = (1f / _e1153); + let _e1173 = (1f / _e1158); + let _e1174 = (1f / _e1163); + let _e1175 = (_e1084.member.x * _e1172); + let _e1176 = (_e1084.member.z * _e1172); + let _e1177 = (_e1084.member_1.x * _e1173); + let _e1178 = (_e1084.member_2.x * _e1174); + let _e1179 = (_e1084.member_2.y * _e1174); + if ((_e1084.member_2.z * _e1174) <= 0f) { + let _e1214 = fma(_e1084.member_1.y, _e1173, -(_e1175)); + let _e1216 = fma(-(_e1084.member_2.z), _e1174, 1f); + if (_e1214 <= 0f) { + let _e1230 = (_e1216 - _e1214); + let _e1232 = (0.5f / sqrt(_e1230)); + phi_2670_ = vec4((_e1230 * _e1232), (fma(_e1084.member.y, _e1172, _e1177) * _e1232), (fma(_e1084.member.z, _e1172, _e1178) * _e1232), (fma(_e1084.member_1.z, _e1173, -(_e1179)) * _e1232)); } else { - let _e1219 = (_e1217 + _e1215); - let _e1221 = (0.5f / sqrt(_e1219)); - phi_2577_ = vec4((fma(_e1085.member.y, _e1173, _e1178) * _e1221), (_e1219 * _e1221), (fma(_e1085.member_1.z, _e1174, _e1180) * _e1221), (fma(_e1085.member_2.x, _e1175, -(_e1177)) * _e1221)); + let _e1218 = (_e1216 + _e1214); + let _e1220 = (0.5f / sqrt(_e1218)); + phi_2670_ = vec4((fma(_e1084.member.y, _e1172, _e1177) * _e1220), (_e1218 * _e1220), (fma(_e1084.member_1.z, _e1173, _e1179) * _e1220), (fma(_e1084.member_2.x, _e1174, -(_e1176)) * _e1220)); } - let _e1244 = phi_2577_; - phi_2579_ = _e1244; + let _e1243 = phi_2670_; + phi_2672_ = _e1243; } else { - let _e1183 = fma(_e1085.member_1.y, _e1174, _e1176); - let _e1184 = fma(_e1085.member_2.z, _e1175, 1f); - if (_e1183 <= 0f) { - let _e1200 = (_e1184 - _e1183); - let _e1202 = (0.5f / sqrt(_e1200)); - phi_2547_ = vec4((fma(_e1085.member.z, _e1173, _e1179) * _e1202), (fma(_e1085.member_1.z, _e1174, _e1180) * _e1202), (_e1200 * _e1202), (fma(_e1085.member.y, _e1173, -(_e1178)) * _e1202)); + let _e1182 = fma(_e1084.member_1.y, _e1173, _e1175); + let _e1183 = fma(_e1084.member_2.z, _e1174, 1f); + if (_e1182 <= 0f) { + let _e1199 = (_e1183 - _e1182); + let _e1201 = (0.5f / sqrt(_e1199)); + phi_2640_ = vec4((fma(_e1084.member.z, _e1172, _e1178) * _e1201), (fma(_e1084.member_1.z, _e1173, _e1179) * _e1201), (_e1199 * _e1201), (fma(_e1084.member.y, _e1172, -(_e1177)) * _e1201)); } else { - let _e1186 = (_e1184 + _e1183); - let _e1188 = (0.5f / sqrt(_e1186)); - phi_2547_ = vec4((fma(_e1085.member_1.z, _e1174, -(_e1180)) * _e1188), (fma(_e1085.member_2.x, _e1175, -(_e1177)) * _e1188), (fma(_e1085.member.y, _e1173, -(_e1178)) * _e1188), (_e1186 * _e1188)); + let _e1185 = (_e1183 + _e1182); + let _e1187 = (0.5f / sqrt(_e1185)); + phi_2640_ = vec4((fma(_e1084.member_1.z, _e1173, -(_e1179)) * _e1187), (fma(_e1084.member_2.x, _e1174, -(_e1176)) * _e1187), (fma(_e1084.member.y, _e1172, -(_e1177)) * _e1187), (_e1185 * _e1187)); } - let _e1213 = phi_2547_; - phi_2579_ = _e1213; + let _e1212 = phi_2640_; + phi_2672_ = _e1212; } - let _e1246 = phi_2579_; - phi_2588_ = type_17(vec3(_e1154, _e1159, _e1164), _e1246, vec3(_e1085.member_3.x, _e1085.member_3.y, _e1085.member_3.z)); - phi_2589_ = type_17(); + let _e1245 = phi_2672_; + phi_2681_ = type_17(vec3(_e1153, _e1158, _e1163), _e1245, vec3(_e1084.member_3.x, _e1084.member_3.y, _e1084.member_3.z)); + phi_2682_ = type_17(); } else { - phi_2588_ = type_17(); - phi_2589_ = type_17(vec3(1f, 1f, 1f), vec4(0f, 0f, 0f, 1f), vec3(0f, 0f, 0f)); + phi_2681_ = type_17(); + phi_2682_ = type_17(vec3(1f, 1f, 1f), vec4(0f, 0f, 0f, 1f), vec3(0f, 0f, 0f)); } - let _e1250 = phi_2588_; - let _e1252 = phi_2589_; - phi_2594_ = _e1252; - phi_2595_ = _e1250; - phi_2596_ = select(true, false, _e1172); + let _e1249 = phi_2681_; + let _e1251 = phi_2682_; + phi_2687_ = _e1251; + phi_2688_ = _e1249; + phi_2689_ = select(true, false, _e1171); } - let _e1255 = phi_2594_; - let _e1257 = phi_2595_; - let _e1259 = phi_2596_; - if _e1259 { - phi_2600_ = _e1255; + let _e1254 = phi_2687_; + let _e1256 = phi_2688_; + let _e1258 = phi_2689_; + if _e1258 { + phi_2693_ = _e1254; } else { - phi_2600_ = _e1257; + phi_2693_ = _e1256; } - let _e1261 = phi_2600_; - phi_1521_ = type_17(_e1261.member_2, _e1261.member_1, _e1261.member); + let _e1260 = phi_2693_; + phi_1484_ = type_17(_e1260.member_2, _e1260.member_1, _e1260.member); } else { - phi_1521_ = type_17(); + phi_1484_ = type_17(); } - let _e1267 = phi_1521_; - phi_1523_ = _e1267; - phi_1524_ = select(true, false, _e497); + let _e1266 = phi_1484_; + phi_1486_ = _e1266; + phi_1487_ = select(true, false, _e496); } else { - phi_1523_ = type_17(); - phi_1524_ = true; + phi_1486_ = type_17(); + phi_1487_ = true; } - let _e1270 = phi_1523_; - let _e1272 = phi_1524_; - if _e1272 { + let _e1269 = phi_1486_; + let _e1271 = phi_1487_; + if _e1271 { if (_e66 >= 10u) { - phi_2694_ = (_e91 <= (_e66 - 10u)); + phi_2787_ = (_e90 <= (_e66 - 10u)); } else { - phi_2694_ = false; + phi_2787_ = false; } - let _e1277 = phi_2694_; - if _e1277 { - let _e1280 = global_2.member[_e91]; - let _e1285 = global_2.member[(_e91 + 1u)]; - let _e1290 = global_2.member[(_e91 + 2u)]; - let _e1296 = global_2.member[(_e91 + 3u)]; - let _e1301 = global_2.member[(_e91 + 4u)]; - let _e1306 = global_2.member[(_e91 + 5u)]; - let _e1311 = global_2.member[(_e91 + 6u)]; - let _e1317 = global_2.member[(_e91 + 7u)]; - let _e1322 = global_2.member[(_e91 + 8u)]; - let _e1327 = global_2.member[(_e91 + 9u)]; - phi_1577_ = type_17(vec3(bitcast(_e1280), bitcast(_e1285), bitcast(_e1290)), vec4(bitcast(_e1296), bitcast(_e1301), bitcast(_e1306), bitcast(_e1311)), vec3(bitcast(_e1317), bitcast(_e1322), bitcast(_e1327))); + let _e1276 = phi_2787_; + if _e1276 { + let _e1279 = global_3.member[_e90]; + let _e1284 = global_3.member[(_e90 + 1u)]; + let _e1289 = global_3.member[(_e90 + 2u)]; + let _e1295 = global_3.member[(_e90 + 3u)]; + let _e1300 = global_3.member[(_e90 + 4u)]; + let _e1305 = global_3.member[(_e90 + 5u)]; + let _e1310 = global_3.member[(_e90 + 6u)]; + let _e1316 = global_3.member[(_e90 + 7u)]; + let _e1321 = global_3.member[(_e90 + 8u)]; + let _e1326 = global_3.member[(_e90 + 9u)]; + phi_1540_ = type_17(vec3(bitcast(_e1279), bitcast(_e1284), bitcast(_e1289)), vec4(bitcast(_e1295), bitcast(_e1300), bitcast(_e1305), bitcast(_e1310)), vec3(bitcast(_e1316), bitcast(_e1321), bitcast(_e1326))); } else { - phi_1577_ = type_17(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); + phi_1540_ = type_17(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); } - let _e1332 = phi_1577_; - phi_1578_ = _e1332; + let _e1331 = phi_1540_; + phi_1541_ = _e1331; + } else { + phi_1541_ = _e1269; + } + let _e1333 = phi_1541_; + let _e1341 = (_e1333.member_1.x + _e1333.member_1.x); + let _e1342 = (_e1333.member_1.y + _e1333.member_1.y); + let _e1343 = (_e1333.member_1.z + _e1333.member_1.z); + let _e1345 = (_e1333.member_1.z * _e1343); + let _e1346 = (_e1333.member_1.w * _e1341); + let _e1347 = (_e1333.member_1.w * _e1342); + let _e1348 = (_e1333.member_1.w * _e1343); + let _e1368 = (vec4((1f - fma(_e1333.member_1.y, _e1342, _e1345)), fma(_e1333.member_1.x, _e1342, _e1348), fma(_e1333.member_1.x, _e1343, -(_e1347)), 0f) * _e1333.member_2.x); + let _e1370 = (vec4(fma(_e1333.member_1.x, _e1342, -(_e1348)), (1f - fma(_e1333.member_1.x, _e1341, _e1345)), fma(_e1333.member_1.y, _e1343, _e1346), 0f) * _e1333.member_2.y); + let _e1372 = (vec4(fma(_e1333.member_1.x, _e1343, _e1347), fma(_e1333.member_1.y, _e1343, -(_e1346)), (1f - fma(_e1333.member_1.x, _e1341, (_e1333.member_1.y * _e1342))), 0f) * _e1333.member_2.z); + let _e1377 = local_22; + let _e1400 = (_e1333.member.x + fma(_e1372.x, _e1377.member.z, fma(_e1370.x, _e1377.member.y, (_e1368.x * _e1377.member.x)))); + let _e1401 = (_e1333.member.y + fma(_e1372.y, _e1377.member.z, fma(_e1370.y, _e1377.member.y, (_e1368.y * _e1377.member.x)))); + let _e1402 = (_e1333.member.z + fma(_e1372.z, _e1377.member.z, fma(_e1370.z, _e1377.member.y, (_e1368.z * _e1377.member.x)))); + let _e1405 = global_4.member[3u]; + let _e1408 = global_4.member[4u]; + let _e1411 = global_4.member[_e1405]; + let _e1415 = global_4.member[(_e1405 + 1u)]; + if (_e1408 >= _e1415) { + phi_1640_ = 4294967295u; } else { - phi_1578_ = _e1270; + phi_1640_ = (_e1411 + (16u * _e1408)); } - let _e1334 = phi_1578_; - let _e1342 = (_e1334.member_1.x + _e1334.member_1.x); - let _e1343 = (_e1334.member_1.y + _e1334.member_1.y); - let _e1344 = (_e1334.member_1.z + _e1334.member_1.z); - let _e1346 = (_e1334.member_1.z * _e1344); - let _e1347 = (_e1334.member_1.w * _e1342); - let _e1348 = (_e1334.member_1.w * _e1343); - let _e1349 = (_e1334.member_1.w * _e1344); - let _e1369 = (vec4((1f - fma(_e1334.member_1.y, _e1343, _e1346)), fma(_e1334.member_1.x, _e1343, _e1349), fma(_e1334.member_1.x, _e1344, -(_e1348)), 0f) * _e1334.member_2.x); - let _e1371 = (vec4(fma(_e1334.member_1.x, _e1343, -(_e1349)), (1f - fma(_e1334.member_1.x, _e1342, _e1346)), fma(_e1334.member_1.y, _e1344, _e1347), 0f) * _e1334.member_2.y); - let _e1373 = (vec4(fma(_e1334.member_1.x, _e1344, _e1348), fma(_e1334.member_1.y, _e1344, -(_e1347)), (1f - fma(_e1334.member_1.x, _e1342, (_e1334.member_1.y * _e1343))), 0f) * _e1334.member_2.z); - let _e1378 = local_22; - let _e1401 = (_e1334.member.x + fma(_e1373.x, _e1378.member.z, fma(_e1371.x, _e1378.member.y, (_e1369.x * _e1378.member.x)))); - let _e1402 = (_e1334.member.y + fma(_e1373.y, _e1378.member.z, fma(_e1371.y, _e1378.member.y, (_e1369.y * _e1378.member.x)))); - let _e1403 = (_e1334.member.z + fma(_e1373.z, _e1378.member.z, fma(_e1371.z, _e1378.member.y, (_e1369.z * _e1378.member.x)))); - let _e1404 = global_4.member; - global_1 = vec4((fma(_e1404.member_2.x, _e1403, fma(_e1404.member.x, _e1401, (_e1404.member_1.x * _e1402))) + _e1404.member_3.x), (fma(_e1404.member_2.y, _e1403, fma(_e1404.member.y, _e1401, (_e1404.member_1.y * _e1402))) + _e1404.member_3.y), (fma(_e1404.member_2.z, _e1403, fma(_e1404.member.z, _e1401, (_e1404.member_1.z * _e1402))) + _e1404.member_3.z), (fma(_e1404.member_2.w, _e1403, fma(_e1404.member.w, _e1401, (_e1404.member_1.w * _e1402))) + _e1404.member_3.w)); + let _e1420 = phi_1640_; + let _e1423 = global_4.member[_e1420]; + let _e1428 = global_4.member[(_e1420 + 1u)]; + let _e1433 = global_4.member[(_e1420 + 2u)]; + let _e1438 = global_4.member[(_e1420 + 3u)]; + let _e1443 = global_4.member[(_e1420 + 4u)]; + let _e1448 = global_4.member[(_e1420 + 5u)]; + let _e1453 = global_4.member[(_e1420 + 6u)]; + let _e1458 = global_4.member[(_e1420 + 7u)]; + let _e1463 = global_4.member[(_e1420 + 8u)]; + let _e1468 = global_4.member[(_e1420 + 9u)]; + let _e1473 = global_4.member[(_e1420 + 10u)]; + let _e1478 = global_4.member[(_e1420 + 11u)]; + let _e1483 = global_4.member[(_e1420 + 12u)]; + let _e1488 = global_4.member[(_e1420 + 13u)]; + let _e1493 = global_4.member[(_e1420 + 14u)]; + let _e1498 = global_4.member[(_e1420 + 15u)]; + global_1 = vec4((fma(bitcast(_e1463), _e1402, fma(bitcast(_e1423), _e1400, (bitcast(_e1443) * _e1401))) + bitcast(_e1483)), (fma(bitcast(_e1468), _e1402, fma(bitcast(_e1428), _e1400, (bitcast(_e1448) * _e1401))) + bitcast(_e1488)), (fma(bitcast(_e1473), _e1402, fma(bitcast(_e1433), _e1400, (bitcast(_e1453) * _e1401))) + bitcast(_e1493)), (fma(bitcast(_e1478), _e1402, fma(bitcast(_e1438), _e1400, (bitcast(_e1458) * _e1401))) + bitcast(_e1498))); } else { global_1 = vec4(10f, 10f, 10f, 1f); } @@ -918,7 +940,7 @@ fn function() { @vertex fn lightshadow_mapping_vertex(@builtin(instance_index) param: u32, @builtin(vertex_index) param_1: u32) -> @builtin(position) vec4 { - global_3 = param; + global_2 = param; global = param_1; function(); let _e6 = global_1.y; diff --git a/crates/renderling/shaders/manifest.json b/crates/renderling/shaders/manifest.json index d7c2f4ac..95b9fcc1 100644 --- a/crates/renderling/shaders/manifest.json +++ b/crates/renderling/shaders/manifest.json @@ -1,4 +1,14 @@ [ + { + "source_path": "shaders/atlas-atlas_blit_fragment.spv", + "entry_point": "atlas::atlas_blit_fragment", + "wgsl_entry_point": "atlasatlas_blit_fragment" + }, + { + "source_path": "shaders/atlas-atlas_blit_vertex.spv", + "entry_point": "atlas::atlas_blit_vertex", + "wgsl_entry_point": "atlasatlas_blit_vertex" + }, { "source_path": "shaders/bloom-bloom_downsample_fragment.spv", "entry_point": "bloom::bloom_downsample_fragment", diff --git a/crates/renderling/shaders/skybox-skybox_cubemap_fragment.spv b/crates/renderling/shaders/skybox-skybox_cubemap_fragment.spv index e72ba1d51e83abff9c7fccca3bd5c89c998cf717..d3c61bab9804dac54431d75b1f9390c55359809a 100644 GIT binary patch delta 116 zcmX@ZafV}q0i%XC0}F!)0|SF35Q6}WF9qf`*o!bQF-Qa1lOq^iI6;cQc=J-mY(`#? ocpebvf`li_GCMO$O-^LKECJGM$H2_M2BhPF_%8z^g9Q)+032xzsQ>@~ delta 116 zcmX@ZafV}q0i%Wp0~3QJ0|SFL0}F!)kd^{s5PCnqvrmH_FoV_;@r1JZFo{Fi}|!2*Z@7fcPU diff --git a/crates/renderling/shaders/skybox-skybox_cubemap_vertex.spv b/crates/renderling/shaders/skybox-skybox_cubemap_vertex.spv index 63fd1c683e4f575d8426b6af4c0998742a1b92db..f4a16170a720b7a26eddf3b646eef87ef8ec009a 100644 GIT binary patch literal 11560 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 literal 11560 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 p_ddS6vDNo}=eMeRu+>z, } -struct type_19 { +struct type_12 { + member: u32, + member_1: u32, +} + +struct type_20 { member: vec4, member_1: vec4, member_2: vec4, member_3: vec4, } -struct type_20 { +struct type_21 { member: array, 8>, member_1: array, 6>, member_2: vec3, } -struct type_21 { - member: type_19, - member_1: type_19, +struct type_22 { + member: type_20, + member_1: type_20, member_2: vec3, - member_3: type_20, -} - -struct type_23 { - member: u32, - member_1: u32, + member_3: type_21, } struct VertexOutput { @@ -32,9 +32,9 @@ struct VertexOutput { @builtin(position) member_1: vec4, } -var global: u32; @group(0) @binding(0) -var global_1: type_10; +var global: type_3; +var global_1: u32; var global_2: vec4 = vec4(0f, 0f, 0f, 1f); var global_3: vec3; var global_4: u32; @@ -44,21 +44,21 @@ fn function() { var local_1: array, 6>; var local_2: array, 36>; var phi_718_: bool; - var phi_517_: type_23; - var phi_518_: type_23; - var phi_541_: type_23; + var phi_517_: type_12; + var phi_518_: type_12; + var phi_541_: type_12; var phi_568_: bool; - var phi_574_: type_23; - var phi_575_: type_23; - var phi_598_: type_23; + var phi_574_: type_12; + var phi_575_: type_12; + var phi_598_: type_12; var phi_621_: bool; - var phi_642_: type_21; + var phi_642_: type_22; switch bitcast(0u) { default: { let _e81 = global_4; - let _e82 = global; - let _e84 = arrayLength((&global_1.member)); + let _e82 = global_1; + let _e84 = arrayLength((&global.member)); if (_e84 >= 86u) { phi_718_ = (_e81 <= (_e84 - 86u)); } else { @@ -66,51 +66,51 @@ fn function() { } let _e89 = phi_718_; if _e89 { - let _e92 = global_1.member[_e81]; - let _e97 = global_1.member[(_e81 + 1u)]; - let _e102 = global_1.member[(_e81 + 2u)]; - let _e107 = global_1.member[(_e81 + 3u)]; - let _e113 = global_1.member[(_e81 + 4u)]; - let _e118 = global_1.member[(_e81 + 5u)]; - let _e123 = global_1.member[(_e81 + 6u)]; - let _e128 = global_1.member[(_e81 + 7u)]; - let _e134 = global_1.member[(_e81 + 8u)]; - let _e139 = global_1.member[(_e81 + 9u)]; - let _e144 = global_1.member[(_e81 + 10u)]; - let _e149 = global_1.member[(_e81 + 11u)]; - let _e155 = global_1.member[(_e81 + 12u)]; - let _e160 = global_1.member[(_e81 + 13u)]; - let _e165 = global_1.member[(_e81 + 14u)]; - let _e170 = global_1.member[(_e81 + 15u)]; - let _e177 = global_1.member[(_e81 + 16u)]; - let _e182 = global_1.member[(_e81 + 17u)]; - let _e187 = global_1.member[(_e81 + 18u)]; - let _e192 = global_1.member[(_e81 + 19u)]; - let _e198 = global_1.member[(_e81 + 20u)]; - let _e203 = global_1.member[(_e81 + 21u)]; - let _e208 = global_1.member[(_e81 + 22u)]; - let _e213 = global_1.member[(_e81 + 23u)]; - let _e219 = global_1.member[(_e81 + 24u)]; - let _e224 = global_1.member[(_e81 + 25u)]; - let _e229 = global_1.member[(_e81 + 26u)]; - let _e234 = global_1.member[(_e81 + 27u)]; - let _e240 = global_1.member[(_e81 + 28u)]; - let _e245 = global_1.member[(_e81 + 29u)]; - let _e250 = global_1.member[(_e81 + 30u)]; - let _e255 = global_1.member[(_e81 + 31u)]; - let _e262 = global_1.member[(_e81 + 32u)]; - let _e267 = global_1.member[(_e81 + 33u)]; - let _e272 = global_1.member[(_e81 + 34u)]; + let _e92 = global.member[_e81]; + let _e97 = global.member[(_e81 + 1u)]; + let _e102 = global.member[(_e81 + 2u)]; + let _e107 = global.member[(_e81 + 3u)]; + let _e113 = global.member[(_e81 + 4u)]; + let _e118 = global.member[(_e81 + 5u)]; + let _e123 = global.member[(_e81 + 6u)]; + let _e128 = global.member[(_e81 + 7u)]; + let _e134 = global.member[(_e81 + 8u)]; + let _e139 = global.member[(_e81 + 9u)]; + let _e144 = global.member[(_e81 + 10u)]; + let _e149 = global.member[(_e81 + 11u)]; + let _e155 = global.member[(_e81 + 12u)]; + let _e160 = global.member[(_e81 + 13u)]; + let _e165 = global.member[(_e81 + 14u)]; + let _e170 = global.member[(_e81 + 15u)]; + let _e177 = global.member[(_e81 + 16u)]; + let _e182 = global.member[(_e81 + 17u)]; + let _e187 = global.member[(_e81 + 18u)]; + let _e192 = global.member[(_e81 + 19u)]; + let _e198 = global.member[(_e81 + 20u)]; + let _e203 = global.member[(_e81 + 21u)]; + let _e208 = global.member[(_e81 + 22u)]; + let _e213 = global.member[(_e81 + 23u)]; + let _e219 = global.member[(_e81 + 24u)]; + let _e224 = global.member[(_e81 + 25u)]; + let _e229 = global.member[(_e81 + 26u)]; + let _e234 = global.member[(_e81 + 27u)]; + let _e240 = global.member[(_e81 + 28u)]; + let _e245 = global.member[(_e81 + 29u)]; + let _e250 = global.member[(_e81 + 30u)]; + let _e255 = global.member[(_e81 + 31u)]; + let _e262 = global.member[(_e81 + 32u)]; + let _e267 = global.member[(_e81 + 33u)]; + let _e272 = global.member[(_e81 + 34u)]; local_1 = array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); - phi_517_ = type_23(0u, 6u); + phi_517_ = type_12(0u, 6u); loop { let _e277 = phi_517_; if (_e277.member < _e277.member_1) { - phi_518_ = type_23((_e277.member + 1u), _e277.member_1); - phi_541_ = type_23(1u, _e277.member); + phi_518_ = type_12((_e277.member + 1u), _e277.member_1); + phi_541_ = type_12(1u, _e277.member); } else { phi_518_ = _e277; - phi_541_ = type_23(0u, type_23().member_1); + phi_541_ = type_12(0u, type_12().member_1); } let _e290 = phi_518_; let _e292 = phi_541_; @@ -121,10 +121,10 @@ fn function() { } case 1: { let _e297 = ((_e81 + 35u) + (_e292.member_1 * 4u)); - let _e300 = global_1.member[_e297]; - let _e305 = global_1.member[(_e297 + 1u)]; - let _e310 = global_1.member[(_e297 + 2u)]; - let _e315 = global_1.member[(_e297 + 3u)]; + let _e300 = global.member[_e297]; + let _e305 = global.member[(_e297 + 1u)]; + let _e310 = global.member[(_e297 + 2u)]; + let _e315 = global.member[(_e297 + 3u)]; local_1[_e292.member_1] = vec4(bitcast(_e300), bitcast(_e305), bitcast(_e310), bitcast(_e315)); phi_568_ = true; break; @@ -143,15 +143,15 @@ fn function() { } let _e322 = local_1; local = array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); - phi_574_ = type_23(0u, 8u); + phi_574_ = type_12(0u, 8u); loop { let _e325 = phi_574_; if (_e325.member < _e325.member_1) { - phi_575_ = type_23((_e325.member + 1u), _e325.member_1); - phi_598_ = type_23(1u, _e325.member); + phi_575_ = type_12((_e325.member + 1u), _e325.member_1); + phi_598_ = type_12(1u, _e325.member); } else { phi_575_ = _e325; - phi_598_ = type_23(0u, type_23().member_1); + phi_598_ = type_12(0u, type_12().member_1); } let _e338 = phi_575_; let _e340 = phi_598_; @@ -162,9 +162,9 @@ fn function() { } case 1: { let _e345 = ((_e81 + 59u) + (_e340.member_1 * 3u)); - let _e348 = global_1.member[_e345]; - let _e353 = global_1.member[(_e345 + 1u)]; - let _e358 = global_1.member[(_e345 + 2u)]; + let _e348 = global.member[_e345]; + let _e353 = global.member[(_e345 + 1u)]; + let _e358 = global.member[(_e345 + 2u)]; local[_e340.member_1] = vec3(bitcast(_e348), bitcast(_e353), bitcast(_e358)); phi_621_ = true; break; @@ -182,12 +182,12 @@ fn function() { } } let _e365 = local; - let _e369 = global_1.member[(_e81 + 83u)]; - let _e374 = global_1.member[(_e81 + 84u)]; - let _e379 = global_1.member[(_e81 + 85u)]; - phi_642_ = type_21(type_19(vec4(bitcast(_e92), bitcast(_e97), bitcast(_e102), bitcast(_e107)), vec4(bitcast(_e113), bitcast(_e118), bitcast(_e123), bitcast(_e128)), vec4(bitcast(_e134), bitcast(_e139), bitcast(_e144), bitcast(_e149)), vec4(bitcast(_e155), bitcast(_e160), bitcast(_e165), bitcast(_e170))), type_19(vec4(bitcast(_e177), bitcast(_e182), bitcast(_e187), bitcast(_e192)), vec4(bitcast(_e198), bitcast(_e203), bitcast(_e208), bitcast(_e213)), vec4(bitcast(_e219), bitcast(_e224), bitcast(_e229), bitcast(_e234)), vec4(bitcast(_e240), bitcast(_e245), bitcast(_e250), bitcast(_e255))), vec3(bitcast(_e262), bitcast(_e267), bitcast(_e272)), type_20(_e365, _e322, vec3(bitcast(_e369), bitcast(_e374), bitcast(_e379)))); + let _e369 = global.member[(_e81 + 83u)]; + let _e374 = global.member[(_e81 + 84u)]; + let _e379 = global.member[(_e81 + 85u)]; + phi_642_ = type_22(type_20(vec4(bitcast(_e92), bitcast(_e97), bitcast(_e102), bitcast(_e107)), vec4(bitcast(_e113), bitcast(_e118), bitcast(_e123), bitcast(_e128)), vec4(bitcast(_e134), bitcast(_e139), bitcast(_e144), bitcast(_e149)), vec4(bitcast(_e155), bitcast(_e160), bitcast(_e165), bitcast(_e170))), type_20(vec4(bitcast(_e177), bitcast(_e182), bitcast(_e187), bitcast(_e192)), vec4(bitcast(_e198), bitcast(_e203), bitcast(_e208), bitcast(_e213)), vec4(bitcast(_e219), bitcast(_e224), bitcast(_e229), bitcast(_e234)), vec4(bitcast(_e240), bitcast(_e245), bitcast(_e250), bitcast(_e255))), vec3(bitcast(_e262), bitcast(_e267), bitcast(_e272)), type_21(_e365, _e322, vec3(bitcast(_e369), bitcast(_e374), bitcast(_e379)))); } else { - phi_642_ = type_21(type_19(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_19(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_20(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); + phi_642_ = type_22(type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_21(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); } let _e385 = phi_642_; local_2 = array, 36>(vec3(-0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(-0.5f, 0.5f, -0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(0.5f, -0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, -0.5f, 0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(-0.5f, 0.5f, -0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(0.5f, -0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(-0.5f, 0.5f, -0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(-0.5f, -0.5f, -0.5f)); @@ -207,7 +207,7 @@ fn function() { @vertex fn skyboxskybox_cubemap_vertex(@builtin(instance_index) param: u32, @builtin(vertex_index) param_1: u32) -> VertexOutput { global_4 = param; - global = param_1; + global_1 = param_1; function(); let _e7 = global_2.y; global_2.y = -(_e7); diff --git a/crates/renderling/shaders/skybox-skybox_equirectangular_fragment.spv b/crates/renderling/shaders/skybox-skybox_equirectangular_fragment.spv index a039280dca1a82e1174800c6e7b9469cbd1bdd59..6c0cb4bd6981b6d91eef754b40f0767376075810 100644 GIT binary patch delta 98 zcmcb?b%Sez2cw2I0}F#V0|SFB5Q6}WF9+r|*o!bQF~|eilM5J^aDo(p@n%^jZAM;@ ccpDJ6f`liBGCMQMZJx=zoRLv(vLmZF09dmPP5=M^ delta 98 zcmcb?b%Sez2cw1v0~3QR0|SFL0}F#Vkd^~t5Pn~@i! cuMLP>LBf+mnVlKsH_v2V&d4Y~*^yNo08?EJQUCw| diff --git a/crates/renderling/shaders/skybox-skybox_vertex.spv b/crates/renderling/shaders/skybox-skybox_vertex.spv index 79eca6ab2f725ddc370ebb90fa4273a6d6d2b429..8316eb73132af7175937a918d7046bc313b61e78 100644 GIT binary patch literal 10108 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 L4*Y)-IyC+VkU*4= literal 10108 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, } -struct type_19 { +struct type_12 { + member: u32, + member_1: u32, +} + +struct type_20 { member: vec4, member_1: vec4, member_2: vec4, member_3: vec4, } -struct type_20 { +struct type_21 { member: array, 8>, member_1: array, 6>, member_2: vec3, } -struct type_21 { - member: type_19, - member_1: type_19, +struct type_22 { + member: type_20, + member_1: type_20, member_2: vec3, - member_3: type_20, -} - -struct type_23 { - member: u32, - member_1: u32, + member_3: type_21, } struct VertexOutput { @@ -32,9 +32,9 @@ struct VertexOutput { @builtin(position) member_1: vec4, } -var global: u32; @group(0) @binding(0) -var global_1: type_10; +var global: type_3; +var global_1: u32; var global_2: vec4 = vec4(0f, 0f, 0f, 1f); var global_3: u32; var global_4: vec3; @@ -44,21 +44,21 @@ fn function() { var local_1: array, 6>; var local_2: array, 36>; var phi_743_: bool; - var phi_301_: type_23; - var phi_302_: type_23; - var phi_325_: type_23; + var phi_301_: type_12; + var phi_302_: type_12; + var phi_325_: type_12; var phi_352_: bool; - var phi_358_: type_23; - var phi_359_: type_23; - var phi_382_: type_23; + var phi_358_: type_12; + var phi_359_: type_12; + var phi_382_: type_12; var phi_405_: bool; - var phi_426_: type_21; + var phi_426_: type_22; switch bitcast(0u) { default: { let _e81 = global_3; - let _e82 = global; - let _e84 = arrayLength((&global_1.member)); + let _e82 = global_1; + let _e84 = arrayLength((&global.member)); if (_e84 >= 86u) { phi_743_ = (_e81 <= (_e84 - 86u)); } else { @@ -66,51 +66,51 @@ fn function() { } let _e89 = phi_743_; if _e89 { - let _e92 = global_1.member[_e81]; - let _e97 = global_1.member[(_e81 + 1u)]; - let _e102 = global_1.member[(_e81 + 2u)]; - let _e107 = global_1.member[(_e81 + 3u)]; - let _e113 = global_1.member[(_e81 + 4u)]; - let _e118 = global_1.member[(_e81 + 5u)]; - let _e123 = global_1.member[(_e81 + 6u)]; - let _e128 = global_1.member[(_e81 + 7u)]; - let _e134 = global_1.member[(_e81 + 8u)]; - let _e139 = global_1.member[(_e81 + 9u)]; - let _e144 = global_1.member[(_e81 + 10u)]; - let _e149 = global_1.member[(_e81 + 11u)]; - let _e155 = global_1.member[(_e81 + 12u)]; - let _e160 = global_1.member[(_e81 + 13u)]; - let _e165 = global_1.member[(_e81 + 14u)]; - let _e170 = global_1.member[(_e81 + 15u)]; - let _e177 = global_1.member[(_e81 + 16u)]; - let _e182 = global_1.member[(_e81 + 17u)]; - let _e187 = global_1.member[(_e81 + 18u)]; - let _e192 = global_1.member[(_e81 + 19u)]; - let _e198 = global_1.member[(_e81 + 20u)]; - let _e203 = global_1.member[(_e81 + 21u)]; - let _e208 = global_1.member[(_e81 + 22u)]; - let _e213 = global_1.member[(_e81 + 23u)]; - let _e219 = global_1.member[(_e81 + 24u)]; - let _e224 = global_1.member[(_e81 + 25u)]; - let _e229 = global_1.member[(_e81 + 26u)]; - let _e234 = global_1.member[(_e81 + 27u)]; - let _e240 = global_1.member[(_e81 + 28u)]; - let _e245 = global_1.member[(_e81 + 29u)]; - let _e250 = global_1.member[(_e81 + 30u)]; - let _e255 = global_1.member[(_e81 + 31u)]; - let _e262 = global_1.member[(_e81 + 32u)]; - let _e267 = global_1.member[(_e81 + 33u)]; - let _e272 = global_1.member[(_e81 + 34u)]; + let _e92 = global.member[_e81]; + let _e97 = global.member[(_e81 + 1u)]; + let _e102 = global.member[(_e81 + 2u)]; + let _e107 = global.member[(_e81 + 3u)]; + let _e113 = global.member[(_e81 + 4u)]; + let _e118 = global.member[(_e81 + 5u)]; + let _e123 = global.member[(_e81 + 6u)]; + let _e128 = global.member[(_e81 + 7u)]; + let _e134 = global.member[(_e81 + 8u)]; + let _e139 = global.member[(_e81 + 9u)]; + let _e144 = global.member[(_e81 + 10u)]; + let _e149 = global.member[(_e81 + 11u)]; + let _e155 = global.member[(_e81 + 12u)]; + let _e160 = global.member[(_e81 + 13u)]; + let _e165 = global.member[(_e81 + 14u)]; + let _e170 = global.member[(_e81 + 15u)]; + let _e177 = global.member[(_e81 + 16u)]; + let _e182 = global.member[(_e81 + 17u)]; + let _e187 = global.member[(_e81 + 18u)]; + let _e192 = global.member[(_e81 + 19u)]; + let _e198 = global.member[(_e81 + 20u)]; + let _e203 = global.member[(_e81 + 21u)]; + let _e208 = global.member[(_e81 + 22u)]; + let _e213 = global.member[(_e81 + 23u)]; + let _e219 = global.member[(_e81 + 24u)]; + let _e224 = global.member[(_e81 + 25u)]; + let _e229 = global.member[(_e81 + 26u)]; + let _e234 = global.member[(_e81 + 27u)]; + let _e240 = global.member[(_e81 + 28u)]; + let _e245 = global.member[(_e81 + 29u)]; + let _e250 = global.member[(_e81 + 30u)]; + let _e255 = global.member[(_e81 + 31u)]; + let _e262 = global.member[(_e81 + 32u)]; + let _e267 = global.member[(_e81 + 33u)]; + let _e272 = global.member[(_e81 + 34u)]; local_1 = array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); - phi_301_ = type_23(0u, 6u); + phi_301_ = type_12(0u, 6u); loop { let _e277 = phi_301_; if (_e277.member < _e277.member_1) { - phi_302_ = type_23((_e277.member + 1u), _e277.member_1); - phi_325_ = type_23(1u, _e277.member); + phi_302_ = type_12((_e277.member + 1u), _e277.member_1); + phi_325_ = type_12(1u, _e277.member); } else { phi_302_ = _e277; - phi_325_ = type_23(0u, type_23().member_1); + phi_325_ = type_12(0u, type_12().member_1); } let _e290 = phi_302_; let _e292 = phi_325_; @@ -121,10 +121,10 @@ fn function() { } case 1: { let _e297 = ((_e81 + 35u) + (_e292.member_1 * 4u)); - let _e300 = global_1.member[_e297]; - let _e305 = global_1.member[(_e297 + 1u)]; - let _e310 = global_1.member[(_e297 + 2u)]; - let _e315 = global_1.member[(_e297 + 3u)]; + let _e300 = global.member[_e297]; + let _e305 = global.member[(_e297 + 1u)]; + let _e310 = global.member[(_e297 + 2u)]; + let _e315 = global.member[(_e297 + 3u)]; local_1[_e292.member_1] = vec4(bitcast(_e300), bitcast(_e305), bitcast(_e310), bitcast(_e315)); phi_352_ = true; break; @@ -143,15 +143,15 @@ fn function() { } let _e322 = local_1; local = array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); - phi_358_ = type_23(0u, 8u); + phi_358_ = type_12(0u, 8u); loop { let _e325 = phi_358_; if (_e325.member < _e325.member_1) { - phi_359_ = type_23((_e325.member + 1u), _e325.member_1); - phi_382_ = type_23(1u, _e325.member); + phi_359_ = type_12((_e325.member + 1u), _e325.member_1); + phi_382_ = type_12(1u, _e325.member); } else { phi_359_ = _e325; - phi_382_ = type_23(0u, type_23().member_1); + phi_382_ = type_12(0u, type_12().member_1); } let _e338 = phi_359_; let _e340 = phi_382_; @@ -162,9 +162,9 @@ fn function() { } case 1: { let _e345 = ((_e81 + 59u) + (_e340.member_1 * 3u)); - let _e348 = global_1.member[_e345]; - let _e353 = global_1.member[(_e345 + 1u)]; - let _e358 = global_1.member[(_e345 + 2u)]; + let _e348 = global.member[_e345]; + let _e353 = global.member[(_e345 + 1u)]; + let _e358 = global.member[(_e345 + 2u)]; local[_e340.member_1] = vec3(bitcast(_e348), bitcast(_e353), bitcast(_e358)); phi_405_ = true; break; @@ -182,12 +182,12 @@ fn function() { } } let _e365 = local; - let _e369 = global_1.member[(_e81 + 83u)]; - let _e374 = global_1.member[(_e81 + 84u)]; - let _e379 = global_1.member[(_e81 + 85u)]; - phi_426_ = type_21(type_19(vec4(bitcast(_e92), bitcast(_e97), bitcast(_e102), bitcast(_e107)), vec4(bitcast(_e113), bitcast(_e118), bitcast(_e123), bitcast(_e128)), vec4(bitcast(_e134), bitcast(_e139), bitcast(_e144), bitcast(_e149)), vec4(bitcast(_e155), bitcast(_e160), bitcast(_e165), bitcast(_e170))), type_19(vec4(bitcast(_e177), bitcast(_e182), bitcast(_e187), bitcast(_e192)), vec4(bitcast(_e198), bitcast(_e203), bitcast(_e208), bitcast(_e213)), vec4(bitcast(_e219), bitcast(_e224), bitcast(_e229), bitcast(_e234)), vec4(bitcast(_e240), bitcast(_e245), bitcast(_e250), bitcast(_e255))), vec3(bitcast(_e262), bitcast(_e267), bitcast(_e272)), type_20(_e365, _e322, vec3(bitcast(_e369), bitcast(_e374), bitcast(_e379)))); + let _e369 = global.member[(_e81 + 83u)]; + let _e374 = global.member[(_e81 + 84u)]; + let _e379 = global.member[(_e81 + 85u)]; + phi_426_ = type_22(type_20(vec4(bitcast(_e92), bitcast(_e97), bitcast(_e102), bitcast(_e107)), vec4(bitcast(_e113), bitcast(_e118), bitcast(_e123), bitcast(_e128)), vec4(bitcast(_e134), bitcast(_e139), bitcast(_e144), bitcast(_e149)), vec4(bitcast(_e155), bitcast(_e160), bitcast(_e165), bitcast(_e170))), type_20(vec4(bitcast(_e177), bitcast(_e182), bitcast(_e187), bitcast(_e192)), vec4(bitcast(_e198), bitcast(_e203), bitcast(_e208), bitcast(_e213)), vec4(bitcast(_e219), bitcast(_e224), bitcast(_e229), bitcast(_e234)), vec4(bitcast(_e240), bitcast(_e245), bitcast(_e250), bitcast(_e255))), vec3(bitcast(_e262), bitcast(_e267), bitcast(_e272)), type_21(_e365, _e322, vec3(bitcast(_e369), bitcast(_e374), bitcast(_e379)))); } else { - phi_426_ = type_21(type_19(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_19(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_20(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); + phi_426_ = type_22(type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_21(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); } let _e385 = phi_426_; local_2 = array, 36>(vec3(-0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(-0.5f, 0.5f, -0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(0.5f, -0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(0.5f, 0.5f, 0.5f), vec3(0.5f, -0.5f, 0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(-0.5f, 0.5f, -0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(-0.5f, 0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(0.5f, -0.5f, 0.5f), vec3(-0.5f, -0.5f, 0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(-0.5f, -0.5f, -0.5f), vec3(-0.5f, 0.5f, -0.5f), vec3(0.5f, 0.5f, -0.5f), vec3(0.5f, -0.5f, -0.5f), vec3(-0.5f, -0.5f, -0.5f)); @@ -208,7 +208,7 @@ fn function() { @vertex fn skyboxskybox_vertex(@builtin(instance_index) param: u32, @builtin(vertex_index) param_1: u32) -> VertexOutput { global_3 = param; - global = param_1; + global_1 = param_1; function(); let _e7 = global_2.y; global_2.y = -(_e7); diff --git a/crates/renderling/shaders/stage-renderlet_fragment.spv b/crates/renderling/shaders/stage-renderlet_fragment.spv index d93264f7b22263f8ceb8ed0f594b5973411cbf7d..365b45da544404153aa873415a3ab3096f901537 100644 GIT binary patch literal 77756 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, } -struct type_20 { +struct type_14 { + member: u32, + member_1: u32, +} + +struct type_15 { + member: type_14, + member_1: vec2, + member_2: vec2, + member_3: u32, + member_4: u32, +} + +struct type_23 { member: vec4, member_1: vec4, member_2: vec4, member_3: vec4, } -struct type_21 { +struct type_24 { member: array, 8>, member_1: array, 6>, member_2: vec3, } -struct type_22 { - member: type_20, - member_1: type_20, +struct type_25 { + member: type_23, + member_1: type_23, member_2: vec3, - member_3: type_21, + member_3: type_24, } -struct type_24 { +struct type_30 { member: u32, member_1: u32, + member_2: u32, + member_3: u32, } -struct type_29 { +struct type_31 { member: vec3, member_1: vec4, member_2: vec3, } -struct type_31 { +struct type_33 { member: vec3, member_1: f32, member_2: vec4, @@ -53,20 +68,6 @@ struct type_31 { member_16: f32, } -struct type_32 { - member: type_24, - member_1: vec2, - member_2: vec2, - member_3: u32, - member_4: u32, -} - -struct type_33 { - member: u32, - member_1: u32, - member_2: u32, -} - struct type_34 { member: vec3, member_1: vec4, @@ -83,2101 +84,2351 @@ struct type_35 { } @group(0) @binding(0) -var global: type_11; -var global_1: u32; -var global_2: vec4; -var global_3: vec2; +var global: type_3; +@group(2) @binding(0) +var global_1: type_3; +var global_2: u32; +var global_3: vec4; var global_4: vec2; -var global_5: vec3; +var global_5: vec2; var global_6: vec3; var global_7: vec3; var global_8: vec3; +var global_9: vec3; @group(1) @binding(1) -var global_9: sampler; +var global_10: sampler; @group(1) @binding(0) -var global_10: texture_2d_array; +var global_11: texture_2d_array; @group(1) @binding(2) -var global_11: texture_cube; +var global_12: texture_cube; @group(1) @binding(3) -var global_12: sampler; +var global_13: sampler; @group(1) @binding(4) -var global_13: texture_cube; +var global_14: texture_cube; @group(1) @binding(5) -var global_14: sampler; +var global_15: sampler; @group(1) @binding(6) -var global_15: texture_2d; +var global_16: texture_2d; @group(1) @binding(7) -var global_16: sampler; -var global_17: vec4; +var global_17: sampler; +@group(2) @binding(2) +var global_18: sampler; +@group(2) @binding(1) +var global_19: texture_2d_array; +var global_20: vec4; fn function() { var local: array, 8>; var local_1: array, 6>; - var phi_610_: u32; - var phi_3876_: bool; - var phi_764_: type_31; - var phi_768_: type_31; - var phi_3913_: bool; - var phi_808_: u32; - var phi_817_: u32; - var phi_830_: type_32; - var phi_3935_: f32; - var phi_3948_: bool; - var phi_884_: f32; - var phi_879_: f32; - var phi_885_: f32; - var phi_3965_: bool; - var phi_850_: f32; - var phi_887_: f32; - var phi_3983_: f32; - var phi_3996_: bool; - var phi_942_: f32; - var phi_937_: f32; - var phi_943_: f32; - var phi_4013_: bool; - var phi_908_: f32; - var phi_945_: f32; - var phi_4049_: bool; - var phi_1028_: u32; - var phi_1037_: u32; - var phi_1050_: type_32; - var phi_4070_: f32; - var phi_4083_: bool; - var phi_1104_: f32; - var phi_1099_: f32; - var phi_1105_: f32; - var phi_4100_: bool; - var phi_1070_: f32; - var phi_1107_: f32; - var phi_4118_: f32; - var phi_4131_: bool; - var phi_1162_: f32; - var phi_1157_: f32; - var phi_1163_: f32; - var phi_4148_: bool; - var phi_1128_: f32; - var phi_1165_: f32; - var phi_4184_: bool; - var phi_1248_: u32; - var phi_1257_: u32; - var phi_1270_: type_32; - var phi_4205_: f32; - var phi_4218_: bool; - var phi_1324_: f32; - var phi_1319_: f32; - var phi_1325_: f32; - var phi_4235_: bool; - var phi_1290_: f32; - var phi_1327_: f32; - var phi_4253_: f32; - var phi_4266_: bool; - var phi_1382_: f32; - var phi_1377_: f32; - var phi_1383_: f32; - var phi_4283_: bool; - var phi_1348_: f32; - var phi_1385_: f32; - var phi_4319_: bool; - var phi_1468_: u32; - var phi_1477_: u32; - var phi_1490_: type_32; - var phi_4340_: f32; - var phi_4353_: bool; - var phi_1544_: f32; - var phi_1539_: f32; - var phi_1545_: f32; - var phi_4370_: bool; - var phi_1510_: f32; - var phi_1547_: f32; - var phi_4388_: f32; - var phi_4401_: bool; - var phi_1602_: f32; - var phi_1597_: f32; - var phi_1603_: f32; - var phi_4418_: bool; - var phi_1568_: f32; - var phi_1605_: f32; - var phi_4454_: bool; - var phi_1688_: u32; - var phi_1697_: u32; - var phi_1710_: type_32; - var phi_4475_: f32; - var phi_4488_: bool; - var phi_1764_: f32; - var phi_1759_: f32; - var phi_1765_: f32; - var phi_4505_: bool; - var phi_1730_: f32; - var phi_1767_: f32; - var phi_4523_: f32; - var phi_4536_: bool; - var phi_1822_: f32; - var phi_1817_: f32; - var phi_1823_: f32; - var phi_4553_: bool; - var phi_1788_: f32; - var phi_1825_: f32; - var phi_4611_: vec3; - var phi_4646_: vec3; - var phi_4681_: vec3; - var phi_4716_: vec3; - var phi_4751_: vec3; - var phi_1919_: vec3; - var phi_1920_: vec3; - var phi_4783_: bool; - var phi_2127_: type_24; - var phi_2128_: type_24; - var phi_2151_: type_24; - var phi_2178_: bool; - var phi_2184_: type_24; - var phi_2185_: type_24; - var phi_2208_: type_24; - var phi_2231_: bool; - var phi_2252_: type_22; - var phi_4855_: vec3; - var phi_4914_: vec3; - var phi_4988_: vec3; - var phi_5048_: vec3; - var phi_5097_: vec3; - var phi_5146_: vec3; - var phi_5195_: vec3; - var phi_5244_: vec3; - var phi_5293_: vec3; - var phi_5342_: vec3; - var phi_5381_: vec3; - var phi_5416_: vec3; - var phi_2292_: type_24; - var phi_2295_: vec3; - var phi_2293_: type_24; - var phi_2318_: type_24; - var phi_5433_: u32; - var phi_5452_: bool; - var phi_2335_: u32; - var phi_5484_: bool; - var phi_2352_: u32; - var phi_2362_: type_33; - var phi_5514_: bool; - var phi_2412_: type_29; - var phi_5594_: bool; - var phi_2920_: type_35; - var phi_5644_: vec3; - var phi_5679_: vec3; - var phi_5714_: vec3; - var phi_3175_: vec3; - var phi_5806_: bool; - var phi_2667_: type_34; - var phi_5853_: vec3; - var phi_5888_: vec3; - var phi_2857_: vec3; - var phi_5980_: bool; - var phi_2460_: type_34; - var phi_6027_: vec3; - var phi_6062_: vec3; - var phi_3177_: vec3; - var phi_3178_: bool; - var phi_3187_: vec3; - var phi_2296_: vec3; - var phi_3189_: bool; + var phi_680_: u32; + var phi_4342_: bool; + var phi_808_: type_33; + var phi_812_: type_33; + var phi_4379_: bool; + var phi_852_: u32; + var phi_861_: u32; + var phi_874_: type_15; + var phi_4401_: f32; + var phi_4414_: bool; + var phi_928_: f32; + var phi_923_: f32; + var phi_929_: f32; + var phi_4431_: bool; + var phi_894_: f32; + var phi_931_: f32; + var phi_4449_: f32; + var phi_4462_: bool; + var phi_986_: f32; + var phi_981_: f32; + var phi_987_: f32; + var phi_4479_: bool; + var phi_952_: f32; + var phi_989_: f32; + var phi_4515_: bool; + var phi_1072_: u32; + var phi_1081_: u32; + var phi_1094_: type_15; + var phi_4536_: f32; + var phi_4549_: bool; + var phi_1148_: f32; + var phi_1143_: f32; + var phi_1149_: f32; + var phi_4566_: bool; + var phi_1114_: f32; + var phi_1151_: f32; + var phi_4584_: f32; + var phi_4597_: bool; + var phi_1206_: f32; + var phi_1201_: f32; + var phi_1207_: f32; + var phi_4614_: bool; + var phi_1172_: f32; + var phi_1209_: f32; + var phi_4650_: bool; + var phi_1292_: u32; + var phi_1301_: u32; + var phi_1314_: type_15; + var phi_4671_: f32; + var phi_4684_: bool; + var phi_1368_: f32; + var phi_1363_: f32; + var phi_1369_: f32; + var phi_4701_: bool; + var phi_1334_: f32; + var phi_1371_: f32; + var phi_4719_: f32; + var phi_4732_: bool; + var phi_1426_: f32; + var phi_1421_: f32; + var phi_1427_: f32; + var phi_4749_: bool; + var phi_1392_: f32; + var phi_1429_: f32; + var phi_4785_: bool; + var phi_1512_: u32; + var phi_1521_: u32; + var phi_1534_: type_15; + var phi_4806_: f32; + var phi_4819_: bool; + var phi_1588_: f32; + var phi_1583_: f32; + var phi_1589_: f32; + var phi_4836_: bool; + var phi_1554_: f32; + var phi_1591_: f32; + var phi_4854_: f32; + var phi_4867_: bool; + var phi_1646_: f32; + var phi_1641_: f32; + var phi_1647_: f32; + var phi_4884_: bool; + var phi_1612_: f32; + var phi_1649_: f32; + var phi_4920_: bool; + var phi_1732_: u32; + var phi_1741_: u32; + var phi_1754_: type_15; + var phi_4941_: f32; + var phi_4954_: bool; + var phi_1808_: f32; + var phi_1803_: f32; + var phi_1809_: f32; + var phi_4971_: bool; + var phi_1774_: f32; + var phi_1811_: f32; + var phi_4989_: f32; + var phi_5002_: bool; + var phi_1866_: f32; + var phi_1861_: f32; + var phi_1867_: f32; + var phi_5019_: bool; + var phi_1832_: f32; + var phi_1869_: f32; + var phi_5077_: vec3; + var phi_5112_: vec3; + var phi_5147_: vec3; + var phi_5182_: vec3; + var phi_5217_: vec3; + var phi_1963_: vec3; + var phi_1964_: vec3; + var phi_5249_: bool; + var phi_2171_: type_14; + var phi_2172_: type_14; + var phi_2195_: type_14; + var phi_2222_: bool; + var phi_2228_: type_14; + var phi_2229_: type_14; + var phi_2252_: type_14; + var phi_2275_: bool; + var phi_2296_: type_25; + var phi_5321_: vec3; + var phi_5380_: vec3; + var phi_5454_: vec3; + var phi_5514_: vec3; + var phi_5563_: vec3; + var phi_5612_: vec3; + var phi_5661_: vec3; + var phi_5710_: vec3; + var phi_5759_: vec3; + var phi_5808_: vec3; + var phi_5847_: vec3; + var phi_5882_: vec3; + var phi_2363_: type_14; + var phi_2366_: vec3; + var phi_2364_: type_14; + var phi_2389_: type_14; + var phi_5908_: u32; + var phi_5927_: bool; + var phi_2406_: u32; + var phi_5959_: bool; + var phi_2423_: u32; + var phi_2437_: type_30; + var phi_5991_: bool; + var phi_2487_: type_31; + var phi_6071_: bool; + var phi_3413_: type_35; + var phi_6121_: vec3; + var phi_6156_: vec3; + var phi_6191_: vec3; + var phi_3668_: vec3; + var phi_6283_: bool; + var phi_3160_: type_34; + var phi_6330_: vec3; + var phi_6365_: vec3; + var phi_3350_: vec3; + var phi_6457_: bool; + var phi_2535_: type_34; + var phi_6504_: vec3; + var phi_6539_: vec3; + var phi_2772_: u32; + var phi_2781_: u32; + var phi_6645_: f32; + var phi_6658_: bool; + var phi_2987_: f32; + var phi_2982_: f32; + var phi_2988_: f32; + var phi_6675_: bool; + var phi_2953_: f32; + var phi_2990_: f32; + var phi_6693_: f32; + var phi_6706_: bool; + var phi_3043_: f32; + var phi_3038_: f32; + var phi_3044_: f32; + var phi_6723_: bool; + var phi_3009_: f32; + var phi_3046_: f32; + var phi_3106_: f32; + var phi_3670_: vec3; + var phi_3671_: bool; + var phi_3680_: vec3; + var phi_2367_: vec3; + var phi_3682_: bool; var local_2: vec3; var local_3: vec3; var local_4: vec3; - var phi_3306_: vec4; + var phi_3799_: vec4; - let _e113 = arrayLength((&global.member)); - let _e114 = global_1; - let _e115 = global_2; - let _e116 = global_3; - let _e117 = global_4; - let _e118 = global_5; - let _e119 = global_6; - let _e120 = global_7; - let _e121 = global_8; - let _e125 = global.member[(_e114 + 9u)]; - let _e129 = global.member[(_e114 + 11u)]; - let _e133 = global.member[(_e114 + 17u)]; - let _e136 = global.member[_e133]; - let _e140 = global.member[(_e133 + 1u)]; - let _e144 = global.member[(_e133 + 4u)]; - switch bitcast(_e144) { + let _e116 = arrayLength((&global.member)); + let _e118 = arrayLength((&global_1.member)); + let _e119 = global_2; + let _e120 = global_3; + let _e121 = global_4; + let _e122 = global_5; + let _e123 = global_6; + let _e124 = global_7; + let _e125 = global_8; + let _e126 = global_9; + let _e130 = global.member[(_e119 + 9u)]; + let _e134 = global.member[(_e119 + 11u)]; + let _e138 = global.member[(_e119 + 17u)]; + let _e141 = global.member[_e138]; + let _e145 = global.member[(_e138 + 1u)]; + let _e149 = global.member[(_e138 + 4u)]; + switch bitcast(_e149) { case 0: { - phi_610_ = 0u; + phi_680_ = 0u; break; } case 1: { - phi_610_ = 1u; + phi_680_ = 1u; break; } case 2: { - phi_610_ = 2u; + phi_680_ = 2u; break; } case 3: { - phi_610_ = 3u; + phi_680_ = 3u; break; } case 4: { - phi_610_ = 4u; + phi_680_ = 4u; break; } case 5: { - phi_610_ = 5u; + phi_680_ = 5u; break; } case 6: { - phi_610_ = 6u; + phi_680_ = 6u; break; } case 7: { - phi_610_ = 7u; + phi_680_ = 7u; break; } case 8: { - phi_610_ = 8u; + phi_680_ = 8u; break; } case 9: { - phi_610_ = 9u; + phi_680_ = 9u; break; } case 10: { - phi_610_ = 10u; + phi_680_ = 10u; break; } case 11: { - phi_610_ = 11u; + phi_680_ = 11u; break; } case 12: { - phi_610_ = 12u; + phi_680_ = 12u; break; } case 13: { - phi_610_ = 13u; + phi_680_ = 13u; break; } case 14: { - phi_610_ = 14u; + phi_680_ = 14u; break; } case 15: { - phi_610_ = 15u; + phi_680_ = 15u; break; } case 16: { - phi_610_ = 16u; + phi_680_ = 16u; break; } case 17: { - phi_610_ = 17u; + phi_680_ = 17u; break; } case 18: { - phi_610_ = 18u; + phi_680_ = 18u; break; } case 19: { - phi_610_ = 19u; + phi_680_ = 19u; break; } default: { - phi_610_ = 0u; + phi_680_ = 0u; break; } } - let _e147 = phi_610_; - let _e151 = global.member[(_e133 + 5u)]; - let _e156 = global.member[(_e133 + 9u)]; - let _e160 = global.member[(_e133 + 10u)]; - if (_e129 == 4294967295u) { - phi_768_ = type_31(vec3(0f, 0f, 0f), 1f, vec4(1f, 1f, 1f, 1f), 1f, 1f, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 0u, 0u, 0u, 0u, 0u, false, 0f); + let _e152 = phi_680_; + let _e156 = global.member[(_e138 + 5u)]; + if (_e134 == 4294967295u) { + phi_812_ = type_33(vec3(0f, 0f, 0f), 1f, vec4(1f, 1f, 1f, 1f), 1f, 1f, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 0u, 0u, 0u, 0u, 0u, false, 0f); } else { - if (_e113 >= 22u) { - phi_3876_ = (_e129 <= (_e113 - 22u)); + if (_e116 >= 22u) { + phi_4342_ = (_e134 <= (_e116 - 22u)); } else { - phi_3876_ = false; - } - let _e166 = phi_3876_; - if _e166 { - let _e169 = global.member[_e129]; - let _e174 = global.member[(_e129 + 1u)]; - let _e179 = global.member[(_e129 + 2u)]; - let _e185 = global.member[(_e129 + 3u)]; - let _e190 = global.member[(_e129 + 4u)]; - let _e195 = global.member[(_e129 + 5u)]; - let _e200 = global.member[(_e129 + 6u)]; - let _e205 = global.member[(_e129 + 7u)]; - let _e211 = global.member[(_e129 + 8u)]; - let _e216 = global.member[(_e129 + 9u)]; - let _e221 = global.member[(_e129 + 10u)]; - let _e225 = global.member[(_e129 + 11u)]; - let _e229 = global.member[(_e129 + 12u)]; - let _e233 = global.member[(_e129 + 13u)]; - let _e237 = global.member[(_e129 + 14u)]; - let _e241 = global.member[(_e129 + 15u)]; - let _e245 = global.member[(_e129 + 16u)]; - let _e249 = global.member[(_e129 + 17u)]; - let _e253 = global.member[(_e129 + 18u)]; - let _e257 = global.member[(_e129 + 19u)]; - let _e261 = global.member[(_e129 + 20u)]; - let _e266 = global.member[(_e129 + 21u)]; - phi_764_ = type_31(vec3(bitcast(_e169), bitcast(_e174), bitcast(_e179)), bitcast(_e185), vec4(bitcast(_e190), bitcast(_e195), bitcast(_e200), bitcast(_e205)), bitcast(_e211), bitcast(_e216), _e221, _e225, _e229, _e233, _e237, _e241, _e245, _e249, _e253, _e257, (_e261 == 1u), bitcast(_e266)); + phi_4342_ = false; + } + let _e163 = phi_4342_; + if _e163 { + let _e166 = global.member[_e134]; + let _e171 = global.member[(_e134 + 1u)]; + let _e176 = global.member[(_e134 + 2u)]; + let _e182 = global.member[(_e134 + 3u)]; + let _e187 = global.member[(_e134 + 4u)]; + let _e192 = global.member[(_e134 + 5u)]; + let _e197 = global.member[(_e134 + 6u)]; + let _e202 = global.member[(_e134 + 7u)]; + let _e208 = global.member[(_e134 + 8u)]; + let _e213 = global.member[(_e134 + 9u)]; + let _e218 = global.member[(_e134 + 10u)]; + let _e222 = global.member[(_e134 + 11u)]; + let _e226 = global.member[(_e134 + 12u)]; + let _e230 = global.member[(_e134 + 13u)]; + let _e234 = global.member[(_e134 + 14u)]; + let _e238 = global.member[(_e134 + 15u)]; + let _e242 = global.member[(_e134 + 16u)]; + let _e246 = global.member[(_e134 + 17u)]; + let _e250 = global.member[(_e134 + 18u)]; + let _e254 = global.member[(_e134 + 19u)]; + let _e258 = global.member[(_e134 + 20u)]; + let _e263 = global.member[(_e134 + 21u)]; + phi_808_ = type_33(vec3(bitcast(_e166), bitcast(_e171), bitcast(_e176)), bitcast(_e182), vec4(bitcast(_e187), bitcast(_e192), bitcast(_e197), bitcast(_e202)), bitcast(_e208), bitcast(_e213), _e218, _e222, _e226, _e230, _e234, _e238, _e242, _e246, _e250, _e254, (_e258 == 1u), bitcast(_e263)); } else { - phi_764_ = type_31(vec3(0f, 0f, 0f), 1f, vec4(1f, 1f, 1f, 1f), 1f, 1f, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 0u, 0u, 0u, 0u, 0u, true, 0f); + phi_808_ = type_33(vec3(0f, 0f, 0f), 1f, vec4(1f, 1f, 1f, 1f), 1f, 1f, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 4294967295u, 0u, 0u, 0u, 0u, 0u, true, 0f); } - let _e270 = phi_764_; - phi_768_ = type_31(_e270.member, _e270.member_1, _e270.member_2, _e270.member_3, _e270.member_4, _e270.member_5, _e270.member_6, _e270.member_7, _e270.member_8, _e270.member_9, _e270.member_10, _e270.member_11, _e270.member_12, _e270.member_13, _e270.member_14, (_e270.member_15 && (_e151 == 1u)), _e270.member_16); + let _e267 = phi_808_; + phi_812_ = type_33(_e267.member, _e267.member_1, _e267.member_2, _e267.member_3, _e267.member_4, _e267.member_5, _e267.member_6, _e267.member_7, _e267.member_8, _e267.member_9, _e267.member_10, _e267.member_11, _e267.member_12, _e267.member_13, _e267.member_14, (_e267.member_15 && (_e156 == 1u)), _e267.member_16); } - let _e292 = phi_768_; - let _e296 = select(_e117, _e116, vec2((_e292.member_10 == 0u))); - let _e298 = (_e113 >= 8u); - if _e298 { - phi_3913_ = (_e292.member_5 <= (_e113 - 8u)); + let _e289 = phi_812_; + let _e293 = select(_e122, _e121, vec2((_e289.member_10 == 0u))); + let _e295 = (_e116 >= 8u); + if _e295 { + phi_4379_ = (_e289.member_5 <= (_e116 - 8u)); } else { - phi_3913_ = false; + phi_4379_ = false; } - let _e302 = phi_3913_; - if _e302 { - let _e305 = global.member[_e292.member_5]; - let _e309 = global.member[(_e292.member_5 + 1u)]; - let _e314 = global.member[(_e292.member_5 + 2u)]; - let _e318 = global.member[(_e292.member_5 + 3u)]; - let _e323 = global.member[(_e292.member_5 + 4u)]; - let _e327 = global.member[(_e292.member_5 + 5u)]; - let _e331 = global.member[(_e292.member_5 + 6u)]; - switch bitcast(_e331) { + let _e299 = phi_4379_; + if _e299 { + let _e302 = global.member[_e289.member_5]; + let _e306 = global.member[(_e289.member_5 + 1u)]; + let _e311 = global.member[(_e289.member_5 + 2u)]; + let _e315 = global.member[(_e289.member_5 + 3u)]; + let _e320 = global.member[(_e289.member_5 + 4u)]; + let _e324 = global.member[(_e289.member_5 + 5u)]; + let _e328 = global.member[(_e289.member_5 + 6u)]; + switch bitcast(_e328) { case 0: { - phi_808_ = 0u; + phi_852_ = 0u; break; } case 1: { - phi_808_ = 1u; + phi_852_ = 1u; break; } case 2: { - phi_808_ = 2u; + phi_852_ = 2u; break; } default: { - phi_808_ = 0u; + phi_852_ = 0u; break; } } - let _e334 = phi_808_; - let _e338 = global.member[(_e292.member_5 + 7u)]; - switch bitcast(_e338) { + let _e331 = phi_852_; + let _e335 = global.member[(_e289.member_5 + 7u)]; + switch bitcast(_e335) { case 0: { - phi_817_ = 0u; + phi_861_ = 0u; break; } case 1: { - phi_817_ = 1u; + phi_861_ = 1u; break; } case 2: { - phi_817_ = 2u; + phi_861_ = 2u; break; } default: { - phi_817_ = 0u; + phi_861_ = 0u; break; } } - let _e341 = phi_817_; - phi_830_ = type_32(type_24(_e334, _e341), vec2(_e305, _e309), vec2(_e314, _e318), _e323, _e327); + let _e338 = phi_861_; + phi_874_ = type_15(type_14(_e331, _e338), vec2(_e302, _e306), vec2(_e311, _e315), _e320, _e324); } else { - phi_830_ = type_32(type_24(0u, 0u), vec2(0u, 0u), vec2(0u, 0u), 0u, 0u); + phi_874_ = type_15(type_14(0u, 0u), vec2(0u, 0u), vec2(0u, 0u), 0u, 0u); } - let _e345 = phi_830_; - switch bitcast(_e345.member.member) { + let _e342 = phi_874_; + switch bitcast(_e342.member.member) { case 1: { - let _e383 = abs(_e296.x); - let _e385 = (_e383 % 1f); - if (_e383 >= 1f) { - phi_3965_ = select(true, false, (_e385 == 0f)); + let _e380 = abs(_e293.x); + let _e382 = (_e380 % 1f); + if (_e380 >= 1f) { + phi_4431_ = select(true, false, (_e382 == 0f)); } else { - phi_3965_ = true; + phi_4431_ = true; } - let _e389 = phi_3965_; - let _e390 = select(1f, _e385, _e389); - if (select(-1f, 1f, (_e296.x >= 0f)) > 0f) { - phi_850_ = _e390; + let _e386 = phi_4431_; + let _e387 = select(1f, _e382, _e386); + if (select(-1f, 1f, (_e293.x >= 0f)) > 0f) { + phi_894_ = _e387; } else { - phi_850_ = (1f - _e390); + phi_894_ = (1f - _e387); } - let _e394 = phi_850_; - phi_887_ = _e394; + let _e391 = phi_894_; + phi_931_ = _e391; break; } case 2: { - let _e357 = abs(_e296.x); - let _e364 = ((select(select(u32(_e357), 0u, (_e357 < 0f)), 4294967295u, (_e357 > 4294967000f)) % 2u) == 0u); - let _e366 = (_e357 % 1f); - if (_e357 >= 1f) { - phi_3948_ = select(true, false, (_e366 == 0f)); + let _e354 = abs(_e293.x); + let _e361 = ((select(select(u32(_e354), 0u, (_e354 < 0f)), 4294967295u, (_e354 > 4294967000f)) % 2u) == 0u); + let _e363 = (_e354 % 1f); + if (_e354 >= 1f) { + phi_4414_ = select(true, false, (_e363 == 0f)); } else { - phi_3948_ = true; + phi_4414_ = true; } - let _e370 = phi_3948_; - let _e371 = select(1f, _e366, _e370); - if (select(-1f, 1f, (_e296.x >= 0f)) > 0f) { - if _e364 { - phi_879_ = _e371; + let _e367 = phi_4414_; + let _e368 = select(1f, _e363, _e367); + if (select(-1f, 1f, (_e293.x >= 0f)) > 0f) { + if _e361 { + phi_923_ = _e368; } else { - phi_879_ = (1f - _e371); + phi_923_ = (1f - _e368); } - let _e378 = phi_879_; - phi_885_ = _e378; + let _e375 = phi_923_; + phi_929_ = _e375; } else { - if _e364 { - phi_884_ = (1f - _e371); + if _e361 { + phi_928_ = (1f - _e368); } else { - phi_884_ = _e371; + phi_928_ = _e368; } - let _e375 = phi_884_; - phi_885_ = _e375; + let _e372 = phi_928_; + phi_929_ = _e372; } - let _e380 = phi_885_; - phi_887_ = _e380; + let _e377 = phi_929_; + phi_931_ = _e377; break; } case 0: { - if (_e296.x > 1f) { - phi_3935_ = 0.9999999f; + if (_e293.x > 1f) { + phi_4401_ = 0.9999999f; } else { - phi_3935_ = select(_e296.x, 0.00000011920929f, (_e296.x < 0f)); + phi_4401_ = select(_e293.x, 0.00000011920929f, (_e293.x < 0f)); } - let _e354 = phi_3935_; - phi_887_ = _e354; + let _e351 = phi_4401_; + phi_931_ = _e351; break; } default: { - phi_887_ = f32(); + phi_931_ = f32(); break; } } - let _e396 = phi_887_; - switch bitcast(_e345.member.member_1) { + let _e393 = phi_931_; + switch bitcast(_e342.member.member_1) { case 1: { - let _e434 = abs(_e296.y); - let _e436 = (_e434 % 1f); - if (_e434 >= 1f) { - phi_4013_ = select(true, false, (_e436 == 0f)); + let _e431 = abs(_e293.y); + let _e433 = (_e431 % 1f); + if (_e431 >= 1f) { + phi_4479_ = select(true, false, (_e433 == 0f)); } else { - phi_4013_ = true; + phi_4479_ = true; } - let _e440 = phi_4013_; - let _e441 = select(1f, _e436, _e440); - if (select(-1f, 1f, (_e296.y >= 0f)) > 0f) { - phi_908_ = _e441; + let _e437 = phi_4479_; + let _e438 = select(1f, _e433, _e437); + if (select(-1f, 1f, (_e293.y >= 0f)) > 0f) { + phi_952_ = _e438; } else { - phi_908_ = (1f - _e441); + phi_952_ = (1f - _e438); } - let _e445 = phi_908_; - phi_945_ = _e445; + let _e442 = phi_952_; + phi_989_ = _e442; break; } case 2: { - let _e408 = abs(_e296.y); - let _e415 = ((select(select(u32(_e408), 0u, (_e408 < 0f)), 4294967295u, (_e408 > 4294967000f)) % 2u) == 0u); - let _e417 = (_e408 % 1f); - if (_e408 >= 1f) { - phi_3996_ = select(true, false, (_e417 == 0f)); + let _e405 = abs(_e293.y); + let _e412 = ((select(select(u32(_e405), 0u, (_e405 < 0f)), 4294967295u, (_e405 > 4294967000f)) % 2u) == 0u); + let _e414 = (_e405 % 1f); + if (_e405 >= 1f) { + phi_4462_ = select(true, false, (_e414 == 0f)); } else { - phi_3996_ = true; + phi_4462_ = true; } - let _e421 = phi_3996_; - let _e422 = select(1f, _e417, _e421); - if (select(-1f, 1f, (_e296.y >= 0f)) > 0f) { - if _e415 { - phi_937_ = _e422; + let _e418 = phi_4462_; + let _e419 = select(1f, _e414, _e418); + if (select(-1f, 1f, (_e293.y >= 0f)) > 0f) { + if _e412 { + phi_981_ = _e419; } else { - phi_937_ = (1f - _e422); + phi_981_ = (1f - _e419); } - let _e429 = phi_937_; - phi_943_ = _e429; + let _e426 = phi_981_; + phi_987_ = _e426; } else { - if _e415 { - phi_942_ = (1f - _e422); + if _e412 { + phi_986_ = (1f - _e419); } else { - phi_942_ = _e422; + phi_986_ = _e419; } - let _e426 = phi_942_; - phi_943_ = _e426; + let _e423 = phi_986_; + phi_987_ = _e423; } - let _e431 = phi_943_; - phi_945_ = _e431; + let _e428 = phi_987_; + phi_989_ = _e428; break; } case 0: { - if (_e296.y > 1f) { - phi_3983_ = 0.9999999f; + if (_e293.y > 1f) { + phi_4449_ = 0.9999999f; } else { - phi_3983_ = select(_e296.y, 0.00000011920929f, (_e296.y < 0f)); + phi_4449_ = select(_e293.y, 0.00000011920929f, (_e293.y < 0f)); } - let _e405 = phi_3983_; - phi_945_ = _e405; + let _e402 = phi_4449_; + phi_989_ = _e402; break; } default: { - phi_945_ = f32(); + phi_989_ = f32(); break; } } - let _e447 = phi_945_; - let _e451 = (_e396 * f32(_e345.member_2.x)); - let _e460 = (_e447 * f32(_e345.member_2.y)); - let _e472 = f32(_e136); - let _e473 = f32(_e140); - let _e480 = vec3((f32((select(select(u32(_e451), 0u, (_e451 < 0f)), 4294967295u, (_e451 > 4294967000f)) + _e345.member_1.x)) / _e472), (f32((select(select(u32(_e460), 0u, (_e460 < 0f)), 4294967295u, (_e460 > 4294967000f)) + _e345.member_1.y)) / _e473), f32(_e345.member_3)); - let _e486 = textureSampleLevel(global_10, global_9, vec2(_e480.x, _e480.y), i32(_e480.z), 0f); - let _e489 = select(_e486, vec4(1f, 1f, 1f, 1f), vec4((_e292.member_5 == 4294967295u))); - let _e493 = select(_e117, _e116, vec2((_e292.member_11 == 0u))); - if _e298 { - phi_4049_ = (_e292.member_6 <= (_e113 - 8u)); + let _e444 = phi_989_; + let _e448 = (_e393 * f32(_e342.member_2.x)); + let _e457 = (_e444 * f32(_e342.member_2.y)); + let _e469 = f32(_e141); + let _e470 = f32(_e145); + let _e477 = vec3((f32((select(select(u32(_e448), 0u, (_e448 < 0f)), 4294967295u, (_e448 > 4294967000f)) + _e342.member_1.x)) / _e469), (f32((select(select(u32(_e457), 0u, (_e457 < 0f)), 4294967295u, (_e457 > 4294967000f)) + _e342.member_1.y)) / _e470), f32(_e342.member_3)); + let _e483 = textureSampleLevel(global_11, global_10, vec2(_e477.x, _e477.y), i32(_e477.z), 0f); + let _e486 = select(_e483, vec4(1f, 1f, 1f, 1f), vec4((_e289.member_5 == 4294967295u))); + let _e490 = select(_e122, _e121, vec2((_e289.member_11 == 0u))); + if _e295 { + phi_4515_ = (_e289.member_6 <= (_e116 - 8u)); } else { - phi_4049_ = false; + phi_4515_ = false; } - let _e498 = phi_4049_; - if _e498 { - let _e501 = global.member[_e292.member_6]; - let _e505 = global.member[(_e292.member_6 + 1u)]; - let _e510 = global.member[(_e292.member_6 + 2u)]; - let _e514 = global.member[(_e292.member_6 + 3u)]; - let _e519 = global.member[(_e292.member_6 + 4u)]; - let _e523 = global.member[(_e292.member_6 + 5u)]; - let _e527 = global.member[(_e292.member_6 + 6u)]; - switch bitcast(_e527) { + let _e495 = phi_4515_; + if _e495 { + let _e498 = global.member[_e289.member_6]; + let _e502 = global.member[(_e289.member_6 + 1u)]; + let _e507 = global.member[(_e289.member_6 + 2u)]; + let _e511 = global.member[(_e289.member_6 + 3u)]; + let _e516 = global.member[(_e289.member_6 + 4u)]; + let _e520 = global.member[(_e289.member_6 + 5u)]; + let _e524 = global.member[(_e289.member_6 + 6u)]; + switch bitcast(_e524) { case 0: { - phi_1028_ = 0u; + phi_1072_ = 0u; break; } case 1: { - phi_1028_ = 1u; + phi_1072_ = 1u; break; } case 2: { - phi_1028_ = 2u; + phi_1072_ = 2u; break; } default: { - phi_1028_ = 0u; + phi_1072_ = 0u; break; } } - let _e530 = phi_1028_; - let _e534 = global.member[(_e292.member_6 + 7u)]; - switch bitcast(_e534) { + let _e527 = phi_1072_; + let _e531 = global.member[(_e289.member_6 + 7u)]; + switch bitcast(_e531) { case 0: { - phi_1037_ = 0u; + phi_1081_ = 0u; break; } case 1: { - phi_1037_ = 1u; + phi_1081_ = 1u; break; } case 2: { - phi_1037_ = 2u; + phi_1081_ = 2u; break; } default: { - phi_1037_ = 0u; + phi_1081_ = 0u; break; } } - let _e537 = phi_1037_; - phi_1050_ = type_32(type_24(_e530, _e537), vec2(_e501, _e505), vec2(_e510, _e514), _e519, _e523); + let _e534 = phi_1081_; + phi_1094_ = type_15(type_14(_e527, _e534), vec2(_e498, _e502), vec2(_e507, _e511), _e516, _e520); } else { - phi_1050_ = type_32(type_24(0u, 0u), vec2(0u, 0u), vec2(0u, 0u), 0u, 0u); + phi_1094_ = type_15(type_14(0u, 0u), vec2(0u, 0u), vec2(0u, 0u), 0u, 0u); } - let _e541 = phi_1050_; - switch bitcast(_e541.member.member) { + let _e538 = phi_1094_; + switch bitcast(_e538.member.member) { case 1: { - let _e579 = abs(_e493.x); - let _e581 = (_e579 % 1f); - if (_e579 >= 1f) { - phi_4100_ = select(true, false, (_e581 == 0f)); + let _e576 = abs(_e490.x); + let _e578 = (_e576 % 1f); + if (_e576 >= 1f) { + phi_4566_ = select(true, false, (_e578 == 0f)); } else { - phi_4100_ = true; + phi_4566_ = true; } - let _e585 = phi_4100_; - let _e586 = select(1f, _e581, _e585); - if (select(-1f, 1f, (_e493.x >= 0f)) > 0f) { - phi_1070_ = _e586; + let _e582 = phi_4566_; + let _e583 = select(1f, _e578, _e582); + if (select(-1f, 1f, (_e490.x >= 0f)) > 0f) { + phi_1114_ = _e583; } else { - phi_1070_ = (1f - _e586); + phi_1114_ = (1f - _e583); } - let _e590 = phi_1070_; - phi_1107_ = _e590; + let _e587 = phi_1114_; + phi_1151_ = _e587; break; } case 2: { - let _e553 = abs(_e493.x); - let _e560 = ((select(select(u32(_e553), 0u, (_e553 < 0f)), 4294967295u, (_e553 > 4294967000f)) % 2u) == 0u); - let _e562 = (_e553 % 1f); - if (_e553 >= 1f) { - phi_4083_ = select(true, false, (_e562 == 0f)); + let _e550 = abs(_e490.x); + let _e557 = ((select(select(u32(_e550), 0u, (_e550 < 0f)), 4294967295u, (_e550 > 4294967000f)) % 2u) == 0u); + let _e559 = (_e550 % 1f); + if (_e550 >= 1f) { + phi_4549_ = select(true, false, (_e559 == 0f)); } else { - phi_4083_ = true; + phi_4549_ = true; } - let _e566 = phi_4083_; - let _e567 = select(1f, _e562, _e566); - if (select(-1f, 1f, (_e493.x >= 0f)) > 0f) { - if _e560 { - phi_1099_ = _e567; + let _e563 = phi_4549_; + let _e564 = select(1f, _e559, _e563); + if (select(-1f, 1f, (_e490.x >= 0f)) > 0f) { + if _e557 { + phi_1143_ = _e564; } else { - phi_1099_ = (1f - _e567); + phi_1143_ = (1f - _e564); } - let _e574 = phi_1099_; - phi_1105_ = _e574; + let _e571 = phi_1143_; + phi_1149_ = _e571; } else { - if _e560 { - phi_1104_ = (1f - _e567); + if _e557 { + phi_1148_ = (1f - _e564); } else { - phi_1104_ = _e567; + phi_1148_ = _e564; } - let _e571 = phi_1104_; - phi_1105_ = _e571; + let _e568 = phi_1148_; + phi_1149_ = _e568; } - let _e576 = phi_1105_; - phi_1107_ = _e576; + let _e573 = phi_1149_; + phi_1151_ = _e573; break; } case 0: { - if (_e493.x > 1f) { - phi_4070_ = 0.9999999f; + if (_e490.x > 1f) { + phi_4536_ = 0.9999999f; } else { - phi_4070_ = select(_e493.x, 0.00000011920929f, (_e493.x < 0f)); + phi_4536_ = select(_e490.x, 0.00000011920929f, (_e490.x < 0f)); } - let _e550 = phi_4070_; - phi_1107_ = _e550; + let _e547 = phi_4536_; + phi_1151_ = _e547; break; } default: { - phi_1107_ = f32(); + phi_1151_ = f32(); break; } } - let _e592 = phi_1107_; - switch bitcast(_e541.member.member_1) { + let _e589 = phi_1151_; + switch bitcast(_e538.member.member_1) { case 1: { - let _e630 = abs(_e493.y); - let _e632 = (_e630 % 1f); - if (_e630 >= 1f) { - phi_4148_ = select(true, false, (_e632 == 0f)); + let _e627 = abs(_e490.y); + let _e629 = (_e627 % 1f); + if (_e627 >= 1f) { + phi_4614_ = select(true, false, (_e629 == 0f)); } else { - phi_4148_ = true; + phi_4614_ = true; } - let _e636 = phi_4148_; - let _e637 = select(1f, _e632, _e636); - if (select(-1f, 1f, (_e493.y >= 0f)) > 0f) { - phi_1128_ = _e637; + let _e633 = phi_4614_; + let _e634 = select(1f, _e629, _e633); + if (select(-1f, 1f, (_e490.y >= 0f)) > 0f) { + phi_1172_ = _e634; } else { - phi_1128_ = (1f - _e637); + phi_1172_ = (1f - _e634); } - let _e641 = phi_1128_; - phi_1165_ = _e641; + let _e638 = phi_1172_; + phi_1209_ = _e638; break; } case 2: { - let _e604 = abs(_e493.y); - let _e611 = ((select(select(u32(_e604), 0u, (_e604 < 0f)), 4294967295u, (_e604 > 4294967000f)) % 2u) == 0u); - let _e613 = (_e604 % 1f); - if (_e604 >= 1f) { - phi_4131_ = select(true, false, (_e613 == 0f)); + let _e601 = abs(_e490.y); + let _e608 = ((select(select(u32(_e601), 0u, (_e601 < 0f)), 4294967295u, (_e601 > 4294967000f)) % 2u) == 0u); + let _e610 = (_e601 % 1f); + if (_e601 >= 1f) { + phi_4597_ = select(true, false, (_e610 == 0f)); } else { - phi_4131_ = true; + phi_4597_ = true; } - let _e617 = phi_4131_; - let _e618 = select(1f, _e613, _e617); - if (select(-1f, 1f, (_e493.y >= 0f)) > 0f) { - if _e611 { - phi_1157_ = _e618; + let _e614 = phi_4597_; + let _e615 = select(1f, _e610, _e614); + if (select(-1f, 1f, (_e490.y >= 0f)) > 0f) { + if _e608 { + phi_1201_ = _e615; } else { - phi_1157_ = (1f - _e618); + phi_1201_ = (1f - _e615); } - let _e625 = phi_1157_; - phi_1163_ = _e625; + let _e622 = phi_1201_; + phi_1207_ = _e622; } else { - if _e611 { - phi_1162_ = (1f - _e618); + if _e608 { + phi_1206_ = (1f - _e615); } else { - phi_1162_ = _e618; + phi_1206_ = _e615; } - let _e622 = phi_1162_; - phi_1163_ = _e622; + let _e619 = phi_1206_; + phi_1207_ = _e619; } - let _e627 = phi_1163_; - phi_1165_ = _e627; + let _e624 = phi_1207_; + phi_1209_ = _e624; break; } case 0: { - if (_e493.y > 1f) { - phi_4118_ = 0.9999999f; + if (_e490.y > 1f) { + phi_4584_ = 0.9999999f; } else { - phi_4118_ = select(_e493.y, 0.00000011920929f, (_e493.y < 0f)); + phi_4584_ = select(_e490.y, 0.00000011920929f, (_e490.y < 0f)); } - let _e601 = phi_4118_; - phi_1165_ = _e601; + let _e598 = phi_4584_; + phi_1209_ = _e598; break; } default: { - phi_1165_ = f32(); + phi_1209_ = f32(); break; } } - let _e643 = phi_1165_; - let _e647 = (_e592 * f32(_e541.member_2.x)); - let _e656 = (_e643 * f32(_e541.member_2.y)); - let _e674 = vec3((f32((select(select(u32(_e647), 0u, (_e647 < 0f)), 4294967295u, (_e647 > 4294967000f)) + _e541.member_1.x)) / _e472), (f32((select(select(u32(_e656), 0u, (_e656 < 0f)), 4294967295u, (_e656 > 4294967000f)) + _e541.member_1.y)) / _e473), f32(_e541.member_3)); - let _e680 = textureSampleLevel(global_10, global_9, vec2(_e674.x, _e674.y), i32(_e674.z), 0f); - let _e683 = select(_e680, vec4(1f, 1f, 1f, 1f), vec4((_e292.member_6 == 4294967295u))); - let _e687 = select(_e117, _e116, vec2((_e292.member_12 == 0u))); - if _e298 { - phi_4184_ = (_e292.member_7 <= (_e113 - 8u)); + let _e640 = phi_1209_; + let _e644 = (_e589 * f32(_e538.member_2.x)); + let _e653 = (_e640 * f32(_e538.member_2.y)); + let _e671 = vec3((f32((select(select(u32(_e644), 0u, (_e644 < 0f)), 4294967295u, (_e644 > 4294967000f)) + _e538.member_1.x)) / _e469), (f32((select(select(u32(_e653), 0u, (_e653 < 0f)), 4294967295u, (_e653 > 4294967000f)) + _e538.member_1.y)) / _e470), f32(_e538.member_3)); + let _e677 = textureSampleLevel(global_11, global_10, vec2(_e671.x, _e671.y), i32(_e671.z), 0f); + let _e680 = select(_e677, vec4(1f, 1f, 1f, 1f), vec4((_e289.member_6 == 4294967295u))); + let _e684 = select(_e122, _e121, vec2((_e289.member_12 == 0u))); + if _e295 { + phi_4650_ = (_e289.member_7 <= (_e116 - 8u)); } else { - phi_4184_ = false; + phi_4650_ = false; } - let _e692 = phi_4184_; - if _e692 { - let _e695 = global.member[_e292.member_7]; - let _e699 = global.member[(_e292.member_7 + 1u)]; - let _e704 = global.member[(_e292.member_7 + 2u)]; - let _e708 = global.member[(_e292.member_7 + 3u)]; - let _e713 = global.member[(_e292.member_7 + 4u)]; - let _e717 = global.member[(_e292.member_7 + 5u)]; - let _e721 = global.member[(_e292.member_7 + 6u)]; - switch bitcast(_e721) { + let _e689 = phi_4650_; + if _e689 { + let _e692 = global.member[_e289.member_7]; + let _e696 = global.member[(_e289.member_7 + 1u)]; + let _e701 = global.member[(_e289.member_7 + 2u)]; + let _e705 = global.member[(_e289.member_7 + 3u)]; + let _e710 = global.member[(_e289.member_7 + 4u)]; + let _e714 = global.member[(_e289.member_7 + 5u)]; + let _e718 = global.member[(_e289.member_7 + 6u)]; + switch bitcast(_e718) { case 0: { - phi_1248_ = 0u; + phi_1292_ = 0u; break; } case 1: { - phi_1248_ = 1u; + phi_1292_ = 1u; break; } case 2: { - phi_1248_ = 2u; + phi_1292_ = 2u; break; } default: { - phi_1248_ = 0u; + phi_1292_ = 0u; break; } } - let _e724 = phi_1248_; - let _e728 = global.member[(_e292.member_7 + 7u)]; - switch bitcast(_e728) { + let _e721 = phi_1292_; + let _e725 = global.member[(_e289.member_7 + 7u)]; + switch bitcast(_e725) { case 0: { - phi_1257_ = 0u; + phi_1301_ = 0u; break; } case 1: { - phi_1257_ = 1u; + phi_1301_ = 1u; break; } case 2: { - phi_1257_ = 2u; + phi_1301_ = 2u; break; } default: { - phi_1257_ = 0u; + phi_1301_ = 0u; break; } } - let _e731 = phi_1257_; - phi_1270_ = type_32(type_24(_e724, _e731), vec2(_e695, _e699), vec2(_e704, _e708), _e713, _e717); + let _e728 = phi_1301_; + phi_1314_ = type_15(type_14(_e721, _e728), vec2(_e692, _e696), vec2(_e701, _e705), _e710, _e714); } else { - phi_1270_ = type_32(type_24(0u, 0u), vec2(0u, 0u), vec2(0u, 0u), 0u, 0u); + phi_1314_ = type_15(type_14(0u, 0u), vec2(0u, 0u), vec2(0u, 0u), 0u, 0u); } - let _e735 = phi_1270_; - switch bitcast(_e735.member.member) { + let _e732 = phi_1314_; + switch bitcast(_e732.member.member) { case 1: { - let _e773 = abs(_e687.x); - let _e775 = (_e773 % 1f); - if (_e773 >= 1f) { - phi_4235_ = select(true, false, (_e775 == 0f)); + let _e770 = abs(_e684.x); + let _e772 = (_e770 % 1f); + if (_e770 >= 1f) { + phi_4701_ = select(true, false, (_e772 == 0f)); } else { - phi_4235_ = true; + phi_4701_ = true; } - let _e779 = phi_4235_; - let _e780 = select(1f, _e775, _e779); - if (select(-1f, 1f, (_e687.x >= 0f)) > 0f) { - phi_1290_ = _e780; + let _e776 = phi_4701_; + let _e777 = select(1f, _e772, _e776); + if (select(-1f, 1f, (_e684.x >= 0f)) > 0f) { + phi_1334_ = _e777; } else { - phi_1290_ = (1f - _e780); + phi_1334_ = (1f - _e777); } - let _e784 = phi_1290_; - phi_1327_ = _e784; + let _e781 = phi_1334_; + phi_1371_ = _e781; break; } case 2: { - let _e747 = abs(_e687.x); - let _e754 = ((select(select(u32(_e747), 0u, (_e747 < 0f)), 4294967295u, (_e747 > 4294967000f)) % 2u) == 0u); - let _e756 = (_e747 % 1f); - if (_e747 >= 1f) { - phi_4218_ = select(true, false, (_e756 == 0f)); + let _e744 = abs(_e684.x); + let _e751 = ((select(select(u32(_e744), 0u, (_e744 < 0f)), 4294967295u, (_e744 > 4294967000f)) % 2u) == 0u); + let _e753 = (_e744 % 1f); + if (_e744 >= 1f) { + phi_4684_ = select(true, false, (_e753 == 0f)); } else { - phi_4218_ = true; + phi_4684_ = true; } - let _e760 = phi_4218_; - let _e761 = select(1f, _e756, _e760); - if (select(-1f, 1f, (_e687.x >= 0f)) > 0f) { - if _e754 { - phi_1319_ = _e761; + let _e757 = phi_4684_; + let _e758 = select(1f, _e753, _e757); + if (select(-1f, 1f, (_e684.x >= 0f)) > 0f) { + if _e751 { + phi_1363_ = _e758; } else { - phi_1319_ = (1f - _e761); + phi_1363_ = (1f - _e758); } - let _e768 = phi_1319_; - phi_1325_ = _e768; + let _e765 = phi_1363_; + phi_1369_ = _e765; } else { - if _e754 { - phi_1324_ = (1f - _e761); + if _e751 { + phi_1368_ = (1f - _e758); } else { - phi_1324_ = _e761; + phi_1368_ = _e758; } - let _e765 = phi_1324_; - phi_1325_ = _e765; + let _e762 = phi_1368_; + phi_1369_ = _e762; } - let _e770 = phi_1325_; - phi_1327_ = _e770; + let _e767 = phi_1369_; + phi_1371_ = _e767; break; } case 0: { - if (_e687.x > 1f) { - phi_4205_ = 0.9999999f; + if (_e684.x > 1f) { + phi_4671_ = 0.9999999f; } else { - phi_4205_ = select(_e687.x, 0.00000011920929f, (_e687.x < 0f)); + phi_4671_ = select(_e684.x, 0.00000011920929f, (_e684.x < 0f)); } - let _e744 = phi_4205_; - phi_1327_ = _e744; + let _e741 = phi_4671_; + phi_1371_ = _e741; break; } default: { - phi_1327_ = f32(); + phi_1371_ = f32(); break; } } - let _e786 = phi_1327_; - switch bitcast(_e735.member.member_1) { + let _e783 = phi_1371_; + switch bitcast(_e732.member.member_1) { case 1: { - let _e824 = abs(_e687.y); - let _e826 = (_e824 % 1f); - if (_e824 >= 1f) { - phi_4283_ = select(true, false, (_e826 == 0f)); + let _e821 = abs(_e684.y); + let _e823 = (_e821 % 1f); + if (_e821 >= 1f) { + phi_4749_ = select(true, false, (_e823 == 0f)); } else { - phi_4283_ = true; + phi_4749_ = true; } - let _e830 = phi_4283_; - let _e831 = select(1f, _e826, _e830); - if (select(-1f, 1f, (_e687.y >= 0f)) > 0f) { - phi_1348_ = _e831; + let _e827 = phi_4749_; + let _e828 = select(1f, _e823, _e827); + if (select(-1f, 1f, (_e684.y >= 0f)) > 0f) { + phi_1392_ = _e828; } else { - phi_1348_ = (1f - _e831); + phi_1392_ = (1f - _e828); } - let _e835 = phi_1348_; - phi_1385_ = _e835; + let _e832 = phi_1392_; + phi_1429_ = _e832; break; } case 2: { - let _e798 = abs(_e687.y); - let _e805 = ((select(select(u32(_e798), 0u, (_e798 < 0f)), 4294967295u, (_e798 > 4294967000f)) % 2u) == 0u); - let _e807 = (_e798 % 1f); - if (_e798 >= 1f) { - phi_4266_ = select(true, false, (_e807 == 0f)); + let _e795 = abs(_e684.y); + let _e802 = ((select(select(u32(_e795), 0u, (_e795 < 0f)), 4294967295u, (_e795 > 4294967000f)) % 2u) == 0u); + let _e804 = (_e795 % 1f); + if (_e795 >= 1f) { + phi_4732_ = select(true, false, (_e804 == 0f)); } else { - phi_4266_ = true; + phi_4732_ = true; } - let _e811 = phi_4266_; - let _e812 = select(1f, _e807, _e811); - if (select(-1f, 1f, (_e687.y >= 0f)) > 0f) { - if _e805 { - phi_1377_ = _e812; + let _e808 = phi_4732_; + let _e809 = select(1f, _e804, _e808); + if (select(-1f, 1f, (_e684.y >= 0f)) > 0f) { + if _e802 { + phi_1421_ = _e809; } else { - phi_1377_ = (1f - _e812); + phi_1421_ = (1f - _e809); } - let _e819 = phi_1377_; - phi_1383_ = _e819; + let _e816 = phi_1421_; + phi_1427_ = _e816; } else { - if _e805 { - phi_1382_ = (1f - _e812); + if _e802 { + phi_1426_ = (1f - _e809); } else { - phi_1382_ = _e812; + phi_1426_ = _e809; } - let _e816 = phi_1382_; - phi_1383_ = _e816; + let _e813 = phi_1426_; + phi_1427_ = _e813; } - let _e821 = phi_1383_; - phi_1385_ = _e821; + let _e818 = phi_1427_; + phi_1429_ = _e818; break; } case 0: { - if (_e687.y > 1f) { - phi_4253_ = 0.9999999f; + if (_e684.y > 1f) { + phi_4719_ = 0.9999999f; } else { - phi_4253_ = select(_e687.y, 0.00000011920929f, (_e687.y < 0f)); + phi_4719_ = select(_e684.y, 0.00000011920929f, (_e684.y < 0f)); } - let _e795 = phi_4253_; - phi_1385_ = _e795; + let _e792 = phi_4719_; + phi_1429_ = _e792; break; } default: { - phi_1385_ = f32(); + phi_1429_ = f32(); break; } } - let _e837 = phi_1385_; - let _e841 = (_e786 * f32(_e735.member_2.x)); - let _e850 = (_e837 * f32(_e735.member_2.y)); - let _e868 = vec3((f32((select(select(u32(_e841), 0u, (_e841 < 0f)), 4294967295u, (_e841 > 4294967000f)) + _e735.member_1.x)) / _e472), (f32((select(select(u32(_e850), 0u, (_e850 < 0f)), 4294967295u, (_e850 > 4294967000f)) + _e735.member_1.y)) / _e473), f32(_e735.member_3)); - let _e874 = textureSampleLevel(global_10, global_9, vec2(_e868.x, _e868.y), i32(_e868.z), 0f); - let _e875 = (_e292.member_7 == 4294967295u); - let _e877 = select(_e874, vec4(1f, 1f, 1f, 1f), vec4(_e875)); - let _e881 = select(_e117, _e116, vec2((_e292.member_13 == 0u))); - if _e298 { - phi_4319_ = (_e292.member_8 <= (_e113 - 8u)); + let _e834 = phi_1429_; + let _e838 = (_e783 * f32(_e732.member_2.x)); + let _e847 = (_e834 * f32(_e732.member_2.y)); + let _e865 = vec3((f32((select(select(u32(_e838), 0u, (_e838 < 0f)), 4294967295u, (_e838 > 4294967000f)) + _e732.member_1.x)) / _e469), (f32((select(select(u32(_e847), 0u, (_e847 < 0f)), 4294967295u, (_e847 > 4294967000f)) + _e732.member_1.y)) / _e470), f32(_e732.member_3)); + let _e871 = textureSampleLevel(global_11, global_10, vec2(_e865.x, _e865.y), i32(_e865.z), 0f); + let _e872 = (_e289.member_7 == 4294967295u); + let _e874 = select(_e871, vec4(1f, 1f, 1f, 1f), vec4(_e872)); + let _e878 = select(_e122, _e121, vec2((_e289.member_13 == 0u))); + if _e295 { + phi_4785_ = (_e289.member_8 <= (_e116 - 8u)); } else { - phi_4319_ = false; + phi_4785_ = false; } - let _e886 = phi_4319_; - if _e886 { - let _e889 = global.member[_e292.member_8]; - let _e893 = global.member[(_e292.member_8 + 1u)]; - let _e898 = global.member[(_e292.member_8 + 2u)]; - let _e902 = global.member[(_e292.member_8 + 3u)]; - let _e907 = global.member[(_e292.member_8 + 4u)]; - let _e911 = global.member[(_e292.member_8 + 5u)]; - let _e915 = global.member[(_e292.member_8 + 6u)]; - switch bitcast(_e915) { + let _e883 = phi_4785_; + if _e883 { + let _e886 = global.member[_e289.member_8]; + let _e890 = global.member[(_e289.member_8 + 1u)]; + let _e895 = global.member[(_e289.member_8 + 2u)]; + let _e899 = global.member[(_e289.member_8 + 3u)]; + let _e904 = global.member[(_e289.member_8 + 4u)]; + let _e908 = global.member[(_e289.member_8 + 5u)]; + let _e912 = global.member[(_e289.member_8 + 6u)]; + switch bitcast(_e912) { case 0: { - phi_1468_ = 0u; + phi_1512_ = 0u; break; } case 1: { - phi_1468_ = 1u; + phi_1512_ = 1u; break; } case 2: { - phi_1468_ = 2u; + phi_1512_ = 2u; break; } default: { - phi_1468_ = 0u; + phi_1512_ = 0u; break; } } - let _e918 = phi_1468_; - let _e922 = global.member[(_e292.member_8 + 7u)]; - switch bitcast(_e922) { + let _e915 = phi_1512_; + let _e919 = global.member[(_e289.member_8 + 7u)]; + switch bitcast(_e919) { case 0: { - phi_1477_ = 0u; + phi_1521_ = 0u; break; } case 1: { - phi_1477_ = 1u; + phi_1521_ = 1u; break; } case 2: { - phi_1477_ = 2u; + phi_1521_ = 2u; break; } default: { - phi_1477_ = 0u; + phi_1521_ = 0u; break; } } - let _e925 = phi_1477_; - phi_1490_ = type_32(type_24(_e918, _e925), vec2(_e889, _e893), vec2(_e898, _e902), _e907, _e911); + let _e922 = phi_1521_; + phi_1534_ = type_15(type_14(_e915, _e922), vec2(_e886, _e890), vec2(_e895, _e899), _e904, _e908); } else { - phi_1490_ = type_32(type_24(0u, 0u), vec2(0u, 0u), vec2(0u, 0u), 0u, 0u); + phi_1534_ = type_15(type_14(0u, 0u), vec2(0u, 0u), vec2(0u, 0u), 0u, 0u); } - let _e929 = phi_1490_; - switch bitcast(_e929.member.member) { + let _e926 = phi_1534_; + switch bitcast(_e926.member.member) { case 1: { - let _e967 = abs(_e881.x); - let _e969 = (_e967 % 1f); - if (_e967 >= 1f) { - phi_4370_ = select(true, false, (_e969 == 0f)); + let _e964 = abs(_e878.x); + let _e966 = (_e964 % 1f); + if (_e964 >= 1f) { + phi_4836_ = select(true, false, (_e966 == 0f)); } else { - phi_4370_ = true; + phi_4836_ = true; } - let _e973 = phi_4370_; - let _e974 = select(1f, _e969, _e973); - if (select(-1f, 1f, (_e881.x >= 0f)) > 0f) { - phi_1510_ = _e974; + let _e970 = phi_4836_; + let _e971 = select(1f, _e966, _e970); + if (select(-1f, 1f, (_e878.x >= 0f)) > 0f) { + phi_1554_ = _e971; } else { - phi_1510_ = (1f - _e974); + phi_1554_ = (1f - _e971); } - let _e978 = phi_1510_; - phi_1547_ = _e978; + let _e975 = phi_1554_; + phi_1591_ = _e975; break; } case 2: { - let _e941 = abs(_e881.x); - let _e948 = ((select(select(u32(_e941), 0u, (_e941 < 0f)), 4294967295u, (_e941 > 4294967000f)) % 2u) == 0u); - let _e950 = (_e941 % 1f); - if (_e941 >= 1f) { - phi_4353_ = select(true, false, (_e950 == 0f)); + let _e938 = abs(_e878.x); + let _e945 = ((select(select(u32(_e938), 0u, (_e938 < 0f)), 4294967295u, (_e938 > 4294967000f)) % 2u) == 0u); + let _e947 = (_e938 % 1f); + if (_e938 >= 1f) { + phi_4819_ = select(true, false, (_e947 == 0f)); } else { - phi_4353_ = true; + phi_4819_ = true; } - let _e954 = phi_4353_; - let _e955 = select(1f, _e950, _e954); - if (select(-1f, 1f, (_e881.x >= 0f)) > 0f) { - if _e948 { - phi_1539_ = _e955; + let _e951 = phi_4819_; + let _e952 = select(1f, _e947, _e951); + if (select(-1f, 1f, (_e878.x >= 0f)) > 0f) { + if _e945 { + phi_1583_ = _e952; } else { - phi_1539_ = (1f - _e955); + phi_1583_ = (1f - _e952); } - let _e962 = phi_1539_; - phi_1545_ = _e962; + let _e959 = phi_1583_; + phi_1589_ = _e959; } else { - if _e948 { - phi_1544_ = (1f - _e955); + if _e945 { + phi_1588_ = (1f - _e952); } else { - phi_1544_ = _e955; + phi_1588_ = _e952; } - let _e959 = phi_1544_; - phi_1545_ = _e959; + let _e956 = phi_1588_; + phi_1589_ = _e956; } - let _e964 = phi_1545_; - phi_1547_ = _e964; + let _e961 = phi_1589_; + phi_1591_ = _e961; break; } case 0: { - if (_e881.x > 1f) { - phi_4340_ = 0.9999999f; + if (_e878.x > 1f) { + phi_4806_ = 0.9999999f; } else { - phi_4340_ = select(_e881.x, 0.00000011920929f, (_e881.x < 0f)); + phi_4806_ = select(_e878.x, 0.00000011920929f, (_e878.x < 0f)); } - let _e938 = phi_4340_; - phi_1547_ = _e938; + let _e935 = phi_4806_; + phi_1591_ = _e935; break; } default: { - phi_1547_ = f32(); + phi_1591_ = f32(); break; } } - let _e980 = phi_1547_; - switch bitcast(_e929.member.member_1) { + let _e977 = phi_1591_; + switch bitcast(_e926.member.member_1) { case 1: { - let _e1018 = abs(_e881.y); - let _e1020 = (_e1018 % 1f); - if (_e1018 >= 1f) { - phi_4418_ = select(true, false, (_e1020 == 0f)); + let _e1015 = abs(_e878.y); + let _e1017 = (_e1015 % 1f); + if (_e1015 >= 1f) { + phi_4884_ = select(true, false, (_e1017 == 0f)); } else { - phi_4418_ = true; + phi_4884_ = true; } - let _e1024 = phi_4418_; - let _e1025 = select(1f, _e1020, _e1024); - if (select(-1f, 1f, (_e881.y >= 0f)) > 0f) { - phi_1568_ = _e1025; + let _e1021 = phi_4884_; + let _e1022 = select(1f, _e1017, _e1021); + if (select(-1f, 1f, (_e878.y >= 0f)) > 0f) { + phi_1612_ = _e1022; } else { - phi_1568_ = (1f - _e1025); + phi_1612_ = (1f - _e1022); } - let _e1029 = phi_1568_; - phi_1605_ = _e1029; + let _e1026 = phi_1612_; + phi_1649_ = _e1026; break; } case 2: { - let _e992 = abs(_e881.y); - let _e999 = ((select(select(u32(_e992), 0u, (_e992 < 0f)), 4294967295u, (_e992 > 4294967000f)) % 2u) == 0u); - let _e1001 = (_e992 % 1f); - if (_e992 >= 1f) { - phi_4401_ = select(true, false, (_e1001 == 0f)); + let _e989 = abs(_e878.y); + let _e996 = ((select(select(u32(_e989), 0u, (_e989 < 0f)), 4294967295u, (_e989 > 4294967000f)) % 2u) == 0u); + let _e998 = (_e989 % 1f); + if (_e989 >= 1f) { + phi_4867_ = select(true, false, (_e998 == 0f)); } else { - phi_4401_ = true; + phi_4867_ = true; } - let _e1005 = phi_4401_; - let _e1006 = select(1f, _e1001, _e1005); - if (select(-1f, 1f, (_e881.y >= 0f)) > 0f) { - if _e999 { - phi_1597_ = _e1006; + let _e1002 = phi_4867_; + let _e1003 = select(1f, _e998, _e1002); + if (select(-1f, 1f, (_e878.y >= 0f)) > 0f) { + if _e996 { + phi_1641_ = _e1003; } else { - phi_1597_ = (1f - _e1006); + phi_1641_ = (1f - _e1003); } - let _e1013 = phi_1597_; - phi_1603_ = _e1013; + let _e1010 = phi_1641_; + phi_1647_ = _e1010; } else { - if _e999 { - phi_1602_ = (1f - _e1006); + if _e996 { + phi_1646_ = (1f - _e1003); } else { - phi_1602_ = _e1006; + phi_1646_ = _e1003; } - let _e1010 = phi_1602_; - phi_1603_ = _e1010; + let _e1007 = phi_1646_; + phi_1647_ = _e1007; } - let _e1015 = phi_1603_; - phi_1605_ = _e1015; + let _e1012 = phi_1647_; + phi_1649_ = _e1012; break; } case 0: { - if (_e881.y > 1f) { - phi_4388_ = 0.9999999f; + if (_e878.y > 1f) { + phi_4854_ = 0.9999999f; } else { - phi_4388_ = select(_e881.y, 0.00000011920929f, (_e881.y < 0f)); + phi_4854_ = select(_e878.y, 0.00000011920929f, (_e878.y < 0f)); } - let _e989 = phi_4388_; - phi_1605_ = _e989; + let _e986 = phi_4854_; + phi_1649_ = _e986; break; } default: { - phi_1605_ = f32(); + phi_1649_ = f32(); break; } } - let _e1031 = phi_1605_; - let _e1035 = (_e980 * f32(_e929.member_2.x)); - let _e1044 = (_e1031 * f32(_e929.member_2.y)); - let _e1062 = vec3((f32((select(select(u32(_e1035), 0u, (_e1035 < 0f)), 4294967295u, (_e1035 > 4294967000f)) + _e929.member_1.x)) / _e472), (f32((select(select(u32(_e1044), 0u, (_e1044 < 0f)), 4294967295u, (_e1044 > 4294967000f)) + _e929.member_1.y)) / _e473), f32(_e929.member_3)); - let _e1068 = textureSampleLevel(global_10, global_9, vec2(_e1062.x, _e1062.y), i32(_e1062.z), 0f); - let _e1075 = select(_e117, _e116, vec2((_e292.member_14 == 0u))); - if _e298 { - phi_4454_ = (_e292.member_9 <= (_e113 - 8u)); + let _e1028 = phi_1649_; + let _e1032 = (_e977 * f32(_e926.member_2.x)); + let _e1041 = (_e1028 * f32(_e926.member_2.y)); + let _e1059 = vec3((f32((select(select(u32(_e1032), 0u, (_e1032 < 0f)), 4294967295u, (_e1032 > 4294967000f)) + _e926.member_1.x)) / _e469), (f32((select(select(u32(_e1041), 0u, (_e1041 < 0f)), 4294967295u, (_e1041 > 4294967000f)) + _e926.member_1.y)) / _e470), f32(_e926.member_3)); + let _e1065 = textureSampleLevel(global_11, global_10, vec2(_e1059.x, _e1059.y), i32(_e1059.z), 0f); + let _e1072 = select(_e122, _e121, vec2((_e289.member_14 == 0u))); + if _e295 { + phi_4920_ = (_e289.member_9 <= (_e116 - 8u)); } else { - phi_4454_ = false; + phi_4920_ = false; } - let _e1080 = phi_4454_; - if _e1080 { - let _e1083 = global.member[_e292.member_9]; - let _e1087 = global.member[(_e292.member_9 + 1u)]; - let _e1092 = global.member[(_e292.member_9 + 2u)]; - let _e1096 = global.member[(_e292.member_9 + 3u)]; - let _e1101 = global.member[(_e292.member_9 + 4u)]; - let _e1105 = global.member[(_e292.member_9 + 5u)]; - let _e1109 = global.member[(_e292.member_9 + 6u)]; - switch bitcast(_e1109) { + let _e1077 = phi_4920_; + if _e1077 { + let _e1080 = global.member[_e289.member_9]; + let _e1084 = global.member[(_e289.member_9 + 1u)]; + let _e1089 = global.member[(_e289.member_9 + 2u)]; + let _e1093 = global.member[(_e289.member_9 + 3u)]; + let _e1098 = global.member[(_e289.member_9 + 4u)]; + let _e1102 = global.member[(_e289.member_9 + 5u)]; + let _e1106 = global.member[(_e289.member_9 + 6u)]; + switch bitcast(_e1106) { case 0: { - phi_1688_ = 0u; + phi_1732_ = 0u; break; } case 1: { - phi_1688_ = 1u; + phi_1732_ = 1u; break; } case 2: { - phi_1688_ = 2u; + phi_1732_ = 2u; break; } default: { - phi_1688_ = 0u; + phi_1732_ = 0u; break; } } - let _e1112 = phi_1688_; - let _e1116 = global.member[(_e292.member_9 + 7u)]; - switch bitcast(_e1116) { + let _e1109 = phi_1732_; + let _e1113 = global.member[(_e289.member_9 + 7u)]; + switch bitcast(_e1113) { case 0: { - phi_1697_ = 0u; + phi_1741_ = 0u; break; } case 1: { - phi_1697_ = 1u; + phi_1741_ = 1u; break; } case 2: { - phi_1697_ = 2u; + phi_1741_ = 2u; break; } default: { - phi_1697_ = 0u; + phi_1741_ = 0u; break; } } - let _e1119 = phi_1697_; - phi_1710_ = type_32(type_24(_e1112, _e1119), vec2(_e1083, _e1087), vec2(_e1092, _e1096), _e1101, _e1105); + let _e1116 = phi_1741_; + phi_1754_ = type_15(type_14(_e1109, _e1116), vec2(_e1080, _e1084), vec2(_e1089, _e1093), _e1098, _e1102); } else { - phi_1710_ = type_32(type_24(0u, 0u), vec2(0u, 0u), vec2(0u, 0u), 0u, 0u); + phi_1754_ = type_15(type_14(0u, 0u), vec2(0u, 0u), vec2(0u, 0u), 0u, 0u); } - let _e1123 = phi_1710_; - switch bitcast(_e1123.member.member) { + let _e1120 = phi_1754_; + switch bitcast(_e1120.member.member) { case 1: { - let _e1161 = abs(_e1075.x); - let _e1163 = (_e1161 % 1f); - if (_e1161 >= 1f) { - phi_4505_ = select(true, false, (_e1163 == 0f)); + let _e1158 = abs(_e1072.x); + let _e1160 = (_e1158 % 1f); + if (_e1158 >= 1f) { + phi_4971_ = select(true, false, (_e1160 == 0f)); } else { - phi_4505_ = true; + phi_4971_ = true; } - let _e1167 = phi_4505_; - let _e1168 = select(1f, _e1163, _e1167); - if (select(-1f, 1f, (_e1075.x >= 0f)) > 0f) { - phi_1730_ = _e1168; + let _e1164 = phi_4971_; + let _e1165 = select(1f, _e1160, _e1164); + if (select(-1f, 1f, (_e1072.x >= 0f)) > 0f) { + phi_1774_ = _e1165; } else { - phi_1730_ = (1f - _e1168); + phi_1774_ = (1f - _e1165); } - let _e1172 = phi_1730_; - phi_1767_ = _e1172; + let _e1169 = phi_1774_; + phi_1811_ = _e1169; break; } case 2: { - let _e1135 = abs(_e1075.x); - let _e1142 = ((select(select(u32(_e1135), 0u, (_e1135 < 0f)), 4294967295u, (_e1135 > 4294967000f)) % 2u) == 0u); - let _e1144 = (_e1135 % 1f); - if (_e1135 >= 1f) { - phi_4488_ = select(true, false, (_e1144 == 0f)); + let _e1132 = abs(_e1072.x); + let _e1139 = ((select(select(u32(_e1132), 0u, (_e1132 < 0f)), 4294967295u, (_e1132 > 4294967000f)) % 2u) == 0u); + let _e1141 = (_e1132 % 1f); + if (_e1132 >= 1f) { + phi_4954_ = select(true, false, (_e1141 == 0f)); } else { - phi_4488_ = true; + phi_4954_ = true; } - let _e1148 = phi_4488_; - let _e1149 = select(1f, _e1144, _e1148); - if (select(-1f, 1f, (_e1075.x >= 0f)) > 0f) { - if _e1142 { - phi_1759_ = _e1149; + let _e1145 = phi_4954_; + let _e1146 = select(1f, _e1141, _e1145); + if (select(-1f, 1f, (_e1072.x >= 0f)) > 0f) { + if _e1139 { + phi_1803_ = _e1146; } else { - phi_1759_ = (1f - _e1149); + phi_1803_ = (1f - _e1146); } - let _e1156 = phi_1759_; - phi_1765_ = _e1156; + let _e1153 = phi_1803_; + phi_1809_ = _e1153; } else { - if _e1142 { - phi_1764_ = (1f - _e1149); + if _e1139 { + phi_1808_ = (1f - _e1146); } else { - phi_1764_ = _e1149; + phi_1808_ = _e1146; } - let _e1153 = phi_1764_; - phi_1765_ = _e1153; + let _e1150 = phi_1808_; + phi_1809_ = _e1150; } - let _e1158 = phi_1765_; - phi_1767_ = _e1158; + let _e1155 = phi_1809_; + phi_1811_ = _e1155; break; } case 0: { - if (_e1075.x > 1f) { - phi_4475_ = 0.9999999f; + if (_e1072.x > 1f) { + phi_4941_ = 0.9999999f; } else { - phi_4475_ = select(_e1075.x, 0.00000011920929f, (_e1075.x < 0f)); + phi_4941_ = select(_e1072.x, 0.00000011920929f, (_e1072.x < 0f)); } - let _e1132 = phi_4475_; - phi_1767_ = _e1132; + let _e1129 = phi_4941_; + phi_1811_ = _e1129; break; } default: { - phi_1767_ = f32(); + phi_1811_ = f32(); break; } } - let _e1174 = phi_1767_; - switch bitcast(_e1123.member.member_1) { + let _e1171 = phi_1811_; + switch bitcast(_e1120.member.member_1) { case 1: { - let _e1212 = abs(_e1075.y); - let _e1214 = (_e1212 % 1f); - if (_e1212 >= 1f) { - phi_4553_ = select(true, false, (_e1214 == 0f)); + let _e1209 = abs(_e1072.y); + let _e1211 = (_e1209 % 1f); + if (_e1209 >= 1f) { + phi_5019_ = select(true, false, (_e1211 == 0f)); } else { - phi_4553_ = true; + phi_5019_ = true; } - let _e1218 = phi_4553_; - let _e1219 = select(1f, _e1214, _e1218); - if (select(-1f, 1f, (_e1075.y >= 0f)) > 0f) { - phi_1788_ = _e1219; + let _e1215 = phi_5019_; + let _e1216 = select(1f, _e1211, _e1215); + if (select(-1f, 1f, (_e1072.y >= 0f)) > 0f) { + phi_1832_ = _e1216; } else { - phi_1788_ = (1f - _e1219); + phi_1832_ = (1f - _e1216); } - let _e1223 = phi_1788_; - phi_1825_ = _e1223; + let _e1220 = phi_1832_; + phi_1869_ = _e1220; break; } case 2: { - let _e1186 = abs(_e1075.y); - let _e1193 = ((select(select(u32(_e1186), 0u, (_e1186 < 0f)), 4294967295u, (_e1186 > 4294967000f)) % 2u) == 0u); - let _e1195 = (_e1186 % 1f); - if (_e1186 >= 1f) { - phi_4536_ = select(true, false, (_e1195 == 0f)); + let _e1183 = abs(_e1072.y); + let _e1190 = ((select(select(u32(_e1183), 0u, (_e1183 < 0f)), 4294967295u, (_e1183 > 4294967000f)) % 2u) == 0u); + let _e1192 = (_e1183 % 1f); + if (_e1183 >= 1f) { + phi_5002_ = select(true, false, (_e1192 == 0f)); } else { - phi_4536_ = true; + phi_5002_ = true; } - let _e1199 = phi_4536_; - let _e1200 = select(1f, _e1195, _e1199); - if (select(-1f, 1f, (_e1075.y >= 0f)) > 0f) { - if _e1193 { - phi_1817_ = _e1200; + let _e1196 = phi_5002_; + let _e1197 = select(1f, _e1192, _e1196); + if (select(-1f, 1f, (_e1072.y >= 0f)) > 0f) { + if _e1190 { + phi_1861_ = _e1197; } else { - phi_1817_ = (1f - _e1200); + phi_1861_ = (1f - _e1197); } - let _e1207 = phi_1817_; - phi_1823_ = _e1207; + let _e1204 = phi_1861_; + phi_1867_ = _e1204; } else { - if _e1193 { - phi_1822_ = (1f - _e1200); + if _e1190 { + phi_1866_ = (1f - _e1197); } else { - phi_1822_ = _e1200; + phi_1866_ = _e1197; } - let _e1204 = phi_1822_; - phi_1823_ = _e1204; + let _e1201 = phi_1866_; + phi_1867_ = _e1201; } - let _e1209 = phi_1823_; - phi_1825_ = _e1209; + let _e1206 = phi_1867_; + phi_1869_ = _e1206; break; } case 0: { - if (_e1075.y > 1f) { - phi_4523_ = 0.9999999f; + if (_e1072.y > 1f) { + phi_4989_ = 0.9999999f; } else { - phi_4523_ = select(_e1075.y, 0.00000011920929f, (_e1075.y < 0f)); + phi_4989_ = select(_e1072.y, 0.00000011920929f, (_e1072.y < 0f)); } - let _e1183 = phi_4523_; - phi_1825_ = _e1183; + let _e1180 = phi_4989_; + phi_1869_ = _e1180; break; } default: { - phi_1825_ = f32(); + phi_1869_ = f32(); break; } } - let _e1225 = phi_1825_; - let _e1229 = (_e1174 * f32(_e1123.member_2.x)); - let _e1238 = (_e1225 * f32(_e1123.member_2.y)); - let _e1256 = vec3((f32((select(select(u32(_e1229), 0u, (_e1229 < 0f)), 4294967295u, (_e1229 > 4294967000f)) + _e1123.member_1.x)) / _e472), (f32((select(select(u32(_e1238), 0u, (_e1238 < 0f)), 4294967295u, (_e1238 > 4294967000f)) + _e1123.member_1.y)) / _e473), f32(_e1123.member_3)); - let _e1262 = textureSampleLevel(global_10, global_9, vec2(_e1256.x, _e1256.y), i32(_e1256.z), 0f); - let _e1265 = select(_e1262, vec4(1f, 1f, 1f, 1f), vec4((_e292.member_9 == 4294967295u))); - if _e875 { - phi_1919_ = vec3(0f, 0f, 0f); - phi_1920_ = _e118; + let _e1222 = phi_1869_; + let _e1226 = (_e1171 * f32(_e1120.member_2.x)); + let _e1235 = (_e1222 * f32(_e1120.member_2.y)); + let _e1253 = vec3((f32((select(select(u32(_e1226), 0u, (_e1226 < 0f)), 4294967295u, (_e1226 > 4294967000f)) + _e1120.member_1.x)) / _e469), (f32((select(select(u32(_e1235), 0u, (_e1235 < 0f)), 4294967295u, (_e1235 > 4294967000f)) + _e1120.member_1.y)) / _e470), f32(_e1120.member_3)); + let _e1259 = textureSampleLevel(global_11, global_10, vec2(_e1253.x, _e1253.y), i32(_e1253.z), 0f); + let _e1262 = select(_e1259, vec4(1f, 1f, 1f, 1f), vec4((_e289.member_9 == 4294967295u))); + if _e872 { + phi_1963_ = vec3(0f, 0f, 0f); + phi_1964_ = _e123; } else { - let _e1269 = fma(_e877.x, 2f, -1f); - let _e1270 = fma(_e877.y, 2f, -1f); - let _e1271 = fma(_e877.z, 2f, -1f); - let _e1276 = sqrt(fma(_e1271, _e1271, fma(_e1269, _e1269, (_e1270 * _e1270)))); - if (_e1276 == 0f) { - phi_4611_ = vec3(0f, 0f, 0f); + let _e1266 = fma(_e874.x, 2f, -1f); + let _e1267 = fma(_e874.y, 2f, -1f); + let _e1268 = fma(_e874.z, 2f, -1f); + let _e1273 = sqrt(fma(_e1268, _e1268, fma(_e1266, _e1266, (_e1267 * _e1267)))); + if (_e1273 == 0f) { + phi_5077_ = vec3(0f, 0f, 0f); } else { - phi_4611_ = (vec3(_e1269, _e1270, _e1271) * (1f / _e1276)); + phi_5077_ = (vec3(_e1266, _e1267, _e1268) * (1f / _e1273)); } - let _e1281 = phi_4611_; - let _e1288 = sqrt(fma(_e119.z, _e119.z, fma(_e119.x, _e119.x, (_e119.y * _e119.y)))); - if (_e1288 == 0f) { - phi_4646_ = vec3(0f, 0f, 0f); + let _e1278 = phi_5077_; + let _e1285 = sqrt(fma(_e124.z, _e124.z, fma(_e124.x, _e124.x, (_e124.y * _e124.y)))); + if (_e1285 == 0f) { + phi_5112_ = vec3(0f, 0f, 0f); } else { - phi_4646_ = (_e119 * (1f / _e1288)); + phi_5112_ = (_e124 * (1f / _e1285)); } - let _e1293 = phi_4646_; - let _e1300 = sqrt(fma(_e120.z, _e120.z, fma(_e120.x, _e120.x, (_e120.y * _e120.y)))); - if (_e1300 == 0f) { - phi_4681_ = vec3(0f, 0f, 0f); + let _e1290 = phi_5112_; + let _e1297 = sqrt(fma(_e125.z, _e125.z, fma(_e125.x, _e125.x, (_e125.y * _e125.y)))); + if (_e1297 == 0f) { + phi_5147_ = vec3(0f, 0f, 0f); } else { - phi_4681_ = (_e120 * (1f / _e1300)); + phi_5147_ = (_e125 * (1f / _e1297)); } - let _e1305 = phi_4681_; - let _e1312 = sqrt(fma(_e118.z, _e118.z, fma(_e118.x, _e118.x, (_e118.y * _e118.y)))); - if (_e1312 == 0f) { - phi_4716_ = vec3(0f, 0f, 0f); + let _e1302 = phi_5147_; + let _e1309 = sqrt(fma(_e123.z, _e123.z, fma(_e123.x, _e123.x, (_e123.y * _e123.y)))); + if (_e1309 == 0f) { + phi_5182_ = vec3(0f, 0f, 0f); } else { - phi_4716_ = (_e118 * (1f / _e1312)); - } - let _e1317 = phi_4716_; - let _e1336 = fma(_e1317.x, _e1281.z, fma(_e1293.x, _e1281.x, (_e1305.x * _e1281.y))); - let _e1337 = fma(_e1317.y, _e1281.z, fma(_e1293.y, _e1281.x, (_e1305.y * _e1281.y))); - let _e1338 = fma(_e1317.z, _e1281.z, fma(_e1293.z, _e1281.x, (_e1305.z * _e1281.y))); - let _e1343 = sqrt(fma(_e1338, _e1338, fma(_e1336, _e1336, (_e1337 * _e1337)))); - if (_e1343 == 0f) { - phi_4751_ = vec3(0f, 0f, 0f); + phi_5182_ = (_e123 * (1f / _e1309)); + } + let _e1314 = phi_5182_; + let _e1333 = fma(_e1314.x, _e1278.z, fma(_e1290.x, _e1278.x, (_e1302.x * _e1278.y))); + let _e1334 = fma(_e1314.y, _e1278.z, fma(_e1290.y, _e1278.x, (_e1302.y * _e1278.y))); + let _e1335 = fma(_e1314.z, _e1278.z, fma(_e1290.z, _e1278.x, (_e1302.z * _e1278.y))); + let _e1340 = sqrt(fma(_e1335, _e1335, fma(_e1333, _e1333, (_e1334 * _e1334)))); + if (_e1340 == 0f) { + phi_5217_ = vec3(0f, 0f, 0f); } else { - phi_4751_ = (vec3(_e1336, _e1337, _e1338) * (1f / _e1343)); + phi_5217_ = (vec3(_e1333, _e1334, _e1335) * (1f / _e1340)); } - let _e1348 = phi_4751_; - phi_1919_ = _e1281; - phi_1920_ = _e1348; + let _e1345 = phi_5217_; + phi_1963_ = _e1278; + phi_1964_ = _e1345; } - let _e1350 = phi_1919_; - let _e1352 = phi_1920_; - let _e1356 = (_e489.x * _e292.member_2.x); - let _e1359 = (_e489.y * _e292.member_2.y); - let _e1362 = (_e489.z * _e292.member_2.z); - let _e1367 = (_e1356 * _e115.x); - let _e1369 = (_e1359 * _e115.y); - let _e1371 = (_e1362 * _e115.z); - let _e1376 = (_e683.y * _e292.member_4); - let _e1379 = (_e683.z * _e292.member_3); - let _e1383 = fma(_e292.member_16, (select(_e1068, vec4(1f, 1f, 1f, 1f), vec4((_e292.member_8 == 4294967295u))).x - 1f), 1f); - let _e1389 = (_e1265.x * _e292.member.x); - let _e1391 = (_e1265.y * _e292.member.y); - let _e1393 = (_e1265.z * _e292.member.z); - let _e1398 = textureSampleLevel(global_11, global_12, _e1352, 0f); - if (_e113 >= 86u) { - phi_4783_ = (_e125 <= (_e113 - 86u)); + let _e1347 = phi_1963_; + let _e1349 = phi_1964_; + let _e1353 = (_e486.x * _e289.member_2.x); + let _e1356 = (_e486.y * _e289.member_2.y); + let _e1359 = (_e486.z * _e289.member_2.z); + let _e1364 = (_e1353 * _e120.x); + let _e1366 = (_e1356 * _e120.y); + let _e1368 = (_e1359 * _e120.z); + let _e1373 = (_e680.y * _e289.member_4); + let _e1376 = (_e680.z * _e289.member_3); + let _e1380 = fma(_e289.member_16, (select(_e1065, vec4(1f, 1f, 1f, 1f), vec4((_e289.member_8 == 4294967295u))).x - 1f), 1f); + let _e1386 = (_e1262.x * _e289.member.x); + let _e1388 = (_e1262.y * _e289.member.y); + let _e1390 = (_e1262.z * _e289.member.z); + let _e1395 = textureSampleLevel(global_12, global_13, _e1349, 0f); + if (_e116 >= 86u) { + phi_5249_ = (_e130 <= (_e116 - 86u)); } else { - phi_4783_ = false; + phi_5249_ = false; } - let _e1406 = phi_4783_; - if _e1406 { - let _e1409 = global.member[_e125]; - let _e1414 = global.member[(_e125 + 1u)]; - let _e1419 = global.member[(_e125 + 2u)]; - let _e1424 = global.member[(_e125 + 3u)]; - let _e1430 = global.member[(_e125 + 4u)]; - let _e1435 = global.member[(_e125 + 5u)]; - let _e1440 = global.member[(_e125 + 6u)]; - let _e1445 = global.member[(_e125 + 7u)]; - let _e1451 = global.member[(_e125 + 8u)]; - let _e1456 = global.member[(_e125 + 9u)]; - let _e1461 = global.member[(_e125 + 10u)]; - let _e1466 = global.member[(_e125 + 11u)]; - let _e1472 = global.member[(_e125 + 12u)]; - let _e1477 = global.member[(_e125 + 13u)]; - let _e1482 = global.member[(_e125 + 14u)]; - let _e1487 = global.member[(_e125 + 15u)]; - let _e1494 = global.member[(_e125 + 16u)]; - let _e1499 = global.member[(_e125 + 17u)]; - let _e1504 = global.member[(_e125 + 18u)]; - let _e1509 = global.member[(_e125 + 19u)]; - let _e1515 = global.member[(_e125 + 20u)]; - let _e1520 = global.member[(_e125 + 21u)]; - let _e1525 = global.member[(_e125 + 22u)]; - let _e1530 = global.member[(_e125 + 23u)]; - let _e1536 = global.member[(_e125 + 24u)]; - let _e1541 = global.member[(_e125 + 25u)]; - let _e1546 = global.member[(_e125 + 26u)]; - let _e1551 = global.member[(_e125 + 27u)]; - let _e1557 = global.member[(_e125 + 28u)]; - let _e1562 = global.member[(_e125 + 29u)]; - let _e1567 = global.member[(_e125 + 30u)]; - let _e1572 = global.member[(_e125 + 31u)]; - let _e1579 = global.member[(_e125 + 32u)]; - let _e1584 = global.member[(_e125 + 33u)]; - let _e1589 = global.member[(_e125 + 34u)]; + let _e1403 = phi_5249_; + if _e1403 { + let _e1406 = global.member[_e130]; + let _e1411 = global.member[(_e130 + 1u)]; + let _e1416 = global.member[(_e130 + 2u)]; + let _e1421 = global.member[(_e130 + 3u)]; + let _e1427 = global.member[(_e130 + 4u)]; + let _e1432 = global.member[(_e130 + 5u)]; + let _e1437 = global.member[(_e130 + 6u)]; + let _e1442 = global.member[(_e130 + 7u)]; + let _e1448 = global.member[(_e130 + 8u)]; + let _e1453 = global.member[(_e130 + 9u)]; + let _e1458 = global.member[(_e130 + 10u)]; + let _e1463 = global.member[(_e130 + 11u)]; + let _e1469 = global.member[(_e130 + 12u)]; + let _e1474 = global.member[(_e130 + 13u)]; + let _e1479 = global.member[(_e130 + 14u)]; + let _e1484 = global.member[(_e130 + 15u)]; + let _e1491 = global.member[(_e130 + 16u)]; + let _e1496 = global.member[(_e130 + 17u)]; + let _e1501 = global.member[(_e130 + 18u)]; + let _e1506 = global.member[(_e130 + 19u)]; + let _e1512 = global.member[(_e130 + 20u)]; + let _e1517 = global.member[(_e130 + 21u)]; + let _e1522 = global.member[(_e130 + 22u)]; + let _e1527 = global.member[(_e130 + 23u)]; + let _e1533 = global.member[(_e130 + 24u)]; + let _e1538 = global.member[(_e130 + 25u)]; + let _e1543 = global.member[(_e130 + 26u)]; + let _e1548 = global.member[(_e130 + 27u)]; + let _e1554 = global.member[(_e130 + 28u)]; + let _e1559 = global.member[(_e130 + 29u)]; + let _e1564 = global.member[(_e130 + 30u)]; + let _e1569 = global.member[(_e130 + 31u)]; + let _e1576 = global.member[(_e130 + 32u)]; + let _e1581 = global.member[(_e130 + 33u)]; + let _e1586 = global.member[(_e130 + 34u)]; local_1 = array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); - phi_2127_ = type_24(0u, 6u); + phi_2171_ = type_14(0u, 6u); loop { - let _e1594 = phi_2127_; - if (_e1594.member < _e1594.member_1) { - phi_2128_ = type_24((_e1594.member + 1u), _e1594.member_1); - phi_2151_ = type_24(1u, _e1594.member); + let _e1591 = phi_2171_; + if (_e1591.member < _e1591.member_1) { + phi_2172_ = type_14((_e1591.member + 1u), _e1591.member_1); + phi_2195_ = type_14(1u, _e1591.member); } else { - phi_2128_ = _e1594; - phi_2151_ = type_24(0u, type_24().member_1); + phi_2172_ = _e1591; + phi_2195_ = type_14(0u, type_14().member_1); } - let _e1607 = phi_2128_; - let _e1609 = phi_2151_; - switch bitcast(_e1609.member) { + let _e1604 = phi_2172_; + let _e1606 = phi_2195_; + switch bitcast(_e1606.member) { case 0: { - phi_2178_ = false; + phi_2222_ = false; break; } case 1: { - let _e1614 = ((_e125 + 35u) + (_e1609.member_1 * 4u)); - let _e1617 = global.member[_e1614]; - let _e1622 = global.member[(_e1614 + 1u)]; - let _e1627 = global.member[(_e1614 + 2u)]; - let _e1632 = global.member[(_e1614 + 3u)]; - local_1[_e1609.member_1] = vec4(bitcast(_e1617), bitcast(_e1622), bitcast(_e1627), bitcast(_e1632)); - phi_2178_ = true; + let _e1611 = ((_e130 + 35u) + (_e1606.member_1 * 4u)); + let _e1614 = global.member[_e1611]; + let _e1619 = global.member[(_e1611 + 1u)]; + let _e1624 = global.member[(_e1611 + 2u)]; + let _e1629 = global.member[(_e1611 + 3u)]; + local_1[_e1606.member_1] = vec4(bitcast(_e1614), bitcast(_e1619), bitcast(_e1624), bitcast(_e1629)); + phi_2222_ = true; break; } default: { - phi_2178_ = bool(); + phi_2222_ = bool(); break; } } - let _e1637 = phi_2178_; + let _e1634 = phi_2222_; continue; continuing { - phi_2127_ = _e1607; - break if !(_e1637); + phi_2171_ = _e1604; + break if !(_e1634); } } - let _e1639 = local_1; + let _e1636 = local_1; local = array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); - phi_2184_ = type_24(0u, 8u); + phi_2228_ = type_14(0u, 8u); loop { - let _e1642 = phi_2184_; - if (_e1642.member < _e1642.member_1) { - phi_2185_ = type_24((_e1642.member + 1u), _e1642.member_1); - phi_2208_ = type_24(1u, _e1642.member); + let _e1639 = phi_2228_; + if (_e1639.member < _e1639.member_1) { + phi_2229_ = type_14((_e1639.member + 1u), _e1639.member_1); + phi_2252_ = type_14(1u, _e1639.member); } else { - phi_2185_ = _e1642; - phi_2208_ = type_24(0u, type_24().member_1); + phi_2229_ = _e1639; + phi_2252_ = type_14(0u, type_14().member_1); } - let _e1655 = phi_2185_; - let _e1657 = phi_2208_; - switch bitcast(_e1657.member) { + let _e1652 = phi_2229_; + let _e1654 = phi_2252_; + switch bitcast(_e1654.member) { case 0: { - phi_2231_ = false; + phi_2275_ = false; break; } case 1: { - let _e1662 = ((_e125 + 59u) + (_e1657.member_1 * 3u)); - let _e1665 = global.member[_e1662]; - let _e1670 = global.member[(_e1662 + 1u)]; - let _e1675 = global.member[(_e1662 + 2u)]; - local[_e1657.member_1] = vec3(bitcast(_e1665), bitcast(_e1670), bitcast(_e1675)); - phi_2231_ = true; + let _e1659 = ((_e130 + 59u) + (_e1654.member_1 * 3u)); + let _e1662 = global.member[_e1659]; + let _e1667 = global.member[(_e1659 + 1u)]; + let _e1672 = global.member[(_e1659 + 2u)]; + local[_e1654.member_1] = vec3(bitcast(_e1662), bitcast(_e1667), bitcast(_e1672)); + phi_2275_ = true; break; } default: { - phi_2231_ = bool(); + phi_2275_ = bool(); break; } } - let _e1680 = phi_2231_; + let _e1677 = phi_2275_; continue; continuing { - phi_2184_ = _e1655; - break if !(_e1680); + phi_2228_ = _e1652; + break if !(_e1677); } } - let _e1682 = local; - let _e1686 = global.member[(_e125 + 83u)]; - let _e1691 = global.member[(_e125 + 84u)]; - let _e1696 = global.member[(_e125 + 85u)]; - phi_2252_ = type_22(type_20(vec4(bitcast(_e1409), bitcast(_e1414), bitcast(_e1419), bitcast(_e1424)), vec4(bitcast(_e1430), bitcast(_e1435), bitcast(_e1440), bitcast(_e1445)), vec4(bitcast(_e1451), bitcast(_e1456), bitcast(_e1461), bitcast(_e1466)), vec4(bitcast(_e1472), bitcast(_e1477), bitcast(_e1482), bitcast(_e1487))), type_20(vec4(bitcast(_e1494), bitcast(_e1499), bitcast(_e1504), bitcast(_e1509)), vec4(bitcast(_e1515), bitcast(_e1520), bitcast(_e1525), bitcast(_e1530)), vec4(bitcast(_e1536), bitcast(_e1541), bitcast(_e1546), bitcast(_e1551)), vec4(bitcast(_e1557), bitcast(_e1562), bitcast(_e1567), bitcast(_e1572))), vec3(bitcast(_e1579), bitcast(_e1584), bitcast(_e1589)), type_21(_e1682, _e1639, vec3(bitcast(_e1686), bitcast(_e1691), bitcast(_e1696)))); + let _e1679 = local; + let _e1683 = global.member[(_e130 + 83u)]; + let _e1688 = global.member[(_e130 + 84u)]; + let _e1693 = global.member[(_e130 + 85u)]; + phi_2296_ = type_25(type_23(vec4(bitcast(_e1406), bitcast(_e1411), bitcast(_e1416), bitcast(_e1421)), vec4(bitcast(_e1427), bitcast(_e1432), bitcast(_e1437), bitcast(_e1442)), vec4(bitcast(_e1448), bitcast(_e1453), bitcast(_e1458), bitcast(_e1463)), vec4(bitcast(_e1469), bitcast(_e1474), bitcast(_e1479), bitcast(_e1484))), type_23(vec4(bitcast(_e1491), bitcast(_e1496), bitcast(_e1501), bitcast(_e1506)), vec4(bitcast(_e1512), bitcast(_e1517), bitcast(_e1522), bitcast(_e1527)), vec4(bitcast(_e1533), bitcast(_e1538), bitcast(_e1543), bitcast(_e1548)), vec4(bitcast(_e1554), bitcast(_e1559), bitcast(_e1564), bitcast(_e1569))), vec3(bitcast(_e1576), bitcast(_e1581), bitcast(_e1586)), type_24(_e1679, _e1636, vec3(bitcast(_e1683), bitcast(_e1688), bitcast(_e1693)))); } else { - phi_2252_ = type_22(type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_21(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); + phi_2296_ = type_25(type_23(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_23(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_24(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); } - let _e1702 = phi_2252_; - let _e1704 = (_e1702.member_2 - _e121); - let _e1711 = sqrt(fma(_e1704.z, _e1704.z, fma(_e1704.x, _e1704.x, (_e1704.y * _e1704.y)))); - let _e1712 = (_e1711 == 0f); - if _e1712 { - phi_4855_ = vec3(0f, 0f, 0f); + let _e1699 = phi_2296_; + let _e1701 = (_e1699.member_2 - _e126); + let _e1708 = sqrt(fma(_e1701.z, _e1701.z, fma(_e1701.x, _e1701.x, (_e1701.y * _e1701.y)))); + let _e1709 = (_e1708 == 0f); + if _e1709 { + phi_5321_ = vec3(0f, 0f, 0f); } else { - phi_4855_ = (_e1704 * (1f / _e1711)); + phi_5321_ = (_e1701 * (1f / _e1708)); } - let _e1716 = phi_4855_; - let _e1717 = -(_e1716); - let _e1724 = sqrt(fma(_e1352.z, _e1352.z, fma(_e1352.x, _e1352.x, (_e1352.y * _e1352.y)))); - let _e1725 = (_e1724 == 0f); - if _e1725 { - phi_4914_ = vec3(0f, 0f, 0f); + let _e1713 = phi_5321_; + let _e1714 = -(_e1713); + let _e1721 = sqrt(fma(_e1349.z, _e1349.z, fma(_e1349.x, _e1349.x, (_e1349.y * _e1349.y)))); + let _e1722 = (_e1721 == 0f); + if _e1722 { + phi_5380_ = vec3(0f, 0f, 0f); } else { - phi_4914_ = (_e1352 * (1f / _e1724)); + phi_5380_ = (_e1349 * (1f / _e1721)); } - let _e1729 = phi_4914_; - let _e1739 = (2f * fma(_e1729.z, _e1717.z, fma(_e1729.x, _e1717.x, (_e1729.y * _e1717.y)))); - let _e1746 = textureSampleLevel(global_13, global_14, (_e1717 - vec3((_e1739 * _e1729.x), (_e1739 * _e1729.y), (_e1739 * _e1729.z))), (_e1376 * 4f)); - if _e1712 { - phi_4988_ = vec3(0f, 0f, 0f); + let _e1726 = phi_5380_; + let _e1736 = (2f * fma(_e1726.z, _e1714.z, fma(_e1726.x, _e1714.x, (_e1726.y * _e1714.y)))); + let _e1743 = textureSampleLevel(global_14, global_15, (_e1714 - vec3((_e1736 * _e1726.x), (_e1736 * _e1726.y), (_e1736 * _e1726.z))), (_e1373 * 4f)); + if _e1709 { + phi_5454_ = vec3(0f, 0f, 0f); } else { - phi_4988_ = (_e1704 * (1f / _e1711)); + phi_5454_ = (_e1701 * (1f / _e1708)); } - let _e1753 = phi_4988_; - let _e1762 = textureSampleLevel(global_15, global_16, vec2(max(fma(_e1352.z, _e1753.z, fma(_e1352.x, _e1753.x, (_e1352.y * _e1753.y))), 0f), _e1376), 0f); - switch bitcast(_e147) { + let _e1750 = phi_5454_; + let _e1759 = textureSampleLevel(global_16, global_17, vec2(max(fma(_e1349.z, _e1750.z, fma(_e1349.x, _e1750.x, (_e1349.y * _e1750.y))), 0f), _e1373), 0f); + switch bitcast(_e152) { case 0: { - if _e292.member_15 { - if _e1725 { - phi_5381_ = vec3(0f, 0f, 0f); + if _e289.member_15 { + if _e1722 { + phi_5847_ = vec3(0f, 0f, 0f); } else { - phi_5381_ = (_e1352 * (1f / _e1724)); + phi_5847_ = (_e1349 * (1f / _e1721)); } - let _e1931 = phi_5381_; - if _e1712 { - phi_5416_ = vec3(0f, 0f, 0f); + let _e1928 = phi_5847_; + if _e1709 { + phi_5882_ = vec3(0f, 0f, 0f); } else { - phi_5416_ = (_e1704 * (1f / _e1711)); + phi_5882_ = (_e1701 * (1f / _e1708)); } - let _e1935 = phi_5416_; - phi_2292_ = type_24(0u, _e160); - phi_2295_ = vec3(0f, 0f, 0f); + let _e1932 = phi_5882_; + let _e1935 = global_1.member[0u]; + let _e1938 = global_1.member[1u]; + let _e1941 = global_1.member[2u]; + phi_2363_ = type_14(0u, _e1938); + phi_2366_ = vec3(0f, 0f, 0f); loop { - let _e1938 = phi_2292_; - let _e1940 = phi_2295_; - local_2 = _e1940; - local_3 = _e1940; - local_4 = _e1940; - if (_e1938.member < _e1938.member_1) { - phi_2293_ = type_24((_e1938.member + 1u), _e1938.member_1); - phi_2318_ = type_24(1u, _e1938.member); + let _e1944 = phi_2363_; + let _e1946 = phi_2366_; + local_2 = _e1946; + local_3 = _e1946; + local_4 = _e1946; + if (_e1944.member < _e1944.member_1) { + phi_2364_ = type_14((_e1944.member + 1u), _e1944.member_1); + phi_2389_ = type_14(1u, _e1944.member); } else { - phi_2293_ = _e1938; - phi_2318_ = type_24(0u, type_24().member_1); + phi_2364_ = _e1944; + phi_2389_ = type_14(0u, type_14().member_1); } - let _e1953 = phi_2293_; - let _e1955 = phi_2318_; - switch bitcast(_e1955.member) { + let _e1959 = phi_2364_; + let _e1961 = phi_2389_; + switch bitcast(_e1961.member) { case 0: { - phi_2296_ = vec3(); - phi_3189_ = false; + phi_2367_ = vec3(); + phi_3682_ = false; break; } case 1: { - if (_e1955.member_1 >= _e160) { - phi_5433_ = 4294967295u; + if (_e1961.member_1 >= _e1938) { + phi_5908_ = 4294967295u; } else { - phi_5433_ = (_e156 + _e1955.member_1); + phi_5908_ = (_e1935 + _e1961.member_1); } - let _e1962 = phi_5433_; - if (_e113 >= 1u) { - phi_5452_ = (_e1962 <= (_e113 - 1u)); + let _e1968 = phi_5908_; + if (_e118 >= 1u) { + phi_5927_ = (_e1968 <= (_e118 - 1u)); } else { - phi_5452_ = false; + phi_5927_ = false; } - let _e1967 = phi_5452_; - if _e1967 { - let _e1970 = global.member[_e1962]; - phi_2335_ = _e1970; + let _e1973 = phi_5927_; + if _e1973 { + let _e1976 = global_1.member[_e1968]; + phi_2406_ = _e1976; } else { - phi_2335_ = 4294967295u; + phi_2406_ = 4294967295u; } - let _e1972 = phi_2335_; - let _e1973 = (_e1972 == 4294967295u); - if _e1973 { - phi_3187_ = vec3(); + let _e1978 = phi_2406_; + let _e1979 = (_e1978 == 4294967295u); + if _e1979 { + phi_3680_ = vec3(); } else { - if (_e113 >= 3u) { - phi_5484_ = (_e1972 <= (_e113 - 3u)); + if (_e118 >= 4u) { + phi_5959_ = (_e1978 <= (_e118 - 4u)); } else { - phi_5484_ = false; + phi_5959_ = false; } - let _e1978 = phi_5484_; - if _e1978 { - let _e1981 = global.member[_e1972]; - switch bitcast(_e1981) { + let _e1984 = phi_5959_; + if _e1984 { + let _e1987 = global_1.member[_e1978]; + switch bitcast(_e1987) { case 0: { - phi_2352_ = 0u; + phi_2423_ = 0u; break; } case 1: { - phi_2352_ = 1u; + phi_2423_ = 1u; break; } case 2: { - phi_2352_ = 2u; + phi_2423_ = 2u; break; } default: { - phi_2352_ = 0u; + phi_2423_ = 0u; break; } } - let _e1984 = phi_2352_; - let _e1988 = global.member[(_e1972 + 1u)]; - let _e1992 = global.member[(_e1972 + 2u)]; - phi_2362_ = type_33(_e1984, _e1988, _e1992); + let _e1990 = phi_2423_; + let _e1994 = global_1.member[(_e1978 + 1u)]; + let _e1998 = global_1.member[(_e1978 + 2u)]; + let _e2002 = global_1.member[(_e1978 + 3u)]; + phi_2437_ = type_30(_e1990, _e1994, _e1998, _e2002); } else { - phi_2362_ = type_33(0u, 4294967295u, 4294967295u); + phi_2437_ = type_30(0u, 4294967295u, 4294967295u, 4294967295u); } - let _e1995 = phi_2362_; - if (_e113 >= 10u) { - phi_5514_ = (_e1995.member_2 <= (_e113 - 10u)); + let _e2005 = phi_2437_; + if (_e118 >= 10u) { + phi_5991_ = (_e2005.member_2 <= (_e118 - 10u)); } else { - phi_5514_ = false; + phi_5991_ = false; } - let _e2001 = phi_5514_; - if _e2001 { - let _e2004 = global.member[_e1995.member_2]; - let _e2009 = global.member[(_e1995.member_2 + 1u)]; - let _e2014 = global.member[(_e1995.member_2 + 2u)]; - let _e2020 = global.member[(_e1995.member_2 + 3u)]; - let _e2025 = global.member[(_e1995.member_2 + 4u)]; - let _e2030 = global.member[(_e1995.member_2 + 5u)]; - let _e2035 = global.member[(_e1995.member_2 + 6u)]; - let _e2041 = global.member[(_e1995.member_2 + 7u)]; - let _e2046 = global.member[(_e1995.member_2 + 8u)]; - let _e2051 = global.member[(_e1995.member_2 + 9u)]; - phi_2412_ = type_29(vec3(bitcast(_e2004), bitcast(_e2009), bitcast(_e2014)), vec4(bitcast(_e2020), bitcast(_e2025), bitcast(_e2030), bitcast(_e2035)), vec3(bitcast(_e2041), bitcast(_e2046), bitcast(_e2051))); + let _e2011 = phi_5991_; + if _e2011 { + let _e2014 = global_1.member[_e2005.member_2]; + let _e2019 = global_1.member[(_e2005.member_2 + 1u)]; + let _e2024 = global_1.member[(_e2005.member_2 + 2u)]; + let _e2030 = global_1.member[(_e2005.member_2 + 3u)]; + let _e2035 = global_1.member[(_e2005.member_2 + 4u)]; + let _e2040 = global_1.member[(_e2005.member_2 + 5u)]; + let _e2045 = global_1.member[(_e2005.member_2 + 6u)]; + let _e2051 = global_1.member[(_e2005.member_2 + 7u)]; + let _e2056 = global_1.member[(_e2005.member_2 + 8u)]; + let _e2061 = global_1.member[(_e2005.member_2 + 9u)]; + phi_2487_ = type_31(vec3(bitcast(_e2014), bitcast(_e2019), bitcast(_e2024)), vec4(bitcast(_e2030), bitcast(_e2035), bitcast(_e2040), bitcast(_e2045)), vec3(bitcast(_e2051), bitcast(_e2056), bitcast(_e2061))); } else { - phi_2412_ = type_29(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); + phi_2487_ = type_31(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); } - let _e2056 = phi_2412_; - let _e2064 = (_e2056.member_1.x + _e2056.member_1.x); - let _e2065 = (_e2056.member_1.y + _e2056.member_1.y); - let _e2066 = (_e2056.member_1.z + _e2056.member_1.z); - let _e2068 = (_e2056.member_1.z * _e2066); - let _e2069 = (_e2056.member_1.w * _e2064); - let _e2070 = (_e2056.member_1.w * _e2065); - let _e2071 = (_e2056.member_1.w * _e2066); - let _e2091 = (vec4((1f - fma(_e2056.member_1.y, _e2065, _e2068)), fma(_e2056.member_1.x, _e2065, _e2071), fma(_e2056.member_1.x, _e2066, -(_e2070)), 0f) * _e2056.member_2.x); - let _e2093 = (vec4(fma(_e2056.member_1.x, _e2065, -(_e2071)), (1f - fma(_e2056.member_1.x, _e2064, _e2068)), fma(_e2056.member_1.y, _e2066, _e2069), 0f) * _e2056.member_2.y); - let _e2095 = (vec4(fma(_e2056.member_1.x, _e2066, _e2070), fma(_e2056.member_1.y, _e2066, -(_e2069)), (1f - fma(_e2056.member_1.x, _e2064, (_e2056.member_1.y * _e2065))), 0f) * _e2056.member_2.z); - switch bitcast(_e1995.member) { + let _e2066 = phi_2487_; + let _e2074 = (_e2066.member_1.x + _e2066.member_1.x); + let _e2075 = (_e2066.member_1.y + _e2066.member_1.y); + let _e2076 = (_e2066.member_1.z + _e2066.member_1.z); + let _e2078 = (_e2066.member_1.z * _e2076); + let _e2079 = (_e2066.member_1.w * _e2074); + let _e2080 = (_e2066.member_1.w * _e2075); + let _e2081 = (_e2066.member_1.w * _e2076); + let _e2101 = (vec4((1f - fma(_e2066.member_1.y, _e2075, _e2078)), fma(_e2066.member_1.x, _e2075, _e2081), fma(_e2066.member_1.x, _e2076, -(_e2080)), 0f) * _e2066.member_2.x); + let _e2103 = (vec4(fma(_e2066.member_1.x, _e2075, -(_e2081)), (1f - fma(_e2066.member_1.x, _e2074, _e2078)), fma(_e2066.member_1.y, _e2076, _e2079), 0f) * _e2066.member_2.y); + let _e2105 = (vec4(fma(_e2066.member_1.x, _e2076, _e2080), fma(_e2066.member_1.y, _e2076, -(_e2079)), (1f - fma(_e2066.member_1.x, _e2074, (_e2066.member_1.y * _e2075))), 0f) * _e2066.member_2.z); + switch bitcast(_e2005.member) { case 0: { - if _e298 { - phi_5980_ = (_e1995.member_1 <= (_e113 - 8u)); + if (_e118 >= 8u) { + phi_6457_ = (_e2005.member_1 <= (_e118 - 8u)); + } else { + phi_6457_ = false; + } + let _e2603 = phi_6457_; + if _e2603 { + let _e2606 = global_1.member[_e2005.member_1]; + let _e2611 = global_1.member[(_e2005.member_1 + 1u)]; + let _e2616 = global_1.member[(_e2005.member_1 + 2u)]; + let _e2622 = global_1.member[(_e2005.member_1 + 3u)]; + let _e2627 = global_1.member[(_e2005.member_1 + 4u)]; + let _e2632 = global_1.member[(_e2005.member_1 + 5u)]; + let _e2637 = global_1.member[(_e2005.member_1 + 6u)]; + let _e2643 = global_1.member[(_e2005.member_1 + 7u)]; + phi_2535_ = type_34(vec3(bitcast(_e2606), bitcast(_e2611), bitcast(_e2616)), vec4(bitcast(_e2622), bitcast(_e2627), bitcast(_e2632), bitcast(_e2637)), bitcast(_e2643)); } else { - phi_5980_ = false; + phi_2535_ = type_34(vec3(0f, -1f, 0f), vec4(1f, 1f, 1f, 1f), 1f); } - let _e2591 = phi_5980_; - if _e2591 { - let _e2594 = global.member[_e1995.member_1]; - let _e2599 = global.member[(_e1995.member_1 + 1u)]; - let _e2604 = global.member[(_e1995.member_1 + 2u)]; - let _e2610 = global.member[(_e1995.member_1 + 3u)]; - let _e2615 = global.member[(_e1995.member_1 + 4u)]; - let _e2620 = global.member[(_e1995.member_1 + 5u)]; - let _e2625 = global.member[(_e1995.member_1 + 6u)]; - let _e2631 = global.member[(_e1995.member_1 + 7u)]; - phi_2460_ = type_34(vec3(bitcast(_e2594), bitcast(_e2599), bitcast(_e2604)), vec4(bitcast(_e2610), bitcast(_e2615), bitcast(_e2620), bitcast(_e2625)), bitcast(_e2631)); + let _e2647 = phi_2535_; + let _e2669 = fma(_e2105.x, _e2647.member.z, fma(_e2103.x, _e2647.member.y, (_e2101.x * _e2647.member.x))); + let _e2670 = fma(_e2105.y, _e2647.member.z, fma(_e2103.y, _e2647.member.y, (_e2101.y * _e2647.member.x))); + let _e2671 = fma(_e2105.z, _e2647.member.z, fma(_e2103.z, _e2647.member.y, (_e2101.z * _e2647.member.x))); + let _e2676 = sqrt(fma(_e2671, _e2671, fma(_e2669, _e2669, (_e2670 * _e2670)))); + if (_e2676 == 0f) { + phi_6504_ = vec3(0f, 0f, 0f); } else { - phi_2460_ = type_34(vec3(0f, -1f, 0f), vec4(1f, 1f, 1f, 1f), 1f); + phi_6504_ = (vec3(_e2669, _e2670, _e2671) * (1f / _e2676)); } - let _e2635 = phi_2460_; - let _e2657 = fma(_e2095.x, _e2635.member.z, fma(_e2093.x, _e2635.member.y, (_e2091.x * _e2635.member.x))); - let _e2658 = fma(_e2095.y, _e2635.member.z, fma(_e2093.y, _e2635.member.y, (_e2091.y * _e2635.member.x))); - let _e2659 = fma(_e2095.z, _e2635.member.z, fma(_e2093.z, _e2635.member.y, (_e2091.z * _e2635.member.x))); - let _e2664 = sqrt(fma(_e2659, _e2659, fma(_e2657, _e2657, (_e2658 * _e2658)))); - if (_e2664 == 0f) { - phi_6027_ = vec3(0f, 0f, 0f); + let _e2681 = phi_6504_; + let _e2683 = -(_e2681.x); + let _e2685 = -(_e2681.y); + let _e2687 = -(_e2681.z); + let _e2688 = -(_e2681); + let _e2690 = fma(-(_e680.z), _e289.member_3, 1f); + let _e2694 = fma(0.4f, _e2690, (_e1364 * _e1376)); + let _e2695 = fma(0.4f, _e2690, (_e1366 * _e1376)); + let _e2696 = fma(0.4f, _e2690, (_e1368 * _e1376)); + let _e2704 = (_e1932 + vec3(_e2683, _e2685, _e2687)); + let _e2711 = sqrt(fma(_e2704.z, _e2704.z, fma(_e2704.x, _e2704.x, (_e2704.y * _e2704.y)))); + if (_e2711 == 0f) { + phi_6539_ = vec3(0f, 0f, 0f); } else { - phi_6027_ = (vec3(_e2657, _e2658, _e2659) * (1f / _e2664)); + phi_6539_ = (_e2704 * (1f / _e2711)); } - let _e2669 = phi_6027_; - let _e2671 = -(_e2669.x); - let _e2673 = -(_e2669.y); - let _e2675 = -(_e2669.z); - let _e2676 = -(_e2669); - let _e2678 = fma(-(_e683.z), _e292.member_3, 1f); - let _e2682 = fma(0.4f, _e2678, (_e1367 * _e1379)); - let _e2683 = fma(0.4f, _e2678, (_e1369 * _e1379)); - let _e2684 = fma(0.4f, _e2678, (_e1371 * _e1379)); - let _e2692 = (_e1935 + vec3(_e2671, _e2673, _e2675)); - let _e2699 = sqrt(fma(_e2692.z, _e2692.z, fma(_e2692.x, _e2692.x, (_e2692.y * _e2692.y)))); - if (_e2699 == 0f) { - phi_6062_ = vec3(0f, 0f, 0f); + let _e2716 = phi_6539_; + let _e2717 = (_e1373 * _e1373); + let _e2728 = max(fma(_e1928.z, _e2716.z, fma(_e1928.x, _e2716.x, (_e1928.y * _e2716.y))), 0f); + let _e2741 = max(fma(_e1928.z, _e1932.z, fma(_e1928.x, _e1932.x, (_e1928.y * _e1932.y))), 0f); + let _e2747 = fma(_e1928.z, _e2688.z, fma(_e1928.x, _e2688.x, (_e1928.y * _e2688.y))); + let _e2748 = max(_e2747, 0f); + let _e2749 = fma(_e680.y, _e289.member_4, 1f); + let _e2750 = (_e2749 * _e2749); + let _e2751 = (_e2750 * 0.125f); + let _e2753 = fma(-(_e2750), 0.125f, 1f); + let _e2766 = (1f - max(fma(_e2716.z, _e1932.z, fma(_e2716.x, _e1932.x, (_e2716.y * _e1932.y))), 0f)); + let _e2768 = select(_e2766, 0f, (_e2766 < 0f)); + let _e2771 = pow(select(_e2768, 1f, (_e2768 > 1f)), 5f); + let _e2772 = fma((1f - _e2694), _e2771, _e2694); + let _e2773 = fma((1f - _e2695), _e2771, _e2695); + let _e2774 = fma((1f - _e2696), _e2771, _e2696); + let _e2781 = (((_e2717 * _e2717) / (pow(fma((_e2728 * _e2728), fma(_e2717, _e2717, -1f), 1f), 2f) * 3.1415927f)) * ((_e2741 / fma(_e2741, _e2753, _e2751)) * (_e2748 / fma(_e2748, _e2753, _e2751)))); + let _e2788 = max(fma(_e1928.z, _e2687, fma(_e1928.x, _e2683, (_e1928.y * _e2685))), 0f); + let _e2790 = fma((4f * _e2741), _e2788, 0.0001f); + if ((_e2005.member_3 == 4294967295u) != true) { + let _e2811 = global_1.member[_e2005.member_3]; + let _e2815 = global_1.member[(_e2005.member_3 + 1u)]; + let _e2819 = global_1.member[(_e2005.member_3 + 2u)]; + let _e2823 = global_1.member[(_e2005.member_3 + 3u)]; + let _e2827 = global_1.member[(_e2005.member_3 + 4u)]; + let _e2832 = global_1.member[(_e2005.member_3 + 5u)]; + let _e2838 = global_1.member[select(_e2819, 4294967295u, (0u >= _e2823))]; + let _e2841 = global_1.member[_e2838]; + let _e2845 = global_1.member[(_e2838 + 1u)]; + let _e2849 = global_1.member[(_e2838 + 2u)]; + let _e2853 = global_1.member[(_e2838 + 3u)]; + let _e2857 = global_1.member[(_e2838 + 4u)]; + let _e2861 = global_1.member[(_e2838 + 6u)]; + switch bitcast(_e2861) { + case 0: { + phi_2772_ = 0u; + break; + } + case 1: { + phi_2772_ = 1u; + break; + } + case 2: { + phi_2772_ = 2u; + break; + } + default: { + phi_2772_ = 0u; + break; + } + } + let _e2864 = phi_2772_; + let _e2868 = global_1.member[(_e2838 + 7u)]; + switch bitcast(_e2868) { + case 0: { + phi_2781_ = 0u; + break; + } + case 1: { + phi_2781_ = 1u; + break; + } + case 2: { + phi_2781_ = 2u; + break; + } + default: { + phi_2781_ = 0u; + break; + } + } + let _e2871 = phi_2781_; + let _e2874 = global_1.member[_e1941]; + let _e2878 = global_1.member[(_e1941 + 1u)]; + let _e2880 = select(_e2811, 4294967295u, (0u >= _e2815)); + let _e2883 = global_1.member[_e2880]; + let _e2888 = global_1.member[(_e2880 + 1u)]; + let _e2893 = global_1.member[(_e2880 + 2u)]; + let _e2898 = global_1.member[(_e2880 + 3u)]; + let _e2903 = global_1.member[(_e2880 + 4u)]; + let _e2908 = global_1.member[(_e2880 + 5u)]; + let _e2913 = global_1.member[(_e2880 + 6u)]; + let _e2918 = global_1.member[(_e2880 + 7u)]; + let _e2923 = global_1.member[(_e2880 + 8u)]; + let _e2928 = global_1.member[(_e2880 + 9u)]; + let _e2933 = global_1.member[(_e2880 + 10u)]; + let _e2938 = global_1.member[(_e2880 + 11u)]; + let _e2943 = global_1.member[(_e2880 + 12u)]; + let _e2948 = global_1.member[(_e2880 + 13u)]; + let _e2953 = global_1.member[(_e2880 + 14u)]; + let _e2958 = global_1.member[(_e2880 + 15u)]; + let _e2978 = (bitcast(_e2958) + fma(bitcast(_e2938), _e126.z, fma(bitcast(_e2918), _e126.y, (bitcast(_e2898) * _e126.x)))); + let _e2984 = ((((bitcast(_e2943) + fma(bitcast(_e2923), _e126.z, fma(bitcast(_e2903), _e126.y, (bitcast(_e2883) * _e126.x)))) / _e2978) + 1f) * 0.5f); + let _e2985 = (fma(((bitcast(_e2948) + fma(bitcast(_e2928), _e126.z, fma(bitcast(_e2908), _e126.y, (bitcast(_e2888) * _e126.x)))) / _e2978), -1f, 1f) * 0.5f); + switch bitcast(_e2864) { + case 1: { + let _e3020 = abs(_e2984); + let _e3022 = (_e3020 % 1f); + if (_e3020 >= 1f) { + phi_6675_ = select(true, false, (_e3022 == 0f)); + } else { + phi_6675_ = true; + } + let _e3026 = phi_6675_; + let _e3027 = select(1f, _e3022, _e3026); + if (select(-1f, 1f, (_e2984 >= 0f)) > 0f) { + phi_2953_ = _e3027; + } else { + phi_2953_ = (1f - _e3027); + } + let _e3031 = phi_2953_; + phi_2990_ = _e3031; + break; + } + case 2: { + let _e2994 = abs(_e2984); + let _e3001 = ((select(select(u32(_e2994), 0u, (_e2994 < 0f)), 4294967295u, (_e2994 > 4294967000f)) % 2u) == 0u); + let _e3003 = (_e2994 % 1f); + if (_e2994 >= 1f) { + phi_6658_ = select(true, false, (_e3003 == 0f)); + } else { + phi_6658_ = true; + } + let _e3007 = phi_6658_; + let _e3008 = select(1f, _e3003, _e3007); + if (select(-1f, 1f, (_e2984 >= 0f)) > 0f) { + if _e3001 { + phi_2982_ = _e3008; + } else { + phi_2982_ = (1f - _e3008); + } + let _e3015 = phi_2982_; + phi_2988_ = _e3015; + } else { + if _e3001 { + phi_2987_ = (1f - _e3008); + } else { + phi_2987_ = _e3008; + } + let _e3012 = phi_2987_; + phi_2988_ = _e3012; + } + let _e3017 = phi_2988_; + phi_2990_ = _e3017; + break; + } + case 0: { + if (_e2984 > 1f) { + phi_6645_ = 0.9999999f; + } else { + phi_6645_ = select(_e2984, 0.00000011920929f, (_e2984 < 0f)); + } + let _e2991 = phi_6645_; + phi_2990_ = _e2991; + break; + } + default: { + phi_2990_ = f32(); + break; + } + } + let _e3033 = phi_2990_; + switch bitcast(_e2871) { + case 1: { + let _e3068 = abs(_e2985); + let _e3070 = (_e3068 % 1f); + if (_e3068 >= 1f) { + phi_6723_ = select(true, false, (_e3070 == 0f)); + } else { + phi_6723_ = true; + } + let _e3074 = phi_6723_; + let _e3075 = select(1f, _e3070, _e3074); + if (select(-1f, 1f, (_e2985 >= 0f)) > 0f) { + phi_3009_ = _e3075; + } else { + phi_3009_ = (1f - _e3075); + } + let _e3079 = phi_3009_; + phi_3046_ = _e3079; + break; + } + case 2: { + let _e3042 = abs(_e2985); + let _e3049 = ((select(select(u32(_e3042), 0u, (_e3042 < 0f)), 4294967295u, (_e3042 > 4294967000f)) % 2u) == 0u); + let _e3051 = (_e3042 % 1f); + if (_e3042 >= 1f) { + phi_6706_ = select(true, false, (_e3051 == 0f)); + } else { + phi_6706_ = true; + } + let _e3055 = phi_6706_; + let _e3056 = select(1f, _e3051, _e3055); + if (select(-1f, 1f, (_e2985 >= 0f)) > 0f) { + if _e3049 { + phi_3038_ = _e3056; + } else { + phi_3038_ = (1f - _e3056); + } + let _e3063 = phi_3038_; + phi_3044_ = _e3063; + } else { + if _e3049 { + phi_3043_ = (1f - _e3056); + } else { + phi_3043_ = _e3056; + } + let _e3060 = phi_3043_; + phi_3044_ = _e3060; + } + let _e3065 = phi_3044_; + phi_3046_ = _e3065; + break; + } + case 0: { + if (_e2985 > 1f) { + phi_6693_ = 0.9999999f; + } else { + phi_6693_ = select(_e2985, 0.00000011920929f, (_e2985 < 0f)); + } + let _e3039 = phi_6693_; + phi_3046_ = _e3039; + break; + } + default: { + phi_3046_ = f32(); + break; + } + } + let _e3081 = phi_3046_; + let _e3083 = (_e3033 * f32(_e2849)); + let _e3090 = (_e3081 * f32(_e2853)); + let _e3105 = vec3((f32((select(select(u32(_e3083), 0u, (_e3083 < 0f)), 4294967295u, (_e3083 > 4294967000f)) + _e2841)) / f32(_e2874)), (f32((select(select(u32(_e3090), 0u, (_e3090 < 0f)), 4294967295u, (_e3090 > 4294967000f)) + _e2845)) / f32(_e2878)), f32(_e2857)); + let _e3111 = textureSampleLevel(global_19, global_18, vec2(_e3105.x, _e3105.y), i32(_e3105.z), 0f); + phi_3106_ = select(0f, 1f, ((((bitcast(_e2953) + fma(bitcast(_e2933), _e126.z, fma(bitcast(_e2913), _e126.y, (bitcast(_e2893) * _e126.x)))) / _e2978) - max((bitcast(_e2832) * (1f - _e2747)), bitcast(_e2827))) > _e3111.x)); } else { - phi_6062_ = (_e2692 * (1f / _e2699)); + phi_3106_ = 0f; } - let _e2704 = phi_6062_; - let _e2705 = (_e1376 * _e1376); - let _e2716 = max(fma(_e1931.z, _e2704.z, fma(_e1931.x, _e2704.x, (_e1931.y * _e2704.y))), 0f); - let _e2729 = max(fma(_e1931.z, _e1935.z, fma(_e1931.x, _e1935.x, (_e1931.y * _e1935.y))), 0f); - let _e2736 = max(fma(_e1931.z, _e2676.z, fma(_e1931.x, _e2676.x, (_e1931.y * _e2676.y))), 0f); - let _e2737 = fma(_e683.y, _e292.member_4, 1f); - let _e2738 = (_e2737 * _e2737); - let _e2739 = (_e2738 * 0.125f); - let _e2741 = fma(-(_e2738), 0.125f, 1f); - let _e2754 = (1f - max(fma(_e2704.z, _e1935.z, fma(_e2704.x, _e1935.x, (_e2704.y * _e1935.y))), 0f)); - let _e2756 = select(_e2754, 0f, (_e2754 < 0f)); - let _e2759 = pow(select(_e2756, 1f, (_e2756 > 1f)), 5f); - let _e2760 = fma((1f - _e2682), _e2759, _e2682); - let _e2761 = fma((1f - _e2683), _e2759, _e2683); - let _e2762 = fma((1f - _e2684), _e2759, _e2684); - let _e2769 = (((_e2705 * _e2705) / (pow(fma((_e2716 * _e2716), fma(_e2705, _e2705, -1f), 1f), 2f) * 3.1415927f)) * ((_e2729 / fma(_e2729, _e2741, _e2739)) * (_e2736 / fma(_e2736, _e2741, _e2739)))); - let _e2776 = max(fma(_e1931.z, _e2675, fma(_e1931.x, _e2671, (_e1931.y * _e2673))), 0f); - let _e2778 = fma((4f * _e2729), _e2776, 0.0001f); - phi_3177_ = vec3(fma((fma((((1f - _e2760) * _e2678) * _e1367), 0.31830987f, ((_e2769 * _e2760) / _e2778)) * (_e2635.member_1.x * _e2635.member_2)), _e2776, _e1940.x), fma((fma((((1f - _e2761) * _e2678) * _e1369), 0.31830987f, ((_e2769 * _e2761) / _e2778)) * (_e2635.member_1.y * _e2635.member_2)), _e2776, _e1940.y), fma((fma((((1f - _e2762) * _e2678) * _e1371), 0.31830987f, ((_e2769 * _e2762) / _e2778)) * (_e2635.member_1.z * _e2635.member_2)), _e2776, _e1940.z)); - phi_3178_ = true; + let _e3120 = phi_3106_; + let _e3121 = (1f - _e3120); + phi_3670_ = vec3(fma(((fma((((1f - _e2772) * _e2690) * _e1364), 0.31830987f, ((_e2781 * _e2772) / _e2790)) * (_e2647.member_1.x * _e2647.member_2)) * _e2788), _e3121, _e1946.x), fma(((fma((((1f - _e2773) * _e2690) * _e1366), 0.31830987f, ((_e2781 * _e2773) / _e2790)) * (_e2647.member_1.y * _e2647.member_2)) * _e2788), _e3121, _e1946.y), fma(((fma((((1f - _e2774) * _e2690) * _e1368), 0.31830987f, ((_e2781 * _e2774) / _e2790)) * (_e2647.member_1.z * _e2647.member_2)) * _e2788), _e3121, _e1946.z)); + phi_3671_ = true; break; } case 1: { - if _e298 { - phi_5806_ = (_e1995.member_1 <= (_e113 - 8u)); + if (_e118 >= 8u) { + phi_6283_ = (_e2005.member_1 <= (_e118 - 8u)); } else { - phi_5806_ = false; + phi_6283_ = false; } - let _e2380 = phi_5806_; - if _e2380 { - let _e2383 = global.member[_e1995.member_1]; - let _e2388 = global.member[(_e1995.member_1 + 1u)]; - let _e2393 = global.member[(_e1995.member_1 + 2u)]; - let _e2399 = global.member[(_e1995.member_1 + 3u)]; - let _e2404 = global.member[(_e1995.member_1 + 4u)]; - let _e2409 = global.member[(_e1995.member_1 + 5u)]; - let _e2414 = global.member[(_e1995.member_1 + 6u)]; - let _e2420 = global.member[(_e1995.member_1 + 7u)]; - phi_2667_ = type_34(vec3(bitcast(_e2383), bitcast(_e2388), bitcast(_e2393)), vec4(bitcast(_e2399), bitcast(_e2404), bitcast(_e2409), bitcast(_e2414)), bitcast(_e2420)); + let _e2391 = phi_6283_; + if _e2391 { + let _e2394 = global_1.member[_e2005.member_1]; + let _e2399 = global_1.member[(_e2005.member_1 + 1u)]; + let _e2404 = global_1.member[(_e2005.member_1 + 2u)]; + let _e2410 = global_1.member[(_e2005.member_1 + 3u)]; + let _e2415 = global_1.member[(_e2005.member_1 + 4u)]; + let _e2420 = global_1.member[(_e2005.member_1 + 5u)]; + let _e2425 = global_1.member[(_e2005.member_1 + 6u)]; + let _e2431 = global_1.member[(_e2005.member_1 + 7u)]; + phi_3160_ = type_34(vec3(bitcast(_e2394), bitcast(_e2399), bitcast(_e2404)), vec4(bitcast(_e2410), bitcast(_e2415), bitcast(_e2420), bitcast(_e2425)), bitcast(_e2431)); } else { - phi_2667_ = type_34(vec3(0f, 0f, 0f), vec4(1f, 1f, 1f, 1f), 1f); + phi_3160_ = type_34(vec3(0f, 0f, 0f), vec4(1f, 1f, 1f, 1f), 1f); } - let _e2424 = phi_2667_; - let _e2453 = (vec3((_e2056.member.x + fma(_e2095.x, _e2424.member.z, fma(_e2093.x, _e2424.member.y, (_e2091.x * _e2424.member.x)))), (_e2056.member.y + fma(_e2095.y, _e2424.member.z, fma(_e2093.y, _e2424.member.y, (_e2091.y * _e2424.member.x)))), (_e2056.member.z + fma(_e2095.z, _e2424.member.z, fma(_e2093.z, _e2424.member.y, (_e2091.z * _e2424.member.x))))) - _e121); - let _e2460 = sqrt(fma(_e2453.z, _e2453.z, fma(_e2453.x, _e2453.x, (_e2453.y * _e2453.y)))); - let _e2461 = (_e2460 == 0f); - if _e2461 { - phi_2857_ = vec3(); + let _e2435 = phi_3160_; + let _e2464 = (vec3((_e2066.member.x + fma(_e2105.x, _e2435.member.z, fma(_e2103.x, _e2435.member.y, (_e2101.x * _e2435.member.x)))), (_e2066.member.y + fma(_e2105.y, _e2435.member.z, fma(_e2103.y, _e2435.member.y, (_e2101.y * _e2435.member.x)))), (_e2066.member.z + fma(_e2105.z, _e2435.member.z, fma(_e2103.z, _e2435.member.y, (_e2101.z * _e2435.member.x))))) - _e126); + let _e2471 = sqrt(fma(_e2464.z, _e2464.z, fma(_e2464.x, _e2464.x, (_e2464.y * _e2464.y)))); + let _e2472 = (_e2471 == 0f); + if _e2472 { + phi_3350_ = vec3(); } else { - if _e2461 { - phi_5853_ = vec3(0f, 0f, 0f); + if _e2472 { + phi_6330_ = vec3(0f, 0f, 0f); } else { - phi_5853_ = (_e2453 * (1f / _e2460)); + phi_6330_ = (_e2464 * (1f / _e2471)); } - let _e2465 = phi_5853_; - let _e2467 = (_e2424.member_2 / (_e2460 * _e2460)); - let _e2469 = fma(-(_e683.z), _e292.member_3, 1f); - let _e2473 = fma(0.4f, _e2469, (_e1367 * _e1379)); - let _e2474 = fma(0.4f, _e2469, (_e1369 * _e1379)); - let _e2475 = fma(0.4f, _e2469, (_e1371 * _e1379)); - let _e2482 = (_e1935 + _e2465); - let _e2489 = sqrt(fma(_e2482.z, _e2482.z, fma(_e2482.x, _e2482.x, (_e2482.y * _e2482.y)))); - if (_e2489 == 0f) { - phi_5888_ = vec3(0f, 0f, 0f); + let _e2476 = phi_6330_; + let _e2478 = (_e2435.member_2 / (_e2471 * _e2471)); + let _e2480 = fma(-(_e680.z), _e289.member_3, 1f); + let _e2484 = fma(0.4f, _e2480, (_e1364 * _e1376)); + let _e2485 = fma(0.4f, _e2480, (_e1366 * _e1376)); + let _e2486 = fma(0.4f, _e2480, (_e1368 * _e1376)); + let _e2493 = (_e1932 + _e2476); + let _e2500 = sqrt(fma(_e2493.z, _e2493.z, fma(_e2493.x, _e2493.x, (_e2493.y * _e2493.y)))); + if (_e2500 == 0f) { + phi_6365_ = vec3(0f, 0f, 0f); } else { - phi_5888_ = (_e2482 * (1f / _e2489)); + phi_6365_ = (_e2493 * (1f / _e2500)); } - let _e2494 = phi_5888_; - let _e2495 = (_e1376 * _e1376); - let _e2506 = max(fma(_e1931.z, _e2494.z, fma(_e1931.x, _e2494.x, (_e1931.y * _e2494.y))), 0f); - let _e2519 = max(fma(_e1931.z, _e1935.z, fma(_e1931.x, _e1935.x, (_e1931.y * _e1935.y))), 0f); - let _e2526 = max(fma(_e1931.z, _e2465.z, fma(_e1931.x, _e2465.x, (_e1931.y * _e2465.y))), 0f); - let _e2527 = fma(_e683.y, _e292.member_4, 1f); - let _e2528 = (_e2527 * _e2527); - let _e2529 = (_e2528 * 0.125f); - let _e2531 = fma(-(_e2528), 0.125f, 1f); - let _e2544 = (1f - max(fma(_e2494.z, _e1935.z, fma(_e2494.x, _e1935.x, (_e2494.y * _e1935.y))), 0f)); - let _e2546 = select(_e2544, 0f, (_e2544 < 0f)); - let _e2549 = pow(select(_e2546, 1f, (_e2546 > 1f)), 5f); - let _e2550 = fma((1f - _e2473), _e2549, _e2473); - let _e2551 = fma((1f - _e2474), _e2549, _e2474); - let _e2552 = fma((1f - _e2475), _e2549, _e2475); - let _e2559 = (((_e2495 * _e2495) / (pow(fma((_e2506 * _e2506), fma(_e2495, _e2495, -1f), 1f), 2f) * 3.1415927f)) * ((_e2519 / fma(_e2519, _e2531, _e2529)) * (_e2526 / fma(_e2526, _e2531, _e2529)))); - let _e2564 = fma((4f * _e2519), _e2526, 0.0001f); - phi_2857_ = vec3(fma((fma((((1f - _e2550) * _e2469) * _e1367), 0.31830987f, ((_e2559 * _e2550) / _e2564)) * (_e2424.member_1.x * _e2467)), _e2526, _e1940.x), fma((fma((((1f - _e2551) * _e2469) * _e1369), 0.31830987f, ((_e2559 * _e2551) / _e2564)) * (_e2424.member_1.y * _e2467)), _e2526, _e1940.y), fma((fma((((1f - _e2552) * _e2469) * _e1371), 0.31830987f, ((_e2559 * _e2552) / _e2564)) * (_e2424.member_1.z * _e2467)), _e2526, _e1940.z)); + let _e2505 = phi_6365_; + let _e2506 = (_e1373 * _e1373); + let _e2517 = max(fma(_e1928.z, _e2505.z, fma(_e1928.x, _e2505.x, (_e1928.y * _e2505.y))), 0f); + let _e2530 = max(fma(_e1928.z, _e1932.z, fma(_e1928.x, _e1932.x, (_e1928.y * _e1932.y))), 0f); + let _e2537 = max(fma(_e1928.z, _e2476.z, fma(_e1928.x, _e2476.x, (_e1928.y * _e2476.y))), 0f); + let _e2538 = fma(_e680.y, _e289.member_4, 1f); + let _e2539 = (_e2538 * _e2538); + let _e2540 = (_e2539 * 0.125f); + let _e2542 = fma(-(_e2539), 0.125f, 1f); + let _e2555 = (1f - max(fma(_e2505.z, _e1932.z, fma(_e2505.x, _e1932.x, (_e2505.y * _e1932.y))), 0f)); + let _e2557 = select(_e2555, 0f, (_e2555 < 0f)); + let _e2560 = pow(select(_e2557, 1f, (_e2557 > 1f)), 5f); + let _e2561 = fma((1f - _e2484), _e2560, _e2484); + let _e2562 = fma((1f - _e2485), _e2560, _e2485); + let _e2563 = fma((1f - _e2486), _e2560, _e2486); + let _e2570 = (((_e2506 * _e2506) / (pow(fma((_e2517 * _e2517), fma(_e2506, _e2506, -1f), 1f), 2f) * 3.1415927f)) * ((_e2530 / fma(_e2530, _e2542, _e2540)) * (_e2537 / fma(_e2537, _e2542, _e2540)))); + let _e2575 = fma((4f * _e2530), _e2537, 0.0001f); + phi_3350_ = vec3(fma((fma((((1f - _e2561) * _e2480) * _e1364), 0.31830987f, ((_e2570 * _e2561) / _e2575)) * (_e2435.member_1.x * _e2478)), _e2537, _e1946.x), fma((fma((((1f - _e2562) * _e2480) * _e1366), 0.31830987f, ((_e2570 * _e2562) / _e2575)) * (_e2435.member_1.y * _e2478)), _e2537, _e1946.y), fma((fma((((1f - _e2563) * _e2480) * _e1368), 0.31830987f, ((_e2570 * _e2563) / _e2575)) * (_e2435.member_1.z * _e2478)), _e2537, _e1946.z)); } - let _e2585 = phi_2857_; - phi_3177_ = _e2585; - phi_3178_ = select(true, false, _e2461); + let _e2596 = phi_3350_; + phi_3670_ = _e2596; + phi_3671_ = select(true, false, _e2472); break; } case 2: { - if (_e113 >= 13u) { - phi_5594_ = (_e1995.member_1 <= (_e113 - 13u)); + if (_e118 >= 13u) { + phi_6071_ = (_e2005.member_1 <= (_e118 - 13u)); } else { - phi_5594_ = false; + phi_6071_ = false; } - let _e2106 = phi_5594_; - if _e2106 { - let _e2109 = global.member[_e1995.member_1]; - let _e2114 = global.member[(_e1995.member_1 + 1u)]; - let _e2119 = global.member[(_e1995.member_1 + 2u)]; - let _e2125 = global.member[(_e1995.member_1 + 3u)]; - let _e2130 = global.member[(_e1995.member_1 + 4u)]; - let _e2135 = global.member[(_e1995.member_1 + 5u)]; - let _e2141 = global.member[(_e1995.member_1 + 6u)]; - let _e2146 = global.member[(_e1995.member_1 + 7u)]; - let _e2151 = global.member[(_e1995.member_1 + 8u)]; - let _e2156 = global.member[(_e1995.member_1 + 9u)]; - let _e2161 = global.member[(_e1995.member_1 + 10u)]; - let _e2166 = global.member[(_e1995.member_1 + 11u)]; - let _e2172 = global.member[(_e1995.member_1 + 12u)]; - phi_2920_ = type_35(vec3(bitcast(_e2109), bitcast(_e2114), bitcast(_e2119)), vec3(bitcast(_e2125), bitcast(_e2130), bitcast(_e2135)), bitcast(_e2141), bitcast(_e2146), vec4(bitcast(_e2151), bitcast(_e2156), bitcast(_e2161), bitcast(_e2166)), bitcast(_e2172)); + let _e2116 = phi_6071_; + if _e2116 { + let _e2119 = global_1.member[_e2005.member_1]; + let _e2124 = global_1.member[(_e2005.member_1 + 1u)]; + let _e2129 = global_1.member[(_e2005.member_1 + 2u)]; + let _e2135 = global_1.member[(_e2005.member_1 + 3u)]; + let _e2140 = global_1.member[(_e2005.member_1 + 4u)]; + let _e2145 = global_1.member[(_e2005.member_1 + 5u)]; + let _e2151 = global_1.member[(_e2005.member_1 + 6u)]; + let _e2156 = global_1.member[(_e2005.member_1 + 7u)]; + let _e2161 = global_1.member[(_e2005.member_1 + 8u)]; + let _e2166 = global_1.member[(_e2005.member_1 + 9u)]; + let _e2171 = global_1.member[(_e2005.member_1 + 10u)]; + let _e2176 = global_1.member[(_e2005.member_1 + 11u)]; + let _e2182 = global_1.member[(_e2005.member_1 + 12u)]; + phi_3413_ = type_35(vec3(bitcast(_e2119), bitcast(_e2124), bitcast(_e2129)), vec3(bitcast(_e2135), bitcast(_e2140), bitcast(_e2145)), bitcast(_e2151), bitcast(_e2156), vec4(bitcast(_e2161), bitcast(_e2166), bitcast(_e2171), bitcast(_e2176)), bitcast(_e2182)); } else { - phi_2920_ = type_35(vec3(0f, 0f, 0f), vec3(0f, -1f, 0f), 1.0471976f, 1.5707964f, vec4(1f, 1f, 1f, 1f), 1f); + phi_3413_ = type_35(vec3(0f, 0f, 0f), vec3(0f, -1f, 0f), 1.0471976f, 1.5707964f, vec4(1f, 1f, 1f, 1f), 1f); } - let _e2176 = phi_2920_; - let _e2208 = (vec3((_e2056.member.x + fma(_e2095.x, _e2176.member.z, fma(_e2093.x, _e2176.member.y, (_e2091.x * _e2176.member.x)))), (_e2056.member.y + fma(_e2095.y, _e2176.member.z, fma(_e2093.y, _e2176.member.y, (_e2091.y * _e2176.member.x)))), (_e2056.member.z + fma(_e2095.z, _e2176.member.z, fma(_e2093.z, _e2176.member.y, (_e2091.z * _e2176.member.x))))) - _e121); - let _e2215 = sqrt(fma(_e2208.z, _e2208.z, fma(_e2208.x, _e2208.x, (_e2208.y * _e2208.y)))); - let _e2216 = (_e2215 == 0f); - if _e2216 { - phi_3175_ = vec3(); + let _e2186 = phi_3413_; + let _e2218 = (vec3((_e2066.member.x + fma(_e2105.x, _e2186.member.z, fma(_e2103.x, _e2186.member.y, (_e2101.x * _e2186.member.x)))), (_e2066.member.y + fma(_e2105.y, _e2186.member.z, fma(_e2103.y, _e2186.member.y, (_e2101.y * _e2186.member.x)))), (_e2066.member.z + fma(_e2105.z, _e2186.member.z, fma(_e2103.z, _e2186.member.y, (_e2101.z * _e2186.member.x))))) - _e126); + let _e2225 = sqrt(fma(_e2218.z, _e2218.z, fma(_e2218.x, _e2218.x, (_e2218.y * _e2218.y)))); + let _e2226 = (_e2225 == 0f); + if _e2226 { + phi_3668_ = vec3(); } else { - if _e2216 { - phi_5644_ = vec3(0f, 0f, 0f); + if _e2226 { + phi_6121_ = vec3(0f, 0f, 0f); } else { - phi_5644_ = (_e2208 * (1f / _e2215)); + phi_6121_ = (_e2218 * (1f / _e2225)); } - let _e2220 = phi_5644_; - let _e2230 = fma(_e2095.x, _e2176.member_1.z, fma(_e2093.x, _e2176.member_1.y, (_e2091.x * _e2176.member_1.x))); - let _e2231 = fma(_e2095.y, _e2176.member_1.z, fma(_e2093.y, _e2176.member_1.y, (_e2091.y * _e2176.member_1.x))); - let _e2232 = fma(_e2095.z, _e2176.member_1.z, fma(_e2093.z, _e2176.member_1.y, (_e2091.z * _e2176.member_1.x))); - let _e2237 = sqrt(fma(_e2232, _e2232, fma(_e2230, _e2230, (_e2231 * _e2231)))); - if (_e2237 == 0f) { - phi_5679_ = vec3(0f, 0f, 0f); + let _e2230 = phi_6121_; + let _e2240 = fma(_e2105.x, _e2186.member_1.z, fma(_e2103.x, _e2186.member_1.y, (_e2101.x * _e2186.member_1.x))); + let _e2241 = fma(_e2105.y, _e2186.member_1.z, fma(_e2103.y, _e2186.member_1.y, (_e2101.y * _e2186.member_1.x))); + let _e2242 = fma(_e2105.z, _e2186.member_1.z, fma(_e2103.z, _e2186.member_1.y, (_e2101.z * _e2186.member_1.x))); + let _e2247 = sqrt(fma(_e2242, _e2242, fma(_e2240, _e2240, (_e2241 * _e2241)))); + if (_e2247 == 0f) { + phi_6156_ = vec3(0f, 0f, 0f); } else { - phi_5679_ = (vec3(_e2230, _e2231, _e2232) * (1f / _e2237)); + phi_6156_ = (vec3(_e2240, _e2241, _e2242) * (1f / _e2247)); } - let _e2242 = phi_5679_; - let _e2254 = ((fma(_e2220.z, _e2242.z, fma(_e2220.x, _e2242.x, (_e2220.y * _e2242.y))) - _e2176.member_3) / (_e2176.member_2 - _e2176.member_3)); - let _e2256 = select(_e2254, 0f, (_e2254 < 0f)); - let _e2259 = (_e2176.member_5 * select(_e2256, 1f, (_e2256 > 1f))); - let _e2261 = fma(-(_e683.z), _e292.member_3, 1f); - let _e2265 = fma(0.4f, _e2261, (_e1367 * _e1379)); - let _e2266 = fma(0.4f, _e2261, (_e1369 * _e1379)); - let _e2267 = fma(0.4f, _e2261, (_e1371 * _e1379)); - let _e2274 = (_e1935 + _e2220); - let _e2281 = sqrt(fma(_e2274.z, _e2274.z, fma(_e2274.x, _e2274.x, (_e2274.y * _e2274.y)))); - if (_e2281 == 0f) { - phi_5714_ = vec3(0f, 0f, 0f); + let _e2252 = phi_6156_; + let _e2264 = ((fma(_e2230.z, _e2252.z, fma(_e2230.x, _e2252.x, (_e2230.y * _e2252.y))) - _e2186.member_3) / (_e2186.member_2 - _e2186.member_3)); + let _e2266 = select(_e2264, 0f, (_e2264 < 0f)); + let _e2269 = (_e2186.member_5 * select(_e2266, 1f, (_e2266 > 1f))); + let _e2271 = fma(-(_e680.z), _e289.member_3, 1f); + let _e2275 = fma(0.4f, _e2271, (_e1364 * _e1376)); + let _e2276 = fma(0.4f, _e2271, (_e1366 * _e1376)); + let _e2277 = fma(0.4f, _e2271, (_e1368 * _e1376)); + let _e2284 = (_e1932 + _e2230); + let _e2291 = sqrt(fma(_e2284.z, _e2284.z, fma(_e2284.x, _e2284.x, (_e2284.y * _e2284.y)))); + if (_e2291 == 0f) { + phi_6191_ = vec3(0f, 0f, 0f); } else { - phi_5714_ = (_e2274 * (1f / _e2281)); + phi_6191_ = (_e2284 * (1f / _e2291)); } - let _e2286 = phi_5714_; - let _e2287 = (_e1376 * _e1376); - let _e2298 = max(fma(_e1931.z, _e2286.z, fma(_e1931.x, _e2286.x, (_e1931.y * _e2286.y))), 0f); - let _e2311 = max(fma(_e1931.z, _e1935.z, fma(_e1931.x, _e1935.x, (_e1931.y * _e1935.y))), 0f); - let _e2315 = max(fma(_e1931.z, _e2220.z, fma(_e1931.x, _e2220.x, (_e1931.y * _e2220.y))), 0f); - let _e2316 = fma(_e683.y, _e292.member_4, 1f); - let _e2317 = (_e2316 * _e2316); - let _e2318 = (_e2317 * 0.125f); - let _e2320 = fma(-(_e2317), 0.125f, 1f); - let _e2333 = (1f - max(fma(_e2286.z, _e1935.z, fma(_e2286.x, _e1935.x, (_e2286.y * _e1935.y))), 0f)); - let _e2335 = select(_e2333, 0f, (_e2333 < 0f)); - let _e2338 = pow(select(_e2335, 1f, (_e2335 > 1f)), 5f); - let _e2339 = fma((1f - _e2265), _e2338, _e2265); - let _e2340 = fma((1f - _e2266), _e2338, _e2266); - let _e2341 = fma((1f - _e2267), _e2338, _e2267); - let _e2348 = (((_e2287 * _e2287) / (pow(fma((_e2298 * _e2298), fma(_e2287, _e2287, -1f), 1f), 2f) * 3.1415927f)) * ((_e2311 / fma(_e2311, _e2320, _e2318)) * (_e2315 / fma(_e2315, _e2320, _e2318)))); - let _e2353 = fma((4f * _e2311), _e2315, 0.0001f); - phi_3175_ = vec3(fma((fma((((1f - _e2339) * _e2261) * _e1367), 0.31830987f, ((_e2348 * _e2339) / _e2353)) * (_e2176.member_4.x * _e2259)), _e2315, _e1940.x), fma((fma((((1f - _e2340) * _e2261) * _e1369), 0.31830987f, ((_e2348 * _e2340) / _e2353)) * (_e2176.member_4.y * _e2259)), _e2315, _e1940.y), fma((fma((((1f - _e2341) * _e2261) * _e1371), 0.31830987f, ((_e2348 * _e2341) / _e2353)) * (_e2176.member_4.z * _e2259)), _e2315, _e1940.z)); + let _e2296 = phi_6191_; + let _e2297 = (_e1373 * _e1373); + let _e2308 = max(fma(_e1928.z, _e2296.z, fma(_e1928.x, _e2296.x, (_e1928.y * _e2296.y))), 0f); + let _e2321 = max(fma(_e1928.z, _e1932.z, fma(_e1928.x, _e1932.x, (_e1928.y * _e1932.y))), 0f); + let _e2325 = max(fma(_e1928.z, _e2230.z, fma(_e1928.x, _e2230.x, (_e1928.y * _e2230.y))), 0f); + let _e2326 = fma(_e680.y, _e289.member_4, 1f); + let _e2327 = (_e2326 * _e2326); + let _e2328 = (_e2327 * 0.125f); + let _e2330 = fma(-(_e2327), 0.125f, 1f); + let _e2343 = (1f - max(fma(_e2296.z, _e1932.z, fma(_e2296.x, _e1932.x, (_e2296.y * _e1932.y))), 0f)); + let _e2345 = select(_e2343, 0f, (_e2343 < 0f)); + let _e2348 = pow(select(_e2345, 1f, (_e2345 > 1f)), 5f); + let _e2349 = fma((1f - _e2275), _e2348, _e2275); + let _e2350 = fma((1f - _e2276), _e2348, _e2276); + let _e2351 = fma((1f - _e2277), _e2348, _e2277); + let _e2358 = (((_e2297 * _e2297) / (pow(fma((_e2308 * _e2308), fma(_e2297, _e2297, -1f), 1f), 2f) * 3.1415927f)) * ((_e2321 / fma(_e2321, _e2330, _e2328)) * (_e2325 / fma(_e2325, _e2330, _e2328)))); + let _e2363 = fma((4f * _e2321), _e2325, 0.0001f); + phi_3668_ = vec3(fma((fma((((1f - _e2349) * _e2271) * _e1364), 0.31830987f, ((_e2358 * _e2349) / _e2363)) * (_e2186.member_4.x * _e2269)), _e2325, _e1946.x), fma((fma((((1f - _e2350) * _e2271) * _e1366), 0.31830987f, ((_e2358 * _e2350) / _e2363)) * (_e2186.member_4.y * _e2269)), _e2325, _e1946.y), fma((fma((((1f - _e2351) * _e2271) * _e1368), 0.31830987f, ((_e2358 * _e2351) / _e2363)) * (_e2186.member_4.z * _e2269)), _e2325, _e1946.z)); } - let _e2374 = phi_3175_; - phi_3177_ = _e2374; - phi_3178_ = select(true, false, _e2216); + let _e2384 = phi_3668_; + phi_3670_ = _e2384; + phi_3671_ = select(true, false, _e2226); break; } default: { - phi_3177_ = vec3(); - phi_3178_ = bool(); + phi_3670_ = vec3(); + phi_3671_ = bool(); break; } } - let _e2799 = phi_3177_; - let _e2801 = phi_3178_; - phi_3187_ = select(_e2799, _e1940, vec3(select(true, false, _e2801))); + let _e3130 = phi_3670_; + let _e3132 = phi_3671_; + phi_3680_ = select(_e3130, _e1946, vec3(select(true, false, _e3132))); } - let _e2806 = phi_3187_; - phi_2296_ = _e2806; - phi_3189_ = select(true, false, _e1973); + let _e3137 = phi_3680_; + phi_2367_ = _e3137; + phi_3682_ = select(true, false, _e1979); break; } default: { - phi_2296_ = vec3(); - phi_3189_ = bool(); + phi_2367_ = vec3(); + phi_3682_ = bool(); break; } } - let _e2809 = phi_2296_; - let _e2811 = phi_3189_; + let _e3140 = phi_2367_; + let _e3142 = phi_3682_; continue; continuing { - phi_2292_ = _e1953; - phi_2295_ = _e2809; - break if !(_e2811); + phi_2363_ = _e1959; + phi_2366_ = _e3140; + break if !(_e3142); } } - let _e2814 = fma(-(_e683.z), _e292.member_3, 1f); - let _e2818 = fma(0.04f, _e2814, (_e1367 * _e1379)); - let _e2819 = fma(0.04f, _e2814, (_e1369 * _e1379)); - let _e2820 = fma(0.04f, _e2814, (_e1371 * _e1379)); - let _e2832 = fma(-(_e683.y), _e292.member_4, 1f); - let _e2839 = (1f - max(fma(_e1931.z, _e1935.z, fma(_e1931.x, _e1935.x, (_e1931.y * _e1935.y))), 0f)); - let _e2841 = select(_e2839, 0f, (_e2839 < 0f)); - let _e2844 = pow(select(_e2841, 1f, (_e2841 > 1f)), 5f); - let _e2845 = fma((max(_e2832, _e2818) - _e2818), _e2844, _e2818); - let _e2846 = fma((max(_e2832, _e2819) - _e2819), _e2844, _e2819); - let _e2847 = fma((max(_e2832, _e2820) - _e2820), _e2844, _e2820); - let _e2867 = local_2; - let _e2871 = local_3; - let _e2875 = local_4; - phi_3306_ = vec4(fma(_e1389, _e292.member_1, fma(fma(((1f - _e2845) * _e2814), (_e1398.x * _e1367), (_e1746.x * fma(_e2845, _e1762.x, _e1762.y))), _e1383, _e2867.x)), fma(_e1391, _e292.member_1, fma(fma(((1f - _e2846) * _e2814), (_e1398.y * _e1369), (_e1746.y * fma(_e2846, _e1762.x, _e1762.y))), _e1383, _e2871.y)), fma(_e1393, _e292.member_1, fma(fma(((1f - _e2847) * _e2814), (_e1398.z * _e1371), (_e1746.z * fma(_e2847, _e1762.x, _e1762.y))), _e1383, _e2875.z)), 1f); + let _e3145 = fma(-(_e680.z), _e289.member_3, 1f); + let _e3149 = fma(0.04f, _e3145, (_e1364 * _e1376)); + let _e3150 = fma(0.04f, _e3145, (_e1366 * _e1376)); + let _e3151 = fma(0.04f, _e3145, (_e1368 * _e1376)); + let _e3163 = fma(-(_e680.y), _e289.member_4, 1f); + let _e3170 = (1f - max(fma(_e1928.z, _e1932.z, fma(_e1928.x, _e1932.x, (_e1928.y * _e1932.y))), 0f)); + let _e3172 = select(_e3170, 0f, (_e3170 < 0f)); + let _e3175 = pow(select(_e3172, 1f, (_e3172 > 1f)), 5f); + let _e3176 = fma((max(_e3163, _e3149) - _e3149), _e3175, _e3149); + let _e3177 = fma((max(_e3163, _e3150) - _e3150), _e3175, _e3150); + let _e3178 = fma((max(_e3163, _e3151) - _e3151), _e3175, _e3151); + let _e3198 = local_2; + let _e3202 = local_3; + let _e3206 = local_4; + phi_3799_ = vec4(fma(_e1386, _e289.member_1, fma(fma(((1f - _e3176) * _e3145), (_e1395.x * _e1364), (_e1743.x * fma(_e3176, _e1759.x, _e1759.y))), _e1380, _e3198.x)), fma(_e1388, _e289.member_1, fma(fma(((1f - _e3177) * _e3145), (_e1395.y * _e1366), (_e1743.y * fma(_e3177, _e1759.x, _e1759.y))), _e1380, _e3202.y)), fma(_e1390, _e289.member_1, fma(fma(((1f - _e3178) * _e3145), (_e1395.z * _e1368), (_e1743.z * fma(_e3178, _e1759.x, _e1759.y))), _e1380, _e3206.z)), 1f); } else { - phi_3306_ = (vec4((_e115.x * _e489.x), (_e115.y * _e489.y), (_e115.z * _e489.z), (_e115.w * _e489.w)) * _e292.member_2); + phi_3799_ = (vec4((_e120.x * _e486.x), (_e120.y * _e486.y), (_e120.z * _e486.z), (_e120.w * _e486.w)) * _e289.member_2); } - let _e2883 = phi_3306_; - global_17 = _e2883; + let _e3214 = phi_3799_; + global_20 = _e3214; break; } case 1: { - let _e1904 = sqrt(fma(_e116.x, _e116.x, (_e116.y * _e116.y))); - if (_e1904 == 0f) { - phi_5342_ = vec3(0f, 0f, 0f); + let _e1901 = sqrt(fma(_e121.x, _e121.x, (_e121.y * _e121.y))); + if (_e1901 == 0f) { + phi_5808_ = vec3(0f, 0f, 0f); } else { - phi_5342_ = (vec3(_e116.x, _e116.y, 0f) * (1f / _e1904)); + phi_5808_ = (vec3(_e121.x, _e121.y, 0f) * (1f / _e1901)); } - let _e1909 = phi_5342_; - global_17 = vec4(((_e1909.x + 1f) * 0.5f), ((_e1909.y + 1f) * 0.5f), ((_e1909.z + 1f) * 0.5f), 1f); + let _e1906 = phi_5808_; + global_20 = vec4(((_e1906.x + 1f) * 0.5f), ((_e1906.y + 1f) * 0.5f), ((_e1906.z + 1f) * 0.5f), 1f); break; } case 2: { - let _e1883 = sqrt(fma(_e117.x, _e117.x, (_e117.y * _e117.y))); - if (_e1883 == 0f) { - phi_5293_ = vec3(0f, 0f, 0f); + let _e1880 = sqrt(fma(_e122.x, _e122.x, (_e122.y * _e122.y))); + if (_e1880 == 0f) { + phi_5759_ = vec3(0f, 0f, 0f); } else { - phi_5293_ = (vec3(_e117.x, _e117.y, 0f) * (1f / _e1883)); + phi_5759_ = (vec3(_e122.x, _e122.y, 0f) * (1f / _e1880)); } - let _e1888 = phi_5293_; - global_17 = vec4(((_e1888.x + 1f) * 0.5f), ((_e1888.y + 1f) * 0.5f), ((_e1888.z + 1f) * 0.5f), 1f); + let _e1885 = phi_5759_; + global_20 = vec4(((_e1885.x + 1f) * 0.5f), ((_e1885.y + 1f) * 0.5f), ((_e1885.z + 1f) * 0.5f), 1f); break; } case 3: { - if _e1725 { - phi_5244_ = vec3(0f, 0f, 0f); + if _e1722 { + phi_5710_ = vec3(0f, 0f, 0f); } else { - phi_5244_ = (_e1352 * (1f / _e1724)); + phi_5710_ = (_e1349 * (1f / _e1721)); } - let _e1867 = phi_5244_; - global_17 = vec4(((_e1867.x + 1f) * 0.5f), ((_e1867.y + 1f) * 0.5f), ((_e1867.z + 1f) * 0.5f), 1f); + let _e1864 = phi_5710_; + global_20 = vec4(((_e1864.x + 1f) * 0.5f), ((_e1864.y + 1f) * 0.5f), ((_e1864.z + 1f) * 0.5f), 1f); break; } case 4: { - global_17 = _e115; + global_20 = _e120; break; } case 5: { - let _e1848 = sqrt(fma(_e118.z, _e118.z, fma(_e118.x, _e118.x, (_e118.y * _e118.y)))); - if (_e1848 == 0f) { - phi_5195_ = vec3(0f, 0f, 0f); + let _e1845 = sqrt(fma(_e123.z, _e123.z, fma(_e123.x, _e123.x, (_e123.y * _e123.y)))); + if (_e1845 == 0f) { + phi_5661_ = vec3(0f, 0f, 0f); } else { - phi_5195_ = (_e118 * (1f / _e1848)); + phi_5661_ = (_e123 * (1f / _e1845)); } - let _e1853 = phi_5195_; - global_17 = vec4(((_e1853.x + 1f) * 0.5f), ((_e1853.y + 1f) * 0.5f), ((_e1853.z + 1f) * 0.5f), 1f); + let _e1850 = phi_5661_; + global_20 = vec4(((_e1850.x + 1f) * 0.5f), ((_e1850.y + 1f) * 0.5f), ((_e1850.z + 1f) * 0.5f), 1f); break; } case 6: { - let _e1826 = sqrt(fma(_e1350.z, _e1350.z, fma(_e1350.x, _e1350.x, (_e1350.y * _e1350.y)))); - if (_e1826 == 0f) { - phi_5146_ = vec3(0f, 0f, 0f); + let _e1823 = sqrt(fma(_e1347.z, _e1347.z, fma(_e1347.x, _e1347.x, (_e1347.y * _e1347.y)))); + if (_e1823 == 0f) { + phi_5612_ = vec3(0f, 0f, 0f); } else { - phi_5146_ = (_e1350 * (1f / _e1826)); + phi_5612_ = (_e1347 * (1f / _e1823)); } - let _e1831 = phi_5146_; - global_17 = vec4(((_e1831.x + 1f) * 0.5f), ((_e1831.y + 1f) * 0.5f), ((_e1831.z + 1f) * 0.5f), 1f); + let _e1828 = phi_5612_; + global_20 = vec4(((_e1828.x + 1f) * 0.5f), ((_e1828.y + 1f) * 0.5f), ((_e1828.z + 1f) * 0.5f), 1f); break; } case 7: { - let _e1804 = sqrt(fma(_e119.z, _e119.z, fma(_e119.x, _e119.x, (_e119.y * _e119.y)))); - if (_e1804 == 0f) { - phi_5097_ = vec3(0f, 0f, 0f); + let _e1801 = sqrt(fma(_e124.z, _e124.z, fma(_e124.x, _e124.x, (_e124.y * _e124.y)))); + if (_e1801 == 0f) { + phi_5563_ = vec3(0f, 0f, 0f); } else { - phi_5097_ = (_e119 * (1f / _e1804)); + phi_5563_ = (_e124 * (1f / _e1801)); } - let _e1809 = phi_5097_; - global_17 = vec4(((_e1809.x + 1f) * 0.5f), ((_e1809.y + 1f) * 0.5f), ((_e1809.z + 1f) * 0.5f), 1f); + let _e1806 = phi_5563_; + global_20 = vec4(((_e1806.x + 1f) * 0.5f), ((_e1806.y + 1f) * 0.5f), ((_e1806.z + 1f) * 0.5f), 1f); break; } case 8: { - let _e1782 = sqrt(fma(_e120.z, _e120.z, fma(_e120.x, _e120.x, (_e120.y * _e120.y)))); - if (_e1782 == 0f) { - phi_5048_ = vec3(0f, 0f, 0f); + let _e1779 = sqrt(fma(_e125.z, _e125.z, fma(_e125.x, _e125.x, (_e125.y * _e125.y)))); + if (_e1779 == 0f) { + phi_5514_ = vec3(0f, 0f, 0f); } else { - phi_5048_ = (_e120 * (1f / _e1782)); + phi_5514_ = (_e125 * (1f / _e1779)); } - let _e1787 = phi_5048_; - global_17 = vec4(((_e1787.x + 1f) * 0.5f), ((_e1787.y + 1f) * 0.5f), ((_e1787.z + 1f) * 0.5f), 1f); + let _e1784 = phi_5514_; + global_20 = vec4(((_e1784.x + 1f) * 0.5f), ((_e1784.y + 1f) * 0.5f), ((_e1784.z + 1f) * 0.5f), 1f); break; } case 9: { - global_17 = vec4(_e1398.x, _e1398.y, _e1398.z, 1f); + global_20 = vec4(_e1395.x, _e1395.y, _e1395.z, 1f); break; } case 10: { - global_17 = vec4(_e1746.x, _e1746.y, _e1746.z, 1f); + global_20 = vec4(_e1743.x, _e1743.y, _e1743.z, 1f); break; } case 11: { - global_17 = vec4(_e1762.x, _e1762.y, 1f, 1f); + global_20 = vec4(_e1759.x, _e1759.y, 1f, 1f); break; } case 12: { - global_17 = (vec4(_e1356, _e1359, _e1362, (_e489.w * _e292.member_2.w)) * _e115); + global_20 = (vec4(_e1353, _e1356, _e1359, (_e486.w * _e289.member_2.w)) * _e120); break; } case 13: { - global_17 = vec4(_e1376, _e1376, _e1376, 1f); + global_20 = vec4(_e1373, _e1373, _e1373, 1f); break; } case 14: { - global_17 = vec4(_e1379, _e1379, _e1379, 1f); + global_20 = vec4(_e1376, _e1376, _e1376, 1f); break; } case 15: { - global_17 = vec4(_e1383, _e1383, _e1383, 1f); + global_20 = vec4(_e1380, _e1380, _e1380, 1f); break; } case 16: { - global_17 = vec4((_e1389 * _e292.member_1), (_e1391 * _e292.member_1), (_e1393 * _e292.member_1), 1f); + global_20 = vec4((_e1386 * _e289.member_1), (_e1388 * _e289.member_1), (_e1390 * _e289.member_1), 1f); break; } case 17: { - global_17 = vec4(_e1265.x, _e1265.y, _e1265.z, 1f); + global_20 = vec4(_e1262.x, _e1262.y, _e1262.z, 1f); break; } case 18: { - global_17 = vec4(_e292.member.x, _e292.member.y, _e292.member.z, 1f); + global_20 = vec4(_e289.member.x, _e289.member.y, _e289.member.z, 1f); break; } case 19: { - global_17 = vec4(_e292.member_1, _e292.member_1, _e292.member_1, 1f); + global_20 = vec4(_e289.member_1, _e289.member_1, _e289.member_1, 1f); break; } default: { @@ -2189,15 +2440,15 @@ fn function() { @fragment fn stagerenderlet_fragment(@location(0) @interpolate(flat) param: u32, @location(1) param_1: vec4, @location(2) param_2: vec2, @location(3) param_3: vec2, @location(4) param_4: vec3, @location(5) param_5: vec3, @location(6) param_6: vec3, @location(7) param_7: vec3) -> @location(0) vec4 { - global_1 = param; - global_2 = param_1; - global_3 = param_2; - global_4 = param_3; - global_5 = param_4; - global_6 = param_5; - global_7 = param_6; - global_8 = param_7; + global_2 = param; + global_3 = param_1; + global_4 = param_2; + global_5 = param_3; + global_6 = param_4; + global_7 = param_5; + global_8 = param_6; + global_9 = param_7; function(); - let _e17 = global_17; + let _e17 = global_20; return _e17; } diff --git a/crates/renderling/shaders/stage-renderlet_vertex.spv b/crates/renderling/shaders/stage-renderlet_vertex.spv index 4a04d5b00cbbe10277dfefccebb03529f48994e1..1dd9bd6b59182bec9c88f5ef002742014661868a 100644 GIT binary patch literal 42840 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 literal 42840 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 diff --git a/crates/renderling/shaders/stage-renderlet_vertex.wgsl b/crates/renderling/shaders/stage-renderlet_vertex.wgsl index 143a534a..2b78978a 100644 --- a/crates/renderling/shaders/stage-renderlet_vertex.wgsl +++ b/crates/renderling/shaders/stage-renderlet_vertex.wgsl @@ -1,30 +1,30 @@ -struct type_12 { +struct type_3 { member: array, } -struct type_20 { +struct type_14 { + member: u32, + member_1: u32, +} + +struct type_21 { member: vec4, member_1: vec4, member_2: vec4, member_3: vec4, } -struct type_21 { +struct type_22 { member: array, 8>, member_1: array, 6>, member_2: vec3, } -struct type_22 { - member: type_20, - member_1: type_20, +struct type_23 { + member: type_21, + member_1: type_21, member_2: vec3, - member_3: type_21, -} - -struct type_24 { - member: u32, - member_1: u32, + member_3: type_22, } struct type_27 { @@ -51,8 +51,8 @@ struct type_33 { } struct type_34 { - member: type_24, - member_1: type_24, + member: type_14, + member_1: type_14, } struct VertexOutput { @@ -67,12 +67,12 @@ struct VertexOutput { @builtin(position) member_8: vec4, } -var global: u32; -var global_1: vec4 = vec4(0f, 0f, 0f, 1f); @group(0) @binding(0) -var global_2: type_12; +var global: type_3; +var global_1: u32; +var global_2: vec4 = vec4(0f, 0f, 0f, 1f); var global_3: u32; -var global_4: type_20 = type_20(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); +var global_4: type_21 = type_21(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); var global_5: u32; var global_6: vec4; var global_7: vec2; @@ -89,282 +89,282 @@ fn function() { var local_3: array, 6>; var local_4: array; var local_5: array; - var phi_1173_: u32; - var phi_2913_: bool; - var phi_1180_: u32; - var phi_1181_: u32; - var phi_1191_: u32; - var phi_1273_: type_24; - var phi_1274_: type_24; - var phi_1297_: type_24; - var phi_1310_: bool; - var phi_1316_: type_24; - var phi_1317_: type_24; - var phi_1340_: type_24; - var phi_1354_: bool; - var phi_1360_: type_24; - var phi_1363_: type_30; - var phi_1361_: type_24; - var phi_1386_: type_24; - var phi_1403_: u32; - var phi_2943_: bool; - var phi_1421_: type_24; - var phi_2969_: u32; + var phi_1156_: u32; + var phi_2871_: bool; + var phi_1163_: u32; + var phi_1164_: u32; + var phi_1174_: u32; + var phi_1256_: type_14; + var phi_1257_: type_14; + var phi_1280_: type_14; + var phi_1293_: bool; + var phi_1299_: type_14; + var phi_1300_: type_14; + var phi_1323_: type_14; + var phi_1337_: bool; + var phi_1343_: type_14; + var phi_1346_: type_30; + var phi_1344_: type_14; + var phi_1369_: type_14; + var phi_1386_: u32; + var phi_2901_: bool; + var phi_1404_: type_14; + var phi_2927_: u32; + var phi_2946_: bool; + var phi_1454_: type_33; + var phi_1464_: u32; + var phi_2968_: bool; + var phi_1472_: f32; + var phi_1347_: type_30; + var phi_1525_: bool; var phi_2988_: bool; - var phi_1471_: type_33; - var phi_1481_: u32; - var phi_3010_: bool; - var phi_1489_: f32; - var phi_1364_: type_30; - var phi_1542_: bool; - var phi_3033_: bool; - var phi_1663_: type_34; + var phi_1621_: type_34; var local_6: type_30; - var phi_1666_: type_24; - var phi_1669_: type_20; - var phi_1667_: type_24; - var phi_1692_: type_24; + var phi_1624_: type_14; + var phi_1627_: type_21; + var phi_1625_: type_14; + var phi_1650_: type_14; var local_7: type_30; - var phi_1716_: u32; - var phi_3067_: bool; - var phi_1725_: u32; - var phi_3091_: bool; - var phi_1774_: type_27; - var phi_1784_: u32; - var phi_3116_: bool; - var phi_1857_: type_20; - var phi_1670_: type_20; - var phi_2094_: bool; - var phi_3932_: bool; - var local_8: type_20; - var local_9: type_20; - var local_10: type_20; - var local_11: type_20; + var phi_1674_: u32; + var phi_3022_: bool; + var phi_1683_: u32; + var phi_3046_: bool; + var phi_1732_: type_27; + var phi_1742_: u32; + var phi_3071_: bool; + var phi_1815_: type_21; + var phi_1628_: type_21; + var phi_2052_: bool; + var phi_3887_: bool; + var local_8: type_21; + var local_9: type_21; + var local_10: type_21; + var local_11: type_21; + var phi_2079_: bool; + var phi_2081_: bool; + var phi_2082_: bool; + var phi_2083_: bool; + var phi_2084_: bool; + var local_12: type_21; + var local_13: type_21; + var local_14: type_21; + var local_15: type_21; + var phi_2118_: bool; + var phi_2120_: bool; var phi_2121_: bool; + var phi_2122_: bool; var phi_2123_: bool; - var phi_2124_: bool; - var phi_2125_: bool; - var phi_2126_: bool; - var local_12: type_20; - var local_13: type_20; - var local_14: type_20; - var local_15: type_20; + var local_16: type_21; + var local_17: type_21; + var local_18: type_21; + var local_19: type_21; + var phi_2157_: bool; + var phi_2159_: bool; var phi_2160_: bool; + var phi_2161_: bool; var phi_2162_: bool; - var phi_2163_: bool; - var phi_2164_: bool; - var phi_2165_: bool; - var local_16: type_20; - var local_17: type_20; - var local_18: type_20; - var local_19: type_20; + var local_20: type_21; + var local_21: type_21; + var local_22: type_21; + var local_23: type_21; + var phi_2196_: bool; + var phi_2198_: bool; var phi_2199_: bool; + var phi_2200_: bool; var phi_2201_: bool; - var phi_2202_: bool; - var phi_2203_: bool; - var phi_2204_: bool; - var local_20: type_20; - var local_21: type_20; - var local_22: type_20; - var local_23: type_20; - var phi_2238_: bool; - var phi_2240_: bool; - var phi_2241_: bool; - var phi_2242_: bool; - var phi_2243_: bool; - var phi_2248_: bool; - var phi_2250_: bool; - var phi_2251_: bool; - var phi_2252_: bool; - var phi_2253_: bool; - var phi_2261_: type_20; - var phi_3251_: bool; - var phi_3316_: vec4; - var phi_3346_: vec4; - var phi_3348_: vec4; - var phi_3357_: type_27; - var phi_3358_: type_27; - var phi_3363_: type_27; - var phi_3364_: type_27; - var phi_3365_: bool; - var phi_3369_: type_27; - var phi_2263_: type_27; - var phi_2265_: type_27; - var phi_2266_: bool; - var phi_3463_: bool; - var phi_2319_: type_27; - var phi_2320_: type_27; + var phi_2206_: bool; + var phi_2208_: bool; + var phi_2209_: bool; + var phi_2210_: bool; + var phi_2211_: bool; + var phi_2219_: type_21; + var phi_3206_: bool; + var phi_3271_: vec4; + var phi_3301_: vec4; + var phi_3303_: vec4; + var phi_3312_: type_27; + var phi_3313_: type_27; + var phi_3318_: type_27; + var phi_3319_: type_27; + var phi_3320_: bool; + var phi_3324_: type_27; + var phi_2221_: type_27; + var phi_2223_: type_27; + var phi_2224_: bool; + var phi_3418_: bool; + var phi_2277_: type_27; + var phi_2278_: type_27; var local_24: type_30; var local_25: type_30; var local_26: type_30; var local_27: type_30; var local_28: type_30; - var phi_2407_: vec3; + var phi_2365_: vec3; var local_29: type_30; - var phi_3554_: vec3; - var phi_3589_: vec3; - var phi_3624_: vec3; + var phi_3509_: vec3; + var phi_3544_: vec3; + var phi_3579_: vec3; var local_30: type_30; - var phi_3637_: bool; - var phi_2691_: type_24; - var phi_2692_: type_24; - var phi_2715_: type_24; - var phi_2742_: bool; - var phi_2748_: type_24; - var phi_2749_: type_24; - var phi_2772_: type_24; - var phi_2795_: bool; - var phi_2816_: type_22; - var local_31: type_20; + var phi_3592_: bool; + var phi_2649_: type_14; + var phi_2650_: type_14; + var phi_2673_: type_14; + var phi_2700_: bool; + var phi_2706_: type_14; + var phi_2707_: type_14; + var phi_2730_: type_14; + var phi_2753_: bool; + var phi_2774_: type_23; + var local_31: type_21; switch bitcast(0u) { default: { let _e98 = global_3; - let _e99 = global; - let _e101 = arrayLength((&global_2.member)); - let _e104 = global_2.member[_e98]; - let _e109 = global_2.member[(_e98 + 1u)]; - let _e113 = global_2.member[(_e98 + 2u)]; - let _e117 = global_2.member[(_e98 + 7u)]; - let _e121 = global_2.member[(_e98 + 8u)]; - let _e125 = global_2.member[(_e98 + 9u)]; - let _e129 = global_2.member[(_e98 + 10u)]; - let _e133 = global_2.member[(_e98 + 12u)]; - let _e137 = global_2.member[(_e98 + 13u)]; - let _e141 = global_2.member[(_e98 + 14u)]; - let _e145 = global_2.member[(_e98 + 15u)]; - let _e149 = global_2.member[(_e98 + 16u)]; - let _e153 = global_2.member[(_e98 + 17u)]; + let _e99 = global_1; + let _e101 = arrayLength((&global.member)); + let _e104 = global.member[_e98]; + let _e109 = global.member[(_e98 + 1u)]; + let _e113 = global.member[(_e98 + 2u)]; + let _e117 = global.member[(_e98 + 7u)]; + let _e121 = global.member[(_e98 + 8u)]; + let _e125 = global.member[(_e98 + 9u)]; + let _e129 = global.member[(_e98 + 10u)]; + let _e133 = global.member[(_e98 + 12u)]; + let _e137 = global.member[(_e98 + 13u)]; + let _e141 = global.member[(_e98 + 14u)]; + let _e145 = global.member[(_e98 + 15u)]; + let _e149 = global.member[(_e98 + 16u)]; + let _e153 = global.member[(_e98 + 17u)]; if (_e104 == 1u) { global_5 = _e98; if (_e117 == 4294967295u) { - phi_1181_ = _e99; + phi_1164_ = _e99; } else { if (_e99 >= _e121) { - phi_1173_ = 4294967295u; + phi_1156_ = 4294967295u; } else { - phi_1173_ = (_e117 + _e99); + phi_1156_ = (_e117 + _e99); } - let _e158 = phi_1173_; + let _e158 = phi_1156_; if (_e101 >= 1u) { - phi_2913_ = (_e158 <= (_e101 - 1u)); + phi_2871_ = (_e158 <= (_e101 - 1u)); } else { - phi_2913_ = false; + phi_2871_ = false; } - let _e163 = phi_2913_; + let _e163 = phi_2871_; if _e163 { - let _e166 = global_2.member[_e158]; - phi_1180_ = _e166; + let _e166 = global.member[_e158]; + phi_1163_ = _e166; } else { - phi_1180_ = 0u; + phi_1163_ = 0u; } - let _e168 = phi_1180_; - phi_1181_ = _e168; + let _e168 = phi_1163_; + phi_1164_ = _e168; } - let _e170 = phi_1181_; + let _e170 = phi_1164_; if (_e170 >= _e113) { - phi_1191_ = 4294967295u; + phi_1174_ = 4294967295u; } else { - phi_1191_ = (_e109 + (26u * _e170)); + phi_1174_ = (_e109 + (26u * _e170)); } - let _e175 = phi_1191_; - let _e178 = global_2.member[_e175]; - let _e183 = global_2.member[(_e175 + 1u)]; - let _e188 = global_2.member[(_e175 + 2u)]; - let _e194 = global_2.member[(_e175 + 3u)]; - let _e199 = global_2.member[(_e175 + 4u)]; - let _e204 = global_2.member[(_e175 + 5u)]; - let _e209 = global_2.member[(_e175 + 6u)]; - let _e215 = global_2.member[(_e175 + 7u)]; - let _e220 = global_2.member[(_e175 + 8u)]; - let _e226 = global_2.member[(_e175 + 9u)]; - let _e231 = global_2.member[(_e175 + 10u)]; - let _e237 = global_2.member[(_e175 + 11u)]; - let _e242 = global_2.member[(_e175 + 12u)]; - let _e247 = global_2.member[(_e175 + 13u)]; - let _e253 = global_2.member[(_e175 + 14u)]; - let _e258 = global_2.member[(_e175 + 15u)]; - let _e263 = global_2.member[(_e175 + 16u)]; - let _e268 = global_2.member[(_e175 + 17u)]; + let _e175 = phi_1174_; + let _e178 = global.member[_e175]; + let _e183 = global.member[(_e175 + 1u)]; + let _e188 = global.member[(_e175 + 2u)]; + let _e194 = global.member[(_e175 + 3u)]; + let _e199 = global.member[(_e175 + 4u)]; + let _e204 = global.member[(_e175 + 5u)]; + let _e209 = global.member[(_e175 + 6u)]; + let _e215 = global.member[(_e175 + 7u)]; + let _e220 = global.member[(_e175 + 8u)]; + let _e226 = global.member[(_e175 + 9u)]; + let _e231 = global.member[(_e175 + 10u)]; + let _e237 = global.member[(_e175 + 11u)]; + let _e242 = global.member[(_e175 + 12u)]; + let _e247 = global.member[(_e175 + 13u)]; + let _e253 = global.member[(_e175 + 14u)]; + let _e258 = global.member[(_e175 + 15u)]; + let _e263 = global.member[(_e175 + 16u)]; + let _e268 = global.member[(_e175 + 17u)]; local_5 = array(0u, 0u, 0u, 0u); - phi_1273_ = type_24(0u, 4u); + phi_1256_ = type_14(0u, 4u); loop { - let _e273 = phi_1273_; + let _e273 = phi_1256_; if (_e273.member < _e273.member_1) { - phi_1274_ = type_24((_e273.member + 1u), _e273.member_1); - phi_1297_ = type_24(1u, _e273.member); + phi_1257_ = type_14((_e273.member + 1u), _e273.member_1); + phi_1280_ = type_14(1u, _e273.member); } else { - phi_1274_ = _e273; - phi_1297_ = type_24(0u, type_24().member_1); + phi_1257_ = _e273; + phi_1280_ = type_14(0u, type_14().member_1); } - let _e286 = phi_1274_; - let _e288 = phi_1297_; + let _e286 = phi_1257_; + let _e288 = phi_1280_; switch bitcast(_e288.member) { case 0: { - phi_1310_ = false; + phi_1293_ = false; break; } case 1: { - let _e295 = global_2.member[((_e175 + 18u) + _e288.member_1)]; + let _e295 = global.member[((_e175 + 18u) + _e288.member_1)]; local_5[_e288.member_1] = _e295; - phi_1310_ = true; + phi_1293_ = true; break; } default: { - phi_1310_ = bool(); + phi_1293_ = bool(); break; } } - let _e298 = phi_1310_; + let _e298 = phi_1293_; continue; continuing { - phi_1273_ = _e286; + phi_1256_ = _e286; break if !(_e298); } } let _e300 = local_5; local_4 = array(0f, 0f, 0f, 0f); - phi_1316_ = type_24(0u, 4u); + phi_1299_ = type_14(0u, 4u); loop { - let _e303 = phi_1316_; + let _e303 = phi_1299_; if (_e303.member < _e303.member_1) { - phi_1317_ = type_24((_e303.member + 1u), _e303.member_1); - phi_1340_ = type_24(1u, _e303.member); + phi_1300_ = type_14((_e303.member + 1u), _e303.member_1); + phi_1323_ = type_14(1u, _e303.member); } else { - phi_1317_ = _e303; - phi_1340_ = type_24(0u, type_24().member_1); + phi_1300_ = _e303; + phi_1323_ = type_14(0u, type_14().member_1); } - let _e316 = phi_1317_; - let _e318 = phi_1340_; + let _e316 = phi_1300_; + let _e318 = phi_1323_; switch bitcast(_e318.member) { case 0: { - phi_1354_ = false; + phi_1337_ = false; break; } case 1: { - let _e325 = global_2.member[((_e175 + 22u) + _e318.member_1)]; + let _e325 = global.member[((_e175 + 22u) + _e318.member_1)]; local_4[_e318.member_1] = bitcast(_e325); - phi_1354_ = true; + phi_1337_ = true; break; } default: { - phi_1354_ = bool(); + phi_1337_ = bool(); break; } } - let _e329 = phi_1354_; + let _e329 = phi_1337_; continue; continuing { - phi_1316_ = _e316; + phi_1299_ = _e316; break if !(_e329); } } let _e331 = local_4; - phi_1360_ = type_24(0u, _e141); - phi_1363_ = type_30(vec3(bitcast(_e178), bitcast(_e183), bitcast(_e188)), vec4(bitcast(_e194), bitcast(_e199), bitcast(_e204), bitcast(_e209)), vec3(bitcast(_e237), bitcast(_e242), bitcast(_e247)), vec4(bitcast(_e253), bitcast(_e258), bitcast(_e263), bitcast(_e268)), _e300, _e331, vec2(bitcast(_e215), bitcast(_e220)), vec2(bitcast(_e226), bitcast(_e231))); + phi_1343_ = type_14(0u, _e141); + phi_1346_ = type_30(vec3(bitcast(_e178), bitcast(_e183), bitcast(_e188)), vec4(bitcast(_e194), bitcast(_e199), bitcast(_e204), bitcast(_e209)), vec3(bitcast(_e237), bitcast(_e242), bitcast(_e247)), vec4(bitcast(_e253), bitcast(_e258), bitcast(_e263), bitcast(_e268)), _e300, _e331, vec2(bitcast(_e215), bitcast(_e220)), vec2(bitcast(_e226), bitcast(_e231))); loop { - let _e335 = phi_1360_; - let _e337 = phi_1363_; + let _e335 = phi_1343_; + let _e337 = phi_1346_; local_6 = _e337; local_7 = _e337; local_24 = _e337; @@ -375,135 +375,135 @@ fn function() { local_29 = _e337; local_30 = _e337; if (_e335.member < _e335.member_1) { - phi_1361_ = type_24((_e335.member + 1u), _e335.member_1); - phi_1386_ = type_24(1u, _e335.member); + phi_1344_ = type_14((_e335.member + 1u), _e335.member_1); + phi_1369_ = type_14(1u, _e335.member); } else { - phi_1361_ = _e335; - phi_1386_ = type_24(0u, type_24().member_1); + phi_1344_ = _e335; + phi_1369_ = type_14(0u, type_14().member_1); } - let _e350 = phi_1361_; - let _e352 = phi_1386_; + let _e350 = phi_1344_; + let _e352 = phi_1369_; switch bitcast(_e352.member) { case 0: { - phi_1364_ = type_30(); - phi_1542_ = false; + phi_1347_ = type_30(); + phi_1525_ = false; break; } case 1: { if (_e352.member_1 >= _e141) { - phi_1403_ = 4294967295u; + phi_1386_ = 4294967295u; } else { - phi_1403_ = (_e137 + (2u * _e352.member_1)); + phi_1386_ = (_e137 + (2u * _e352.member_1)); } - let _e360 = phi_1403_; + let _e360 = phi_1386_; if (_e101 >= 2u) { - phi_2943_ = (_e360 <= (_e101 - 2u)); + phi_2901_ = (_e360 <= (_e101 - 2u)); } else { - phi_2943_ = false; + phi_2901_ = false; } - let _e365 = phi_2943_; + let _e365 = phi_2901_; if _e365 { - let _e368 = global_2.member[_e360]; - let _e372 = global_2.member[(_e360 + 1u)]; - phi_1421_ = type_24(_e368, _e372); + let _e368 = global.member[_e360]; + let _e372 = global.member[(_e360 + 1u)]; + phi_1404_ = type_14(_e368, _e372); } else { - phi_1421_ = type_24(4294967295u, 0u); + phi_1404_ = type_14(4294967295u, 0u); } - let _e375 = phi_1421_; + let _e375 = phi_1404_; if (_e170 >= _e375.member_1) { - phi_2969_ = 4294967295u; + phi_2927_ = 4294967295u; } else { - phi_2969_ = (_e375.member + (9u * _e170)); + phi_2927_ = (_e375.member + (9u * _e170)); } - let _e382 = phi_2969_; + let _e382 = phi_2927_; if (_e101 >= 9u) { - phi_2988_ = (_e382 <= (_e101 - 9u)); + phi_2946_ = (_e382 <= (_e101 - 9u)); } else { - phi_2988_ = false; + phi_2946_ = false; } - let _e387 = phi_2988_; + let _e387 = phi_2946_; if _e387 { - let _e390 = global_2.member[_e382]; - let _e395 = global_2.member[(_e382 + 1u)]; - let _e400 = global_2.member[(_e382 + 2u)]; - let _e406 = global_2.member[(_e382 + 3u)]; - let _e411 = global_2.member[(_e382 + 4u)]; - let _e416 = global_2.member[(_e382 + 5u)]; - let _e422 = global_2.member[(_e382 + 6u)]; - let _e427 = global_2.member[(_e382 + 7u)]; - let _e432 = global_2.member[(_e382 + 8u)]; - phi_1471_ = type_33(vec3(bitcast(_e390), bitcast(_e395), bitcast(_e400)), vec3(bitcast(_e406), bitcast(_e411), bitcast(_e416)), vec3(bitcast(_e422), bitcast(_e427), bitcast(_e432))); + let _e390 = global.member[_e382]; + let _e395 = global.member[(_e382 + 1u)]; + let _e400 = global.member[(_e382 + 2u)]; + let _e406 = global.member[(_e382 + 3u)]; + let _e411 = global.member[(_e382 + 4u)]; + let _e416 = global.member[(_e382 + 5u)]; + let _e422 = global.member[(_e382 + 6u)]; + let _e427 = global.member[(_e382 + 7u)]; + let _e432 = global.member[(_e382 + 8u)]; + phi_1454_ = type_33(vec3(bitcast(_e390), bitcast(_e395), bitcast(_e400)), vec3(bitcast(_e406), bitcast(_e411), bitcast(_e416)), vec3(bitcast(_e422), bitcast(_e427), bitcast(_e432))); } else { - phi_1471_ = type_33(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); + phi_1454_ = type_33(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); } - let _e437 = phi_1471_; + let _e437 = phi_1454_; if (_e352.member_1 >= _e149) { - phi_1481_ = 4294967295u; + phi_1464_ = 4294967295u; } else { - phi_1481_ = (_e145 + _e352.member_1); + phi_1464_ = (_e145 + _e352.member_1); } - let _e441 = phi_1481_; + let _e441 = phi_1464_; if (_e101 >= 1u) { - phi_3010_ = (_e441 <= (_e101 - 1u)); + phi_2968_ = (_e441 <= (_e101 - 1u)); } else { - phi_3010_ = false; + phi_2968_ = false; } - let _e446 = phi_3010_; + let _e446 = phi_2968_; if _e446 { - let _e449 = global_2.member[_e441]; - phi_1489_ = bitcast(_e449); + let _e449 = global.member[_e441]; + phi_1472_ = bitcast(_e449); } else { - phi_1489_ = 0f; + phi_1472_ = 0f; } - let _e452 = phi_1489_; + let _e452 = phi_1472_; let _e475 = type_30(vec3(fma(_e452, _e437.member.x, _e337.member.x), fma(_e452, _e437.member.y, _e337.member.y), fma(_e452, _e437.member.z, _e337.member.z)), _e337.member_1, _e337.member_2, _e337.member_3, _e337.member_4, _e337.member_5, _e337.member_6, _e337.member_7); let _e498 = type_30(_e475.member, _e475.member_1, vec3(fma(_e452, _e437.member_1.x, _e337.member_2.x), fma(_e452, _e437.member_1.y, _e337.member_2.y), fma(_e452, _e437.member_1.z, _e337.member_2.z)), _e475.member_3, _e475.member_4, _e475.member_5, _e475.member_6, _e475.member_7); - phi_1364_ = type_30(_e498.member, _e498.member_1, _e498.member_2, vec4(fma(_e452, _e437.member_2.x, _e337.member_3.x), fma(_e452, _e437.member_2.y, _e337.member_3.y), fma(_e452, _e437.member_2.z, _e337.member_3.z), _e337.member_3.w), _e498.member_4, _e498.member_5, _e498.member_6, _e498.member_7); - phi_1542_ = true; + phi_1347_ = type_30(_e498.member, _e498.member_1, _e498.member_2, vec4(fma(_e452, _e437.member_2.x, _e337.member_3.x), fma(_e452, _e437.member_2.y, _e337.member_3.y), fma(_e452, _e437.member_2.z, _e337.member_3.z), _e337.member_3.w), _e498.member_4, _e498.member_5, _e498.member_6, _e498.member_7); + phi_1525_ = true; break; } default: { - phi_1364_ = type_30(); - phi_1542_ = bool(); + phi_1347_ = type_30(); + phi_1525_ = bool(); break; } } - let _e525 = phi_1364_; - let _e527 = phi_1542_; + let _e525 = phi_1347_; + let _e527 = phi_1525_; continue; continuing { - phi_1360_ = _e350; - phi_1363_ = _e525; + phi_1343_ = _e350; + phi_1346_ = _e525; break if !(_e527); } } - let _e532 = global_2.member[(_e153 + 6u)]; + let _e532 = global.member[(_e153 + 6u)]; if (_e532 == 1u) { let _e535 = ((_e133 == 4294967295u) != true); if _e535 { if (_e101 >= 4u) { - phi_3033_ = (_e133 <= (_e101 - 4u)); + phi_2988_ = (_e133 <= (_e101 - 4u)); } else { - phi_3033_ = false; + phi_2988_ = false; } - let _e540 = phi_3033_; + let _e540 = phi_2988_; if _e540 { - let _e543 = global_2.member[_e133]; - let _e547 = global_2.member[(_e133 + 1u)]; - let _e551 = global_2.member[(_e133 + 2u)]; - let _e555 = global_2.member[(_e133 + 3u)]; - phi_1663_ = type_34(type_24(_e543, _e547), type_24(_e551, _e555)); + let _e543 = global.member[_e133]; + let _e547 = global.member[(_e133 + 1u)]; + let _e551 = global.member[(_e133 + 2u)]; + let _e555 = global.member[(_e133 + 3u)]; + phi_1621_ = type_34(type_14(_e543, _e547), type_14(_e551, _e555)); } else { - phi_1663_ = type_34(type_24(4294967295u, 0u), type_24(4294967295u, 0u)); + phi_1621_ = type_34(type_14(4294967295u, 0u), type_14(4294967295u, 0u)); } - let _e560 = phi_1663_; + let _e560 = phi_1621_; let _e562 = local_6; local = _e562.member_5; - phi_1666_ = type_24(0u, 4u); - phi_1669_ = type_20(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); + phi_1624_ = type_14(0u, 4u); + phi_1627_ = type_21(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); loop { - let _e565 = phi_1666_; - let _e567 = phi_1669_; + let _e565 = phi_1624_; + let _e567 = phi_1627_; local_8 = _e567; local_9 = _e567; local_10 = _e567; @@ -522,18 +522,18 @@ fn function() { local_23 = _e567; local_31 = _e567; if (_e565.member < _e565.member_1) { - phi_1667_ = type_24((_e565.member + 1u), _e565.member_1); - phi_1692_ = type_24(1u, _e565.member); + phi_1625_ = type_14((_e565.member + 1u), _e565.member_1); + phi_1650_ = type_14(1u, _e565.member); } else { - phi_1667_ = _e565; - phi_1692_ = type_24(0u, type_24().member_1); + phi_1625_ = _e565; + phi_1650_ = type_14(0u, type_14().member_1); } - let _e580 = phi_1667_; - let _e582 = phi_1692_; + let _e580 = phi_1625_; + let _e582 = phi_1650_; switch bitcast(_e582.member) { case 0: { - phi_1670_ = type_20(); - phi_2094_ = false; + phi_1628_ = type_21(); + phi_2052_ = false; break; } case 1: { @@ -542,85 +542,85 @@ fn function() { let _e589 = (_e582.member_1 < 4u); if _e589 { } else { - phi_3932_ = true; + phi_3887_ = true; break; } let _e591 = local_1[_e582.member_1]; if (_e591 >= _e560.member.member_1) { - phi_1716_ = 4294967295u; + phi_1674_ = 4294967295u; } else { - phi_1716_ = (_e560.member.member + _e591); + phi_1674_ = (_e560.member.member + _e591); } - let _e599 = phi_1716_; + let _e599 = phi_1674_; if (_e101 >= 1u) { - phi_3067_ = (_e599 <= (_e101 - 1u)); + phi_3022_ = (_e599 <= (_e101 - 1u)); } else { - phi_3067_ = false; + phi_3022_ = false; } - let _e604 = phi_3067_; + let _e604 = phi_3022_; if _e604 { - let _e607 = global_2.member[_e599]; - phi_1725_ = _e607; + let _e607 = global.member[_e599]; + phi_1683_ = _e607; } else { - phi_1725_ = 4294967295u; + phi_1683_ = 4294967295u; } - let _e609 = phi_1725_; + let _e609 = phi_1683_; if (_e101 >= 10u) { - phi_3091_ = (_e609 <= (_e101 - 10u)); + phi_3046_ = (_e609 <= (_e101 - 10u)); } else { - phi_3091_ = false; + phi_3046_ = false; } - let _e614 = phi_3091_; + let _e614 = phi_3046_; if _e614 { - let _e617 = global_2.member[_e609]; - let _e622 = global_2.member[(_e609 + 1u)]; - let _e627 = global_2.member[(_e609 + 2u)]; - let _e633 = global_2.member[(_e609 + 3u)]; - let _e638 = global_2.member[(_e609 + 4u)]; - let _e643 = global_2.member[(_e609 + 5u)]; - let _e648 = global_2.member[(_e609 + 6u)]; - let _e654 = global_2.member[(_e609 + 7u)]; - let _e659 = global_2.member[(_e609 + 8u)]; - let _e664 = global_2.member[(_e609 + 9u)]; - phi_1774_ = type_27(vec3(bitcast(_e617), bitcast(_e622), bitcast(_e627)), vec4(bitcast(_e633), bitcast(_e638), bitcast(_e643), bitcast(_e648)), vec3(bitcast(_e654), bitcast(_e659), bitcast(_e664))); + let _e617 = global.member[_e609]; + let _e622 = global.member[(_e609 + 1u)]; + let _e627 = global.member[(_e609 + 2u)]; + let _e633 = global.member[(_e609 + 3u)]; + let _e638 = global.member[(_e609 + 4u)]; + let _e643 = global.member[(_e609 + 5u)]; + let _e648 = global.member[(_e609 + 6u)]; + let _e654 = global.member[(_e609 + 7u)]; + let _e659 = global.member[(_e609 + 8u)]; + let _e664 = global.member[(_e609 + 9u)]; + phi_1732_ = type_27(vec3(bitcast(_e617), bitcast(_e622), bitcast(_e627)), vec4(bitcast(_e633), bitcast(_e638), bitcast(_e643), bitcast(_e648)), vec3(bitcast(_e654), bitcast(_e659), bitcast(_e664))); } else { - phi_1774_ = type_27(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); + phi_1732_ = type_27(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); } - let _e669 = phi_1774_; + let _e669 = phi_1732_; if (_e591 >= _e560.member_1.member_1) { - phi_1784_ = 4294967295u; + phi_1742_ = 4294967295u; } else { - phi_1784_ = (_e560.member_1.member + (16u * _e591)); + phi_1742_ = (_e560.member_1.member + (16u * _e591)); } - let _e678 = phi_1784_; + let _e678 = phi_1742_; if (_e101 >= 16u) { - phi_3116_ = (_e678 <= (_e101 - 16u)); + phi_3071_ = (_e678 <= (_e101 - 16u)); } else { - phi_3116_ = false; + phi_3071_ = false; } - let _e683 = phi_3116_; + let _e683 = phi_3071_; if _e683 { - let _e686 = global_2.member[_e678]; - let _e691 = global_2.member[(_e678 + 1u)]; - let _e696 = global_2.member[(_e678 + 2u)]; - let _e701 = global_2.member[(_e678 + 3u)]; - let _e707 = global_2.member[(_e678 + 4u)]; - let _e712 = global_2.member[(_e678 + 5u)]; - let _e717 = global_2.member[(_e678 + 6u)]; - let _e722 = global_2.member[(_e678 + 7u)]; - let _e728 = global_2.member[(_e678 + 8u)]; - let _e733 = global_2.member[(_e678 + 9u)]; - let _e738 = global_2.member[(_e678 + 10u)]; - let _e743 = global_2.member[(_e678 + 11u)]; - let _e749 = global_2.member[(_e678 + 12u)]; - let _e754 = global_2.member[(_e678 + 13u)]; - let _e759 = global_2.member[(_e678 + 14u)]; - let _e764 = global_2.member[(_e678 + 15u)]; - phi_1857_ = type_20(vec4(bitcast(_e686), bitcast(_e691), bitcast(_e696), bitcast(_e701)), vec4(bitcast(_e707), bitcast(_e712), bitcast(_e717), bitcast(_e722)), vec4(bitcast(_e728), bitcast(_e733), bitcast(_e738), bitcast(_e743)), vec4(bitcast(_e749), bitcast(_e754), bitcast(_e759), bitcast(_e764))); + let _e686 = global.member[_e678]; + let _e691 = global.member[(_e678 + 1u)]; + let _e696 = global.member[(_e678 + 2u)]; + let _e701 = global.member[(_e678 + 3u)]; + let _e707 = global.member[(_e678 + 4u)]; + let _e712 = global.member[(_e678 + 5u)]; + let _e717 = global.member[(_e678 + 6u)]; + let _e722 = global.member[(_e678 + 7u)]; + let _e728 = global.member[(_e678 + 8u)]; + let _e733 = global.member[(_e678 + 9u)]; + let _e738 = global.member[(_e678 + 10u)]; + let _e743 = global.member[(_e678 + 11u)]; + let _e749 = global.member[(_e678 + 12u)]; + let _e754 = global.member[(_e678 + 13u)]; + let _e759 = global.member[(_e678 + 14u)]; + let _e764 = global.member[(_e678 + 15u)]; + phi_1815_ = type_21(vec4(bitcast(_e686), bitcast(_e691), bitcast(_e696), bitcast(_e701)), vec4(bitcast(_e707), bitcast(_e712), bitcast(_e717), bitcast(_e722)), vec4(bitcast(_e728), bitcast(_e733), bitcast(_e738), bitcast(_e743)), vec4(bitcast(_e749), bitcast(_e754), bitcast(_e759), bitcast(_e764))); } else { - phi_1857_ = type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)); + phi_1815_ = type_21(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)); } - let _e769 = phi_1857_; + let _e769 = phi_1815_; let _e777 = (_e669.member_1.x + _e669.member_1.x); let _e778 = (_e669.member_1.y + _e669.member_1.y); let _e779 = (_e669.member_1.z + _e669.member_1.z); @@ -633,31 +633,31 @@ fn function() { let _e808 = (vec4(fma(_e669.member_1.x, _e779, _e783), fma(_e669.member_1.y, _e779, -(_e782)), (1f - fma(_e669.member_1.x, _e777, (_e669.member_1.y * _e778))), 0f) * _e669.member_2.z); if _e589 { } else { - phi_3932_ = true; + phi_3887_ = true; break; } let _e913 = local[_e582.member_1]; - phi_1670_ = type_20((_e567.member + (vec4(fma(_e669.member.x, _e769.member.w, fma(_e808.x, _e769.member.z, fma(_e804.x, _e769.member.x, (_e806.x * _e769.member.y)))), fma(_e669.member.y, _e769.member.w, fma(_e808.y, _e769.member.z, fma(_e804.y, _e769.member.x, (_e806.y * _e769.member.y)))), fma(_e669.member.z, _e769.member.w, fma(_e808.z, _e769.member.z, fma(_e804.z, _e769.member.x, (_e806.z * _e769.member.y)))), (fma(_e808.w, _e769.member.z, fma(_e804.w, _e769.member.x, (_e806.w * _e769.member.y))) + _e769.member.w)) * _e913)), (_e567.member_1 + (vec4(fma(_e669.member.x, _e769.member_1.w, fma(_e808.x, _e769.member_1.z, fma(_e804.x, _e769.member_1.x, (_e806.x * _e769.member_1.y)))), fma(_e669.member.y, _e769.member_1.w, fma(_e808.y, _e769.member_1.z, fma(_e804.y, _e769.member_1.x, (_e806.y * _e769.member_1.y)))), fma(_e669.member.z, _e769.member_1.w, fma(_e808.z, _e769.member_1.z, fma(_e804.z, _e769.member_1.x, (_e806.z * _e769.member_1.y)))), (fma(_e808.w, _e769.member_1.z, fma(_e804.w, _e769.member_1.x, (_e806.w * _e769.member_1.y))) + _e769.member_1.w)) * _e913)), (_e567.member_2 + (vec4(fma(_e669.member.x, _e769.member_2.w, fma(_e808.x, _e769.member_2.z, fma(_e804.x, _e769.member_2.x, (_e806.x * _e769.member_2.y)))), fma(_e669.member.y, _e769.member_2.w, fma(_e808.y, _e769.member_2.z, fma(_e804.y, _e769.member_2.x, (_e806.y * _e769.member_2.y)))), fma(_e669.member.z, _e769.member_2.w, fma(_e808.z, _e769.member_2.z, fma(_e804.z, _e769.member_2.x, (_e806.z * _e769.member_2.y)))), (fma(_e808.w, _e769.member_2.z, fma(_e804.w, _e769.member_2.x, (_e806.w * _e769.member_2.y))) + _e769.member_2.w)) * _e913)), (_e567.member_3 + (vec4(fma(_e669.member.x, _e769.member_3.w, fma(_e808.x, _e769.member_3.z, fma(_e804.x, _e769.member_3.x, (_e806.x * _e769.member_3.y)))), fma(_e669.member.y, _e769.member_3.w, fma(_e808.y, _e769.member_3.z, fma(_e804.y, _e769.member_3.x, (_e806.y * _e769.member_3.y)))), fma(_e669.member.z, _e769.member_3.w, fma(_e808.z, _e769.member_3.z, fma(_e804.z, _e769.member_3.x, (_e806.z * _e769.member_3.y)))), (fma(_e808.w, _e769.member_3.z, fma(_e804.w, _e769.member_3.x, (_e806.w * _e769.member_3.y))) + _e769.member_3.w)) * _e913))); - phi_2094_ = true; + phi_1628_ = type_21((_e567.member + (vec4(fma(_e669.member.x, _e769.member.w, fma(_e808.x, _e769.member.z, fma(_e804.x, _e769.member.x, (_e806.x * _e769.member.y)))), fma(_e669.member.y, _e769.member.w, fma(_e808.y, _e769.member.z, fma(_e804.y, _e769.member.x, (_e806.y * _e769.member.y)))), fma(_e669.member.z, _e769.member.w, fma(_e808.z, _e769.member.z, fma(_e804.z, _e769.member.x, (_e806.z * _e769.member.y)))), (fma(_e808.w, _e769.member.z, fma(_e804.w, _e769.member.x, (_e806.w * _e769.member.y))) + _e769.member.w)) * _e913)), (_e567.member_1 + (vec4(fma(_e669.member.x, _e769.member_1.w, fma(_e808.x, _e769.member_1.z, fma(_e804.x, _e769.member_1.x, (_e806.x * _e769.member_1.y)))), fma(_e669.member.y, _e769.member_1.w, fma(_e808.y, _e769.member_1.z, fma(_e804.y, _e769.member_1.x, (_e806.y * _e769.member_1.y)))), fma(_e669.member.z, _e769.member_1.w, fma(_e808.z, _e769.member_1.z, fma(_e804.z, _e769.member_1.x, (_e806.z * _e769.member_1.y)))), (fma(_e808.w, _e769.member_1.z, fma(_e804.w, _e769.member_1.x, (_e806.w * _e769.member_1.y))) + _e769.member_1.w)) * _e913)), (_e567.member_2 + (vec4(fma(_e669.member.x, _e769.member_2.w, fma(_e808.x, _e769.member_2.z, fma(_e804.x, _e769.member_2.x, (_e806.x * _e769.member_2.y)))), fma(_e669.member.y, _e769.member_2.w, fma(_e808.y, _e769.member_2.z, fma(_e804.y, _e769.member_2.x, (_e806.y * _e769.member_2.y)))), fma(_e669.member.z, _e769.member_2.w, fma(_e808.z, _e769.member_2.z, fma(_e804.z, _e769.member_2.x, (_e806.z * _e769.member_2.y)))), (fma(_e808.w, _e769.member_2.z, fma(_e804.w, _e769.member_2.x, (_e806.w * _e769.member_2.y))) + _e769.member_2.w)) * _e913)), (_e567.member_3 + (vec4(fma(_e669.member.x, _e769.member_3.w, fma(_e808.x, _e769.member_3.z, fma(_e804.x, _e769.member_3.x, (_e806.x * _e769.member_3.y)))), fma(_e669.member.y, _e769.member_3.w, fma(_e808.y, _e769.member_3.z, fma(_e804.y, _e769.member_3.x, (_e806.y * _e769.member_3.y)))), fma(_e669.member.z, _e769.member_3.w, fma(_e808.z, _e769.member_3.z, fma(_e804.z, _e769.member_3.x, (_e806.z * _e769.member_3.y)))), (fma(_e808.w, _e769.member_3.z, fma(_e804.w, _e769.member_3.x, (_e806.w * _e769.member_3.y))) + _e769.member_3.w)) * _e913))); + phi_2052_ = true; break; } default: { - phi_1670_ = type_20(); - phi_2094_ = bool(); + phi_1628_ = type_21(); + phi_2052_ = bool(); break; } } - let _e928 = phi_1670_; - let _e930 = phi_2094_; + let _e928 = phi_1628_; + let _e930 = phi_2052_; continue; continuing { - phi_1666_ = _e580; - phi_1669_ = _e928; - phi_3932_ = false; + phi_1624_ = _e580; + phi_1627_ = _e928; + phi_3887_ = false; break if !(_e930); } } - let _e933 = phi_3932_; + let _e933 = phi_3887_; if _e933 { break; } @@ -673,27 +673,27 @@ fn function() { if _e957 { let _e959 = local_11; let _e964 = global_4.member[3u]; - phi_2121_ = (_e959.member.w == _e964); + phi_2079_ = (_e959.member.w == _e964); } else { - phi_2121_ = bool(); + phi_2079_ = bool(); } - let _e967 = phi_2121_; - phi_2123_ = _e967; - phi_2124_ = select(true, false, _e957); + let _e967 = phi_2079_; + phi_2081_ = _e967; + phi_2082_ = select(true, false, _e957); } else { - phi_2123_ = bool(); - phi_2124_ = true; + phi_2081_ = bool(); + phi_2082_ = true; } - let _e970 = phi_2123_; - let _e972 = phi_2124_; - phi_2125_ = _e970; - phi_2126_ = _e972; + let _e970 = phi_2081_; + let _e972 = phi_2082_; + phi_2083_ = _e970; + phi_2084_ = _e972; } else { - phi_2125_ = bool(); - phi_2126_ = true; + phi_2083_ = bool(); + phi_2084_ = true; } - let _e974 = phi_2125_; - let _e976 = phi_2126_; + let _e974 = phi_2083_; + let _e976 = phi_2084_; if select(_e974, false, _e976) { let _e979 = local_12; let _e984 = global_4.member_1[0u]; @@ -707,27 +707,27 @@ fn function() { if _e1001 { let _e1003 = local_15; let _e1008 = global_4.member_1[3u]; - phi_2160_ = (_e1003.member_1.w == _e1008); + phi_2118_ = (_e1003.member_1.w == _e1008); } else { - phi_2160_ = bool(); + phi_2118_ = bool(); } - let _e1011 = phi_2160_; - phi_2162_ = _e1011; - phi_2163_ = select(true, false, _e1001); + let _e1011 = phi_2118_; + phi_2120_ = _e1011; + phi_2121_ = select(true, false, _e1001); } else { - phi_2162_ = bool(); - phi_2163_ = true; + phi_2120_ = bool(); + phi_2121_ = true; } - let _e1014 = phi_2162_; - let _e1016 = phi_2163_; - phi_2164_ = _e1014; - phi_2165_ = _e1016; + let _e1014 = phi_2120_; + let _e1016 = phi_2121_; + phi_2122_ = _e1014; + phi_2123_ = _e1016; } else { - phi_2164_ = bool(); - phi_2165_ = true; + phi_2122_ = bool(); + phi_2123_ = true; } - let _e1018 = phi_2164_; - let _e1020 = phi_2165_; + let _e1018 = phi_2122_; + let _e1020 = phi_2123_; if select(_e1018, false, _e1020) { let _e1023 = local_16; let _e1028 = global_4.member_2[0u]; @@ -741,27 +741,27 @@ fn function() { if _e1045 { let _e1047 = local_19; let _e1052 = global_4.member_2[3u]; - phi_2199_ = (_e1047.member_2.w == _e1052); + phi_2157_ = (_e1047.member_2.w == _e1052); } else { - phi_2199_ = bool(); + phi_2157_ = bool(); } - let _e1055 = phi_2199_; - phi_2201_ = _e1055; - phi_2202_ = select(true, false, _e1045); + let _e1055 = phi_2157_; + phi_2159_ = _e1055; + phi_2160_ = select(true, false, _e1045); } else { - phi_2201_ = bool(); - phi_2202_ = true; + phi_2159_ = bool(); + phi_2160_ = true; } - let _e1058 = phi_2201_; - let _e1060 = phi_2202_; - phi_2203_ = _e1058; - phi_2204_ = _e1060; + let _e1058 = phi_2159_; + let _e1060 = phi_2160_; + phi_2161_ = _e1058; + phi_2162_ = _e1060; } else { - phi_2203_ = bool(); - phi_2204_ = true; + phi_2161_ = bool(); + phi_2162_ = true; } - let _e1062 = phi_2203_; - let _e1064 = phi_2204_; + let _e1062 = phi_2161_; + let _e1064 = phi_2162_; let _e1065 = select(_e1062, false, _e1064); if _e1065 { let _e1067 = local_20; @@ -776,55 +776,55 @@ fn function() { if _e1089 { let _e1091 = local_23; let _e1096 = global_4.member_3[3u]; - phi_2238_ = (_e1091.member_3.w == _e1096); + phi_2196_ = (_e1091.member_3.w == _e1096); } else { - phi_2238_ = bool(); + phi_2196_ = bool(); } - let _e1099 = phi_2238_; - phi_2240_ = _e1099; - phi_2241_ = select(true, false, _e1089); + let _e1099 = phi_2196_; + phi_2198_ = _e1099; + phi_2199_ = select(true, false, _e1089); } else { - phi_2240_ = bool(); - phi_2241_ = true; + phi_2198_ = bool(); + phi_2199_ = true; } - let _e1102 = phi_2240_; - let _e1104 = phi_2241_; - phi_2242_ = _e1102; - phi_2243_ = _e1104; + let _e1102 = phi_2198_; + let _e1104 = phi_2199_; + phi_2200_ = _e1102; + phi_2201_ = _e1104; } else { - phi_2242_ = bool(); - phi_2243_ = true; + phi_2200_ = bool(); + phi_2201_ = true; } - let _e1106 = phi_2242_; - let _e1108 = phi_2243_; - phi_2248_ = select(_e1106, false, _e1108); + let _e1106 = phi_2200_; + let _e1108 = phi_2201_; + phi_2206_ = select(_e1106, false, _e1108); } else { - phi_2248_ = bool(); + phi_2206_ = bool(); } - let _e1111 = phi_2248_; - phi_2250_ = _e1111; - phi_2251_ = select(true, false, _e1065); + let _e1111 = phi_2206_; + phi_2208_ = _e1111; + phi_2209_ = select(true, false, _e1065); } else { - phi_2250_ = bool(); - phi_2251_ = true; + phi_2208_ = bool(); + phi_2209_ = true; } - let _e1114 = phi_2250_; - let _e1116 = phi_2251_; - phi_2252_ = _e1114; - phi_2253_ = _e1116; + let _e1114 = phi_2208_; + let _e1116 = phi_2209_; + phi_2210_ = _e1114; + phi_2211_ = _e1116; } else { - phi_2252_ = bool(); - phi_2253_ = true; + phi_2210_ = bool(); + phi_2211_ = true; } - let _e1118 = phi_2252_; - let _e1120 = phi_2253_; + let _e1118 = phi_2210_; + let _e1120 = phi_2211_; if select(_e1118, false, _e1120) { - phi_2261_ = type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)); + phi_2219_ = type_21(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)); } else { let _e2072 = local_31; - phi_2261_ = _e2072; + phi_2219_ = _e2072; } - let _e1123 = phi_2261_; + let _e1123 = phi_2219_; let _e1146 = fma(_e1123.member_2.z, _e1123.member_3.w, -((_e1123.member_2.w * _e1123.member_3.z))); let _e1149 = fma(_e1123.member_2.y, _e1123.member_3.w, -((_e1123.member_2.w * _e1123.member_3.y))); let _e1152 = fma(_e1123.member_2.y, _e1123.member_3.z, -((_e1123.member_2.z * _e1123.member_3.y))); @@ -833,19 +833,19 @@ fn function() { let _e1161 = fma(_e1123.member_2.x, _e1123.member_3.y, -((_e1123.member_2.y * _e1123.member_3.x))); let _e1183 = fma(-(_e1123.member.w), fma(_e1123.member_1.z, _e1161, fma(_e1123.member_1.x, _e1152, -((_e1123.member_1.y * _e1158)))), fma(_e1123.member.z, fma(_e1123.member_1.w, _e1161, fma(_e1123.member_1.x, _e1149, -((_e1123.member_1.y * _e1155)))), fma(_e1123.member.x, fma(_e1123.member_1.w, _e1152, fma(_e1123.member_1.y, _e1146, -((_e1123.member_1.z * _e1149)))), -((_e1123.member.y * fma(_e1123.member_1.w, _e1158, fma(_e1123.member_1.x, _e1146, -((_e1123.member_1.z * _e1155))))))))); if (_e1183 == 0f) { - phi_3363_ = type_27(vec3(1f, 1f, 1f), vec4(0f, 0f, 0f, 1f), vec3(0f, 0f, 0f)); - phi_3364_ = type_27(); - phi_3365_ = true; + phi_3318_ = type_27(vec3(1f, 1f, 1f), vec4(0f, 0f, 0f, 1f), vec3(0f, 0f, 0f)); + phi_3319_ = type_27(); + phi_3320_ = true; } else { let _e1192 = (sqrt(fma(_e1123.member.w, _e1123.member.w, fma(_e1123.member.z, _e1123.member.z, fma(_e1123.member.x, _e1123.member.x, (_e1123.member.y * _e1123.member.y))))) * select(-1f, 1f, (_e1183 >= 0f))); let _e1197 = sqrt(fma(_e1123.member_1.w, _e1123.member_1.w, fma(_e1123.member_1.z, _e1123.member_1.z, fma(_e1123.member_1.x, _e1123.member_1.x, (_e1123.member_1.y * _e1123.member_1.y))))); let _e1202 = sqrt(fma(_e1123.member_2.w, _e1123.member_2.w, fma(_e1123.member_2.z, _e1123.member_2.z, fma(_e1123.member_2.x, _e1123.member_2.x, (_e1123.member_2.y * _e1123.member_2.y))))); if (_e1192 != 0f) { - phi_3251_ = select(true, false, (_e1197 != 0f)); + phi_3206_ = select(true, false, (_e1197 != 0f)); } else { - phi_3251_ = true; + phi_3206_ = true; } - let _e1209 = phi_3251_; + let _e1209 = phi_3206_; let _e1210 = select((_e1202 != 0f), false, _e1209); if _e1210 { let _e1211 = (1f / _e1192); @@ -862,92 +862,92 @@ fn function() { if (_e1253 <= 0f) { let _e1269 = (_e1255 - _e1253); let _e1271 = (0.5f / sqrt(_e1269)); - phi_3346_ = vec4((_e1269 * _e1271), (fma(_e1123.member.y, _e1211, _e1216) * _e1271), (fma(_e1123.member.z, _e1211, _e1217) * _e1271), (fma(_e1123.member_1.z, _e1212, -(_e1218)) * _e1271)); + phi_3301_ = vec4((_e1269 * _e1271), (fma(_e1123.member.y, _e1211, _e1216) * _e1271), (fma(_e1123.member.z, _e1211, _e1217) * _e1271), (fma(_e1123.member_1.z, _e1212, -(_e1218)) * _e1271)); } else { let _e1257 = (_e1255 + _e1253); let _e1259 = (0.5f / sqrt(_e1257)); - phi_3346_ = vec4((fma(_e1123.member.y, _e1211, _e1216) * _e1259), (_e1257 * _e1259), (fma(_e1123.member_1.z, _e1212, _e1218) * _e1259), (fma(_e1123.member_2.x, _e1213, -(_e1215)) * _e1259)); + phi_3301_ = vec4((fma(_e1123.member.y, _e1211, _e1216) * _e1259), (_e1257 * _e1259), (fma(_e1123.member_1.z, _e1212, _e1218) * _e1259), (fma(_e1123.member_2.x, _e1213, -(_e1215)) * _e1259)); } - let _e1282 = phi_3346_; - phi_3348_ = _e1282; + let _e1282 = phi_3301_; + phi_3303_ = _e1282; } else { let _e1221 = fma(_e1123.member_1.y, _e1212, _e1214); let _e1222 = fma(_e1123.member_2.z, _e1213, 1f); if (_e1221 <= 0f) { let _e1238 = (_e1222 - _e1221); let _e1240 = (0.5f / sqrt(_e1238)); - phi_3316_ = vec4((fma(_e1123.member.z, _e1211, _e1217) * _e1240), (fma(_e1123.member_1.z, _e1212, _e1218) * _e1240), (_e1238 * _e1240), (fma(_e1123.member.y, _e1211, -(_e1216)) * _e1240)); + phi_3271_ = vec4((fma(_e1123.member.z, _e1211, _e1217) * _e1240), (fma(_e1123.member_1.z, _e1212, _e1218) * _e1240), (_e1238 * _e1240), (fma(_e1123.member.y, _e1211, -(_e1216)) * _e1240)); } else { let _e1224 = (_e1222 + _e1221); let _e1226 = (0.5f / sqrt(_e1224)); - phi_3316_ = vec4((fma(_e1123.member_1.z, _e1212, -(_e1218)) * _e1226), (fma(_e1123.member_2.x, _e1213, -(_e1215)) * _e1226), (fma(_e1123.member.y, _e1211, -(_e1216)) * _e1226), (_e1224 * _e1226)); + phi_3271_ = vec4((fma(_e1123.member_1.z, _e1212, -(_e1218)) * _e1226), (fma(_e1123.member_2.x, _e1213, -(_e1215)) * _e1226), (fma(_e1123.member.y, _e1211, -(_e1216)) * _e1226), (_e1224 * _e1226)); } - let _e1251 = phi_3316_; - phi_3348_ = _e1251; + let _e1251 = phi_3271_; + phi_3303_ = _e1251; } - let _e1284 = phi_3348_; - phi_3357_ = type_27(vec3(_e1192, _e1197, _e1202), _e1284, vec3(_e1123.member_3.x, _e1123.member_3.y, _e1123.member_3.z)); - phi_3358_ = type_27(); + let _e1284 = phi_3303_; + phi_3312_ = type_27(vec3(_e1192, _e1197, _e1202), _e1284, vec3(_e1123.member_3.x, _e1123.member_3.y, _e1123.member_3.z)); + phi_3313_ = type_27(); } else { - phi_3357_ = type_27(); - phi_3358_ = type_27(vec3(1f, 1f, 1f), vec4(0f, 0f, 0f, 1f), vec3(0f, 0f, 0f)); + phi_3312_ = type_27(); + phi_3313_ = type_27(vec3(1f, 1f, 1f), vec4(0f, 0f, 0f, 1f), vec3(0f, 0f, 0f)); } - let _e1288 = phi_3357_; - let _e1290 = phi_3358_; - phi_3363_ = _e1290; - phi_3364_ = _e1288; - phi_3365_ = select(true, false, _e1210); + let _e1288 = phi_3312_; + let _e1290 = phi_3313_; + phi_3318_ = _e1290; + phi_3319_ = _e1288; + phi_3320_ = select(true, false, _e1210); } - let _e1293 = phi_3363_; - let _e1295 = phi_3364_; - let _e1297 = phi_3365_; + let _e1293 = phi_3318_; + let _e1295 = phi_3319_; + let _e1297 = phi_3320_; if _e1297 { - phi_3369_ = _e1293; + phi_3324_ = _e1293; } else { - phi_3369_ = _e1295; + phi_3324_ = _e1295; } - let _e1299 = phi_3369_; - phi_2263_ = type_27(_e1299.member_2, _e1299.member_1, _e1299.member); + let _e1299 = phi_3324_; + phi_2221_ = type_27(_e1299.member_2, _e1299.member_1, _e1299.member); } else { - phi_2263_ = type_27(); + phi_2221_ = type_27(); } - let _e1305 = phi_2263_; - phi_2265_ = _e1305; - phi_2266_ = select(true, false, _e535); + let _e1305 = phi_2221_; + phi_2223_ = _e1305; + phi_2224_ = select(true, false, _e535); } else { - phi_2265_ = type_27(); - phi_2266_ = true; + phi_2223_ = type_27(); + phi_2224_ = true; } - let _e1308 = phi_2265_; - let _e1310 = phi_2266_; + let _e1308 = phi_2223_; + let _e1310 = phi_2224_; if _e1310 { if (_e101 >= 10u) { - phi_3463_ = (_e129 <= (_e101 - 10u)); + phi_3418_ = (_e129 <= (_e101 - 10u)); } else { - phi_3463_ = false; + phi_3418_ = false; } - let _e1315 = phi_3463_; + let _e1315 = phi_3418_; if _e1315 { - let _e1318 = global_2.member[_e129]; - let _e1323 = global_2.member[(_e129 + 1u)]; - let _e1328 = global_2.member[(_e129 + 2u)]; - let _e1334 = global_2.member[(_e129 + 3u)]; - let _e1339 = global_2.member[(_e129 + 4u)]; - let _e1344 = global_2.member[(_e129 + 5u)]; - let _e1349 = global_2.member[(_e129 + 6u)]; - let _e1355 = global_2.member[(_e129 + 7u)]; - let _e1360 = global_2.member[(_e129 + 8u)]; - let _e1365 = global_2.member[(_e129 + 9u)]; - phi_2319_ = type_27(vec3(bitcast(_e1318), bitcast(_e1323), bitcast(_e1328)), vec4(bitcast(_e1334), bitcast(_e1339), bitcast(_e1344), bitcast(_e1349)), vec3(bitcast(_e1355), bitcast(_e1360), bitcast(_e1365))); + let _e1318 = global.member[_e129]; + let _e1323 = global.member[(_e129 + 1u)]; + let _e1328 = global.member[(_e129 + 2u)]; + let _e1334 = global.member[(_e129 + 3u)]; + let _e1339 = global.member[(_e129 + 4u)]; + let _e1344 = global.member[(_e129 + 5u)]; + let _e1349 = global.member[(_e129 + 6u)]; + let _e1355 = global.member[(_e129 + 7u)]; + let _e1360 = global.member[(_e129 + 8u)]; + let _e1365 = global.member[(_e129 + 9u)]; + phi_2277_ = type_27(vec3(bitcast(_e1318), bitcast(_e1323), bitcast(_e1328)), vec4(bitcast(_e1334), bitcast(_e1339), bitcast(_e1344), bitcast(_e1349)), vec3(bitcast(_e1355), bitcast(_e1360), bitcast(_e1365))); } else { - phi_2319_ = type_27(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); + phi_2277_ = type_27(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); } - let _e1370 = phi_2319_; - phi_2320_ = _e1370; + let _e1370 = phi_2277_; + phi_2278_ = _e1370; } else { - phi_2320_ = _e1308; + phi_2278_ = _e1308; } - let _e1372 = phi_2320_; + let _e1372 = phi_2278_; let _e1380 = (_e1372.member_1.x + _e1372.member_1.x); let _e1381 = (_e1372.member_1.y + _e1372.member_1.y); let _e1382 = (_e1372.member_1.z + _e1372.member_1.z); @@ -972,19 +972,19 @@ fn function() { let _e1456 = local_28; let _e1464 = sqrt(fma(_e1456.member_2.z, _e1456.member_2.z, fma(_e1456.member_2.x, _e1456.member_2.x, (_e1456.member_2.y * _e1456.member_2.y)))); if (_e1464 == 0f) { - phi_2407_ = vec3(0f, 0f, 0f); + phi_2365_ = vec3(0f, 0f, 0f); } else { - phi_2407_ = (_e1456.member_2 * (1f / _e1464)); + phi_2365_ = (_e1456.member_2 * (1f / _e1464)); } - let _e1469 = phi_2407_; + let _e1469 = phi_2365_; let _e1471 = local_29; let _e1480 = sqrt(fma(_e1471.member_3.z, _e1471.member_3.z, fma(_e1471.member_3.x, _e1471.member_3.x, (_e1471.member_3.y * _e1471.member_3.y)))); if (_e1480 == 0f) { - phi_3554_ = vec3(0f, 0f, 0f); + phi_3509_ = vec3(0f, 0f, 0f); } else { - phi_3554_ = (vec3(_e1471.member_3.x, _e1471.member_3.y, _e1471.member_3.z) * (1f / _e1480)); + phi_3509_ = (vec3(_e1471.member_3.x, _e1471.member_3.y, _e1471.member_3.z) * (1f / _e1480)); } - let _e1485 = phi_3554_; + let _e1485 = phi_3509_; let _e1487 = (_e1469.x / (_e1372.member_2.x * _e1372.member_2.x)); let _e1489 = (_e1469.y / (_e1372.member_2.y * _e1372.member_2.y)); let _e1491 = (_e1469.z / (_e1372.member_2.z * _e1372.member_2.z)); @@ -993,160 +993,160 @@ fn function() { let _e1500 = fma(_e1411.z, _e1491, fma(_e1407.z, _e1487, (_e1409.z * _e1489))); let _e1505 = sqrt(fma(_e1500, _e1500, fma(_e1498, _e1498, (_e1499 * _e1499)))); if (_e1505 == 0f) { - phi_3589_ = vec3(0f, 0f, 0f); + phi_3544_ = vec3(0f, 0f, 0f); } else { - phi_3589_ = (vec3(_e1498, _e1499, _e1500) * (1f / _e1505)); + phi_3544_ = (vec3(_e1498, _e1499, _e1500) * (1f / _e1505)); } - let _e1510 = phi_3589_; + let _e1510 = phi_3544_; global_10 = _e1510; let _e1520 = fma(_e1411.x, _e1485.z, fma(_e1407.x, _e1485.x, (_e1409.x * _e1485.y))); let _e1521 = fma(_e1411.y, _e1485.z, fma(_e1407.y, _e1485.x, (_e1409.y * _e1485.y))); let _e1522 = fma(_e1411.z, _e1485.z, fma(_e1407.z, _e1485.x, (_e1409.z * _e1485.y))); let _e1527 = sqrt(fma(_e1522, _e1522, fma(_e1520, _e1520, (_e1521 * _e1521)))); if (_e1527 == 0f) { - phi_3624_ = vec3(0f, 0f, 0f); + phi_3579_ = vec3(0f, 0f, 0f); } else { - phi_3624_ = (vec3(_e1520, _e1521, _e1522) * (1f / _e1527)); + phi_3579_ = (vec3(_e1520, _e1521, _e1522) * (1f / _e1527)); } - let _e1532 = phi_3624_; + let _e1532 = phi_3579_; global_11 = _e1532; let _e1549 = local_30; let _e1553 = select(-1f, 1f, (_e1549.member_3.w >= 0f)); global_12 = vec3((fma(_e1510.y, _e1532.z, -((_e1532.y * _e1510.z))) * _e1553), (fma(_e1510.z, _e1532.x, -((_e1532.z * _e1510.x))) * _e1553), (fma(_e1510.x, _e1532.y, -((_e1532.x * _e1510.y))) * _e1553)); if (_e101 >= 86u) { - phi_3637_ = (_e125 <= (_e101 - 86u)); + phi_3592_ = (_e125 <= (_e101 - 86u)); } else { - phi_3637_ = false; + phi_3592_ = false; } - let _e1562 = phi_3637_; + let _e1562 = phi_3592_; if _e1562 { - let _e1565 = global_2.member[_e125]; - let _e1570 = global_2.member[(_e125 + 1u)]; - let _e1575 = global_2.member[(_e125 + 2u)]; - let _e1580 = global_2.member[(_e125 + 3u)]; - let _e1586 = global_2.member[(_e125 + 4u)]; - let _e1591 = global_2.member[(_e125 + 5u)]; - let _e1596 = global_2.member[(_e125 + 6u)]; - let _e1601 = global_2.member[(_e125 + 7u)]; - let _e1607 = global_2.member[(_e125 + 8u)]; - let _e1612 = global_2.member[(_e125 + 9u)]; - let _e1617 = global_2.member[(_e125 + 10u)]; - let _e1622 = global_2.member[(_e125 + 11u)]; - let _e1628 = global_2.member[(_e125 + 12u)]; - let _e1633 = global_2.member[(_e125 + 13u)]; - let _e1638 = global_2.member[(_e125 + 14u)]; - let _e1643 = global_2.member[(_e125 + 15u)]; - let _e1650 = global_2.member[(_e125 + 16u)]; - let _e1655 = global_2.member[(_e125 + 17u)]; - let _e1660 = global_2.member[(_e125 + 18u)]; - let _e1665 = global_2.member[(_e125 + 19u)]; - let _e1671 = global_2.member[(_e125 + 20u)]; - let _e1676 = global_2.member[(_e125 + 21u)]; - let _e1681 = global_2.member[(_e125 + 22u)]; - let _e1686 = global_2.member[(_e125 + 23u)]; - let _e1692 = global_2.member[(_e125 + 24u)]; - let _e1697 = global_2.member[(_e125 + 25u)]; - let _e1702 = global_2.member[(_e125 + 26u)]; - let _e1707 = global_2.member[(_e125 + 27u)]; - let _e1713 = global_2.member[(_e125 + 28u)]; - let _e1718 = global_2.member[(_e125 + 29u)]; - let _e1723 = global_2.member[(_e125 + 30u)]; - let _e1728 = global_2.member[(_e125 + 31u)]; - let _e1735 = global_2.member[(_e125 + 32u)]; - let _e1740 = global_2.member[(_e125 + 33u)]; - let _e1745 = global_2.member[(_e125 + 34u)]; + let _e1565 = global.member[_e125]; + let _e1570 = global.member[(_e125 + 1u)]; + let _e1575 = global.member[(_e125 + 2u)]; + let _e1580 = global.member[(_e125 + 3u)]; + let _e1586 = global.member[(_e125 + 4u)]; + let _e1591 = global.member[(_e125 + 5u)]; + let _e1596 = global.member[(_e125 + 6u)]; + let _e1601 = global.member[(_e125 + 7u)]; + let _e1607 = global.member[(_e125 + 8u)]; + let _e1612 = global.member[(_e125 + 9u)]; + let _e1617 = global.member[(_e125 + 10u)]; + let _e1622 = global.member[(_e125 + 11u)]; + let _e1628 = global.member[(_e125 + 12u)]; + let _e1633 = global.member[(_e125 + 13u)]; + let _e1638 = global.member[(_e125 + 14u)]; + let _e1643 = global.member[(_e125 + 15u)]; + let _e1650 = global.member[(_e125 + 16u)]; + let _e1655 = global.member[(_e125 + 17u)]; + let _e1660 = global.member[(_e125 + 18u)]; + let _e1665 = global.member[(_e125 + 19u)]; + let _e1671 = global.member[(_e125 + 20u)]; + let _e1676 = global.member[(_e125 + 21u)]; + let _e1681 = global.member[(_e125 + 22u)]; + let _e1686 = global.member[(_e125 + 23u)]; + let _e1692 = global.member[(_e125 + 24u)]; + let _e1697 = global.member[(_e125 + 25u)]; + let _e1702 = global.member[(_e125 + 26u)]; + let _e1707 = global.member[(_e125 + 27u)]; + let _e1713 = global.member[(_e125 + 28u)]; + let _e1718 = global.member[(_e125 + 29u)]; + let _e1723 = global.member[(_e125 + 30u)]; + let _e1728 = global.member[(_e125 + 31u)]; + let _e1735 = global.member[(_e125 + 32u)]; + let _e1740 = global.member[(_e125 + 33u)]; + let _e1745 = global.member[(_e125 + 34u)]; local_3 = array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); - phi_2691_ = type_24(0u, 6u); + phi_2649_ = type_14(0u, 6u); loop { - let _e1750 = phi_2691_; + let _e1750 = phi_2649_; if (_e1750.member < _e1750.member_1) { - phi_2692_ = type_24((_e1750.member + 1u), _e1750.member_1); - phi_2715_ = type_24(1u, _e1750.member); + phi_2650_ = type_14((_e1750.member + 1u), _e1750.member_1); + phi_2673_ = type_14(1u, _e1750.member); } else { - phi_2692_ = _e1750; - phi_2715_ = type_24(0u, type_24().member_1); + phi_2650_ = _e1750; + phi_2673_ = type_14(0u, type_14().member_1); } - let _e1763 = phi_2692_; - let _e1765 = phi_2715_; + let _e1763 = phi_2650_; + let _e1765 = phi_2673_; switch bitcast(_e1765.member) { case 0: { - phi_2742_ = false; + phi_2700_ = false; break; } case 1: { let _e1770 = ((_e125 + 35u) + (_e1765.member_1 * 4u)); - let _e1773 = global_2.member[_e1770]; - let _e1778 = global_2.member[(_e1770 + 1u)]; - let _e1783 = global_2.member[(_e1770 + 2u)]; - let _e1788 = global_2.member[(_e1770 + 3u)]; + let _e1773 = global.member[_e1770]; + let _e1778 = global.member[(_e1770 + 1u)]; + let _e1783 = global.member[(_e1770 + 2u)]; + let _e1788 = global.member[(_e1770 + 3u)]; local_3[_e1765.member_1] = vec4(bitcast(_e1773), bitcast(_e1778), bitcast(_e1783), bitcast(_e1788)); - phi_2742_ = true; + phi_2700_ = true; break; } default: { - phi_2742_ = bool(); + phi_2700_ = bool(); break; } } - let _e1793 = phi_2742_; + let _e1793 = phi_2700_; continue; continuing { - phi_2691_ = _e1763; + phi_2649_ = _e1763; break if !(_e1793); } } let _e1795 = local_3; local_2 = array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); - phi_2748_ = type_24(0u, 8u); + phi_2706_ = type_14(0u, 8u); loop { - let _e1798 = phi_2748_; + let _e1798 = phi_2706_; if (_e1798.member < _e1798.member_1) { - phi_2749_ = type_24((_e1798.member + 1u), _e1798.member_1); - phi_2772_ = type_24(1u, _e1798.member); + phi_2707_ = type_14((_e1798.member + 1u), _e1798.member_1); + phi_2730_ = type_14(1u, _e1798.member); } else { - phi_2749_ = _e1798; - phi_2772_ = type_24(0u, type_24().member_1); + phi_2707_ = _e1798; + phi_2730_ = type_14(0u, type_14().member_1); } - let _e1811 = phi_2749_; - let _e1813 = phi_2772_; + let _e1811 = phi_2707_; + let _e1813 = phi_2730_; switch bitcast(_e1813.member) { case 0: { - phi_2795_ = false; + phi_2753_ = false; break; } case 1: { let _e1818 = ((_e125 + 59u) + (_e1813.member_1 * 3u)); - let _e1821 = global_2.member[_e1818]; - let _e1826 = global_2.member[(_e1818 + 1u)]; - let _e1831 = global_2.member[(_e1818 + 2u)]; + let _e1821 = global.member[_e1818]; + let _e1826 = global.member[(_e1818 + 1u)]; + let _e1831 = global.member[(_e1818 + 2u)]; local_2[_e1813.member_1] = vec3(bitcast(_e1821), bitcast(_e1826), bitcast(_e1831)); - phi_2795_ = true; + phi_2753_ = true; break; } default: { - phi_2795_ = bool(); + phi_2753_ = bool(); break; } } - let _e1836 = phi_2795_; + let _e1836 = phi_2753_; continue; continuing { - phi_2748_ = _e1811; + phi_2706_ = _e1811; break if !(_e1836); } } let _e1838 = local_2; - let _e1842 = global_2.member[(_e125 + 83u)]; - let _e1847 = global_2.member[(_e125 + 84u)]; - let _e1852 = global_2.member[(_e125 + 85u)]; - phi_2816_ = type_22(type_20(vec4(bitcast(_e1565), bitcast(_e1570), bitcast(_e1575), bitcast(_e1580)), vec4(bitcast(_e1586), bitcast(_e1591), bitcast(_e1596), bitcast(_e1601)), vec4(bitcast(_e1607), bitcast(_e1612), bitcast(_e1617), bitcast(_e1622)), vec4(bitcast(_e1628), bitcast(_e1633), bitcast(_e1638), bitcast(_e1643))), type_20(vec4(bitcast(_e1650), bitcast(_e1655), bitcast(_e1660), bitcast(_e1665)), vec4(bitcast(_e1671), bitcast(_e1676), bitcast(_e1681), bitcast(_e1686)), vec4(bitcast(_e1692), bitcast(_e1697), bitcast(_e1702), bitcast(_e1707)), vec4(bitcast(_e1713), bitcast(_e1718), bitcast(_e1723), bitcast(_e1728))), vec3(bitcast(_e1735), bitcast(_e1740), bitcast(_e1745)), type_21(_e1838, _e1795, vec3(bitcast(_e1842), bitcast(_e1847), bitcast(_e1852)))); + let _e1842 = global.member[(_e125 + 83u)]; + let _e1847 = global.member[(_e125 + 84u)]; + let _e1852 = global.member[(_e125 + 85u)]; + phi_2774_ = type_23(type_21(vec4(bitcast(_e1565), bitcast(_e1570), bitcast(_e1575), bitcast(_e1580)), vec4(bitcast(_e1586), bitcast(_e1591), bitcast(_e1596), bitcast(_e1601)), vec4(bitcast(_e1607), bitcast(_e1612), bitcast(_e1617), bitcast(_e1622)), vec4(bitcast(_e1628), bitcast(_e1633), bitcast(_e1638), bitcast(_e1643))), type_21(vec4(bitcast(_e1650), bitcast(_e1655), bitcast(_e1660), bitcast(_e1665)), vec4(bitcast(_e1671), bitcast(_e1676), bitcast(_e1681), bitcast(_e1686)), vec4(bitcast(_e1692), bitcast(_e1697), bitcast(_e1702), bitcast(_e1707)), vec4(bitcast(_e1713), bitcast(_e1718), bitcast(_e1723), bitcast(_e1728))), vec3(bitcast(_e1735), bitcast(_e1740), bitcast(_e1745)), type_22(_e1838, _e1795, vec3(bitcast(_e1842), bitcast(_e1847), bitcast(_e1852)))); } else { - phi_2816_ = type_22(type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_20(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_21(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); + phi_2774_ = type_23(type_21(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_21(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_22(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); } - let _e1858 = phi_2816_; - global_1 = vec4((fma(fma(_e1858.member.member_3.x, _e1858.member_1.member_2.w, fma(_e1858.member.member_2.x, _e1858.member_1.member_2.z, fma(_e1858.member.member.x, _e1858.member_1.member_2.x, (_e1858.member.member_1.x * _e1858.member_1.member_2.y)))), _e1441, fma(fma(_e1858.member.member_3.x, _e1858.member_1.member.w, fma(_e1858.member.member_2.x, _e1858.member_1.member.z, fma(_e1858.member.member.x, _e1858.member_1.member.x, (_e1858.member.member_1.x * _e1858.member_1.member.y)))), _e1439, (fma(_e1858.member.member_3.x, _e1858.member_1.member_1.w, fma(_e1858.member.member_2.x, _e1858.member_1.member_1.z, fma(_e1858.member.member.x, _e1858.member_1.member_1.x, (_e1858.member.member_1.x * _e1858.member_1.member_1.y)))) * _e1440))) + fma(_e1858.member.member_3.x, _e1858.member_1.member_3.w, fma(_e1858.member.member_2.x, _e1858.member_1.member_3.z, fma(_e1858.member.member.x, _e1858.member_1.member_3.x, (_e1858.member.member_1.x * _e1858.member_1.member_3.y))))), (fma(fma(_e1858.member.member_3.y, _e1858.member_1.member_2.w, fma(_e1858.member.member_2.y, _e1858.member_1.member_2.z, fma(_e1858.member.member.y, _e1858.member_1.member_2.x, (_e1858.member.member_1.y * _e1858.member_1.member_2.y)))), _e1441, fma(fma(_e1858.member.member_3.y, _e1858.member_1.member.w, fma(_e1858.member.member_2.y, _e1858.member_1.member.z, fma(_e1858.member.member.y, _e1858.member_1.member.x, (_e1858.member.member_1.y * _e1858.member_1.member.y)))), _e1439, (fma(_e1858.member.member_3.y, _e1858.member_1.member_1.w, fma(_e1858.member.member_2.y, _e1858.member_1.member_1.z, fma(_e1858.member.member.y, _e1858.member_1.member_1.x, (_e1858.member.member_1.y * _e1858.member_1.member_1.y)))) * _e1440))) + fma(_e1858.member.member_3.y, _e1858.member_1.member_3.w, fma(_e1858.member.member_2.y, _e1858.member_1.member_3.z, fma(_e1858.member.member.y, _e1858.member_1.member_3.x, (_e1858.member.member_1.y * _e1858.member_1.member_3.y))))), (fma(fma(_e1858.member.member_3.z, _e1858.member_1.member_2.w, fma(_e1858.member.member_2.z, _e1858.member_1.member_2.z, fma(_e1858.member.member.z, _e1858.member_1.member_2.x, (_e1858.member.member_1.z * _e1858.member_1.member_2.y)))), _e1441, fma(fma(_e1858.member.member_3.z, _e1858.member_1.member.w, fma(_e1858.member.member_2.z, _e1858.member_1.member.z, fma(_e1858.member.member.z, _e1858.member_1.member.x, (_e1858.member.member_1.z * _e1858.member_1.member.y)))), _e1439, (fma(_e1858.member.member_3.z, _e1858.member_1.member_1.w, fma(_e1858.member.member_2.z, _e1858.member_1.member_1.z, fma(_e1858.member.member.z, _e1858.member_1.member_1.x, (_e1858.member.member_1.z * _e1858.member_1.member_1.y)))) * _e1440))) + fma(_e1858.member.member_3.z, _e1858.member_1.member_3.w, fma(_e1858.member.member_2.z, _e1858.member_1.member_3.z, fma(_e1858.member.member.z, _e1858.member_1.member_3.x, (_e1858.member.member_1.z * _e1858.member_1.member_3.y))))), (fma(fma(_e1858.member.member_3.w, _e1858.member_1.member_2.w, fma(_e1858.member.member_2.w, _e1858.member_1.member_2.z, fma(_e1858.member.member.w, _e1858.member_1.member_2.x, (_e1858.member.member_1.w * _e1858.member_1.member_2.y)))), _e1441, fma(fma(_e1858.member.member_3.w, _e1858.member_1.member.w, fma(_e1858.member.member_2.w, _e1858.member_1.member.z, fma(_e1858.member.member.w, _e1858.member_1.member.x, (_e1858.member.member_1.w * _e1858.member_1.member.y)))), _e1439, (fma(_e1858.member.member_3.w, _e1858.member_1.member_1.w, fma(_e1858.member.member_2.w, _e1858.member_1.member_1.z, fma(_e1858.member.member.w, _e1858.member_1.member_1.x, (_e1858.member.member_1.w * _e1858.member_1.member_1.y)))) * _e1440))) + fma(_e1858.member.member_3.w, _e1858.member_1.member_3.w, fma(_e1858.member.member_2.w, _e1858.member_1.member_3.z, fma(_e1858.member.member.w, _e1858.member_1.member_3.x, (_e1858.member.member_1.w * _e1858.member_1.member_3.y)))))); + let _e1858 = phi_2774_; + global_2 = vec4((fma(fma(_e1858.member.member_3.x, _e1858.member_1.member_2.w, fma(_e1858.member.member_2.x, _e1858.member_1.member_2.z, fma(_e1858.member.member.x, _e1858.member_1.member_2.x, (_e1858.member.member_1.x * _e1858.member_1.member_2.y)))), _e1441, fma(fma(_e1858.member.member_3.x, _e1858.member_1.member.w, fma(_e1858.member.member_2.x, _e1858.member_1.member.z, fma(_e1858.member.member.x, _e1858.member_1.member.x, (_e1858.member.member_1.x * _e1858.member_1.member.y)))), _e1439, (fma(_e1858.member.member_3.x, _e1858.member_1.member_1.w, fma(_e1858.member.member_2.x, _e1858.member_1.member_1.z, fma(_e1858.member.member.x, _e1858.member_1.member_1.x, (_e1858.member.member_1.x * _e1858.member_1.member_1.y)))) * _e1440))) + fma(_e1858.member.member_3.x, _e1858.member_1.member_3.w, fma(_e1858.member.member_2.x, _e1858.member_1.member_3.z, fma(_e1858.member.member.x, _e1858.member_1.member_3.x, (_e1858.member.member_1.x * _e1858.member_1.member_3.y))))), (fma(fma(_e1858.member.member_3.y, _e1858.member_1.member_2.w, fma(_e1858.member.member_2.y, _e1858.member_1.member_2.z, fma(_e1858.member.member.y, _e1858.member_1.member_2.x, (_e1858.member.member_1.y * _e1858.member_1.member_2.y)))), _e1441, fma(fma(_e1858.member.member_3.y, _e1858.member_1.member.w, fma(_e1858.member.member_2.y, _e1858.member_1.member.z, fma(_e1858.member.member.y, _e1858.member_1.member.x, (_e1858.member.member_1.y * _e1858.member_1.member.y)))), _e1439, (fma(_e1858.member.member_3.y, _e1858.member_1.member_1.w, fma(_e1858.member.member_2.y, _e1858.member_1.member_1.z, fma(_e1858.member.member.y, _e1858.member_1.member_1.x, (_e1858.member.member_1.y * _e1858.member_1.member_1.y)))) * _e1440))) + fma(_e1858.member.member_3.y, _e1858.member_1.member_3.w, fma(_e1858.member.member_2.y, _e1858.member_1.member_3.z, fma(_e1858.member.member.y, _e1858.member_1.member_3.x, (_e1858.member.member_1.y * _e1858.member_1.member_3.y))))), (fma(fma(_e1858.member.member_3.z, _e1858.member_1.member_2.w, fma(_e1858.member.member_2.z, _e1858.member_1.member_2.z, fma(_e1858.member.member.z, _e1858.member_1.member_2.x, (_e1858.member.member_1.z * _e1858.member_1.member_2.y)))), _e1441, fma(fma(_e1858.member.member_3.z, _e1858.member_1.member.w, fma(_e1858.member.member_2.z, _e1858.member_1.member.z, fma(_e1858.member.member.z, _e1858.member_1.member.x, (_e1858.member.member_1.z * _e1858.member_1.member.y)))), _e1439, (fma(_e1858.member.member_3.z, _e1858.member_1.member_1.w, fma(_e1858.member.member_2.z, _e1858.member_1.member_1.z, fma(_e1858.member.member.z, _e1858.member_1.member_1.x, (_e1858.member.member_1.z * _e1858.member_1.member_1.y)))) * _e1440))) + fma(_e1858.member.member_3.z, _e1858.member_1.member_3.w, fma(_e1858.member.member_2.z, _e1858.member_1.member_3.z, fma(_e1858.member.member.z, _e1858.member_1.member_3.x, (_e1858.member.member_1.z * _e1858.member_1.member_3.y))))), (fma(fma(_e1858.member.member_3.w, _e1858.member_1.member_2.w, fma(_e1858.member.member_2.w, _e1858.member_1.member_2.z, fma(_e1858.member.member.w, _e1858.member_1.member_2.x, (_e1858.member.member_1.w * _e1858.member_1.member_2.y)))), _e1441, fma(fma(_e1858.member.member_3.w, _e1858.member_1.member.w, fma(_e1858.member.member_2.w, _e1858.member_1.member.z, fma(_e1858.member.member.w, _e1858.member_1.member.x, (_e1858.member.member_1.w * _e1858.member_1.member.y)))), _e1439, (fma(_e1858.member.member_3.w, _e1858.member_1.member_1.w, fma(_e1858.member.member_2.w, _e1858.member_1.member_1.z, fma(_e1858.member.member.w, _e1858.member_1.member_1.x, (_e1858.member.member_1.w * _e1858.member_1.member_1.y)))) * _e1440))) + fma(_e1858.member.member_3.w, _e1858.member_1.member_3.w, fma(_e1858.member.member_2.w, _e1858.member_1.member_3.z, fma(_e1858.member.member.w, _e1858.member_1.member_3.x, (_e1858.member.member_1.w * _e1858.member_1.member_3.y)))))); } else { - global_1 = vec4(10f, 10f, 10f, 1f); + global_2 = vec4(10f, 10f, 10f, 1f); } break; } @@ -1157,10 +1157,10 @@ fn function() { @vertex fn stagerenderlet_vertex(@builtin(instance_index) param: u32, @builtin(vertex_index) param_1: u32) -> VertexOutput { global_3 = param; - global = param_1; + global_1 = param_1; function(); - let _e14 = global_1.y; - global_1.y = -(_e14); + let _e14 = global_2.y; + global_2.y = -(_e14); let _e16 = global_5; let _e17 = global_6; let _e18 = global_7; @@ -1169,6 +1169,6 @@ fn stagerenderlet_vertex(@builtin(instance_index) param: u32, @builtin(vertex_in let _e21 = global_11; let _e22 = global_12; let _e23 = global_9; - let _e24 = global_1; + let _e24 = global_2; return VertexOutput(_e16, _e17, _e18, _e19, _e20, _e21, _e22, _e23, _e24); } diff --git a/crates/renderling/shaders/tonemapping-tonemapping_fragment.spv b/crates/renderling/shaders/tonemapping-tonemapping_fragment.spv index 98edd89b210d4952afc397870b246c75b9281a4c..c982db1f51e42c53f3e407c5ca1ef4fd6824b04e 100644 GIT binary patch literal 5488 zcmZ9PdytQ16vtn;-AHW>ax0OLd&&LUj>}RjD_Ykwi`}Kk5@yO}a%q$b%Tx?2R*^xe z5fy7IGBpiSO~{m6uJvCR<5n|$KR?fToq6B!c+U5H&-tF`ectCizjrHDY@8ldsSrg` zM)Y?@O}g%kDn@viPuGm1TcflT&dMH=-DcYK@on07c#yc;qe@Jv|1%U_SvC^WCl}>U z%9}D}Vo_n&t`3YTn3`8ODZglX$RWOpMw&*t#vM{3A3IBG_i2VBE=ycv&G7w|h0SF% zJgcdrK`wS94KBmzae>iokU}>w>mVL|c(9LW4e;y>JlONB+4NXnEnzNOpZUngM}95+ zf4}C28eI2i)o9{tAe%UFL&Y`GTwMd-UE-Ri{83a}Tr=6=iW=Yt0;UGJ%{5ojz+XdA zEi^Zhr=@1>Zb6?IYP1w)4Xrh}!05M0p_{mE3eW9TQ<@wIYCWVG4f0LrVc8WNZZDg) zw$K{L>!49Lsv33FOdVq3?E-V5-|2>#imj)p&cWX$_ziazCXc=0{=jL$2PU3p%vE3O z=&qUiaMWP$xY*B3&8&<4X(bhKZw>C>26^l==YY5d!khv2fn3|eezK3g+wc*?S;ED8 zFLgKEU-;ey^<#d3aF1%Wdl~| zF+WOp&z9q{{%GNO`=`bDDdA}o4#x3M3qO(ZL%H407~wesbIT0p3IF;}`WJ@B3b#MH zIL;p@+^*7FaelsV_NnDDE)cHS>+4vrP&lpZ)n3iR**vL(*eblwr)2X^@XW2=Z}QbR z_+nh|jPS+n72^9jE4=blX1ssrgjWo>`8>}H&-i9foPR;MQ{nhH|Dtf^()Drv@4}l8 z9gg?+58;VBx5fE?3V(Q_{IiZ)Gw-%w>f&9$BJ{lGKH@l+Gc-7>Ts?GNc~@p?qy@~o zG)sf`1fKV!ST7atMy|ZPGfRc>5jRXeddxCm{Ag{Jk9T~nF!gx%H>m=?zqB~~>@hvy zvQ{%kGuJg$fuAdTo(5~j&QvZvX1)e%=Xo$#ANTZ<2Ast$kZp1FA&YxiHr#CGHP!rz z2EH7vm-lv|23q*9sy6Fl4Xnju{Fn6Ble1WZytx{uw02?#OOJIe(SYZ|N6lgleA;Qh<5q?^_R92D$;MAyj_#3X zTcW{wsD%zOJh#=FxvuMLfqQ*hgSD;Ep!Qk~v`aNAYpl~?KZ#>M$p;f(J-Q{eKfA;I zwUe)(26eL>U!LGuljlEA@T?c!?(a+SXi~>~du5}8w)ytSCKo+h+kV;l7qPbf8tBlg zjX#j!(e(Vm1dqPwe{ww9)T8&C{$a7{YAF^rOpF7d>0sZ+;Ql6?xf?;h0D?VoT>S|FuLRuhhC=q7i8;S>idV7 z-m>i-SRZ&zv2R20kz;Z11s~_o&hbXsrklEelHv(M(cEMHE-cU8W@ z!Dr9untb|~Iw$;A^DNOb{<`D&?S@C&_-m0;N1Ga+ zAL#gzs!I*NFHHaO1Wygm4@&UV@O-Z0(WV~XE2clp@n}=e^TQpFHud1`-5Mdx9#O}9 zBW1HMXq#`8Z1w^@JAbug=Shor^VOC;HsPx)-?-qjb=Q;6o(tbwtOGsc>pPzBFL<<# zzuWO+0#6;|n>apSJnN^X@l73H5O``D-^}rafv2YRnC5}!_lR1)$Fy`Dbv)PFan$hr zr@b(`oZEE z_ngygzGs8)yz>1Nv!=K3y^5akQxZJiuV@?pT!KF!+siC61^6z*E!s)sCnCz*E!u&ziu~f2ieqOsV6j)-1g~6SR3EK_V-C!#~*XN{axbuUmb6MkHA~q=F(BZs8k}zgOtxd@r)6r5fn5 Se?9dVPr7Du{?k+Jtnojli3SD$ literal 5488 zcmZ9Qd2AL{6vaQbRuHWQkWFh5*%uXy%2H~>QqUqrkX=dH3PuV7iLyir21Nx5Q6W%- zq9CCt8Uz&zDo8X25H$i4S&FRspG(80iRbt6?r<}cKHfd|-0i)2b7wwkRBxV|s8ubI zNTenHuC7Vf?TP9MG|Z>#ClWU&Qj$0~Z%|&x=`+T4%@fr*=*MAtEOU{8E_u(ziMc=iPz?0IUoc+}TGn9J%j9scO> zZ=iqg)tsThb%&~Mp*cgNp}3Zs!PEq96)?UT!mTy4PW1I;)kbqOY1(Q=t}k6X&Fw;- z_L8~4#O;toH*m)!F3!G7F<2Y5rAww>FgfqjTvr2K<3#NQ2Z31CG^o=qFc&@#To;qJ zO=Q(6=pPJv!gm7waP*7@qrvjjgGRWb(FEovgK+206QH#*a0aZI)zwiAC;O z8eC1~o2{9(z)>%I%*DRvXl9Mn(q0vSdup&>Ht^$qa1O9b7v>C*A79(^K9Y~Vm+`3K zT;Ye`w(*Y%w;7ez!|>z6(@r;v_&nh=8%nc`?=PIb@nRHz zfbje`wnzT?!j~6LjQj@*SJbH;@q>haTGTs=H&}Q=zv3v~Q^Jj291{5t6HXicUBr(N zEFOPPDav<7_~N!|(R$7budK|8_V1kViheil=Xv3o-|mV0F9<(eI4<(PC|t8_edPbU zaQUIb(f17Q#vs)n9?0Ejo?iI;!bL7`T z^Q#)@@>MU-?LrM=p}(Ts)I|-{;xYOvJ@xo3*1)e=qf)hFJ5cecYl#Lt7dmp5XrR*; zM7pJt**~rY!ETvk^w^v4o074^)a>4pjNaQV4|XaivRfe;y|-H#?AR-dw@Na4?DDln z?ro_C^^l7=*l^!gYv#J9uLainjs~@@(IEF)4PuvR)YMp~!G2=Le&P?tzHZ{C*E~u(I9WG<9Ek+YV!OSF`jziZGB&fCnkAJw^uT8h;6!klJO;;)wW-<{*uoKJ)1c6 zYU2;Ycw&0~V2mfe=YMuQvB^j8xA=!0Pi*pe{)pp=O+NUA;Y=MBX8q(b-7k_^Ke0`B zOfu^yUR|95&h4*~^_P6#5vPM><4!n^c%D1uIO4+P>v_)6d|sHi_+v-B9O*Ae)?YF& zHa#WVGq67Jnj+nXpu@-P-VZv?p`GK6lJUnLo^$NaA?MZZf0cp_5N4lEcS$#~H2h0bF461LiiK`h=+#`ktS@rdjBK8`0g zIXvIr@gtO%93x%+Ct^G~JU<}Dlf&~v98YZW@x5a84|P1T$>;fDjwd$x;O*HOF3cX0 z$8;kkvoFLp-AKvo1@Y|sHIQ7OSlFAcq2w_!U1RCS2A$R2L^``Kd~Z<)@r-Zkc)q{j ziEaFyjvpO(@)+O3@#Do)KRJzW>G%nOC#UhP9A6lCa$1jR6ZqER$mM%XJI9g7a~&K< z4&Q$=g^7zlcGiD7OJ=X=d)WB?Q!X7mm-U*>lFi3-9|Rqy)_*>fj6e49@%~dLo!!@G zJe4D+;;`nr$zqNVa=TZ{d5Dc*akS@qE7$+xX{W{8?f07(dJL^bWpP z$!YxT7|-`BIgOtaotcYvoFLp-4Bx43*y=NdtGvY){MRB7D*lx(=CyX{)3&}^AgE+U+6#7K|JG^I-dRm zPi*6tIiCIlPafk}IiCJQ{p2*h)baEmcyb!Q+VS)scye0*Srd5r54n7gDRUfoJom2S z$l?3XCSl^@kDc|Oa>?u!{RbQ0e?E~8p38d8Hp%8=y6r)Ssr8>vCF74he7ygxlg_@) zK9fxEpa=1c+ddr$wefv!zfbu85aW+I-hP*O{8cX9B!B, } @@ -8,7 +8,7 @@ struct type_14 { } @group(0) @binding(0) -var global: type_7; +var global: type_2; var global_1: vec2; @group(0) @binding(2) var global_2: sampler; diff --git a/crates/renderling/shaders/tonemapping-tonemapping_vertex.spv b/crates/renderling/shaders/tonemapping-tonemapping_vertex.spv index 7ad1855206afa3f26ab9b223ec7a232020323e5a..2dd7a0e91e8bf018bb81dc213638240e4be3c2d6 100644 GIT binary patch delta 352 zcmYk1I|>3p5JY=+cER-%xqj9ksOW+p3>8ESP0S4p#Z2#DVy-l1UcwW25Ha)~R>=;y z@R+LVo}S)&cn>d!*b|W)7=V@dVsW;BT+grG907}LGGGXw#Tfy9^m#p+cyn5gB#;8K z3Mhdxa9K6=|5==7>~(!LXnGRi)w+I6(%_3t;5NuZ|5lXKQ)k|KOyfpppgW)qIL?jk zLbI=>53ji3lCIK&=51D)aY7$3=i)9)QXi|aI}_>NPE1{Ib_M;miD_!!Z-d{j>)xM! E0hu@(-2eap delta 373 zcmYjMOAY}+6ns5BBgSWC217^?Ch>_SiHN0*8(4~+JFu}Q9lN=N6F7)ChP|rEG&-rg zs_NJ8RVRMpUk;HLkv71y7FQh9A~3w3pT__)fEeMTfEofk)Fsqvs(!kb>eFg0o|M7s zSr2{dMc~x`UL(_-XZxBWxpYC*yj48rx)vaEde}J3t$+pMFf+4Lo4K=@u-Wd&gLi=r zfVtltJ#hB5%-yLhnbvOagYz|S>2bmUpwAyzFV1wsD7{mm+3Tqa%uTPsUpiK8, } -var global: vec2; -var global_1: u32; +var global: u32; +var global_1: vec2; var global_2: vec4 = vec4(0f, 0f, 0f, 1f); fn function() { @@ -17,7 +17,7 @@ fn function() { switch bitcast(0u) { default: { - let _e23 = global_1; + let _e23 = global; local = array(type_9(vec2(-1f, 1f), vec2(0f, 0f)), type_9(vec2(-1f, -1f), vec2(0f, 1f)), type_9(vec2(1f, -1f), vec2(1f, 1f)), type_9(vec2(-1f, 1f), vec2(0f, 0f)), type_9(vec2(1f, -1f), vec2(1f, 1f)), type_9(vec2(1f, 1f), vec2(1f, 0f))); if (_e23 < 6u) { } else { @@ -25,7 +25,7 @@ fn function() { } let _e27 = local[_e23].member; let _e30 = local[_e23].member_1; - global = _e30; + global_1 = _e30; global_2 = vec4(_e27.x, _e27.y, 0f, 1f); break; } @@ -35,11 +35,11 @@ fn function() { @vertex fn tonemappingtonemapping_vertex(@builtin(vertex_index) param: u32) -> VertexOutput { - global_1 = param; + global = param; function(); let _e5 = global_2.y; global_2.y = -(_e5); - let _e7 = global; + let _e7 = global_1; let _e8 = global_2; return VertexOutput(_e7, _e8); } diff --git a/crates/renderling/shaders/tutorial-tutorial_implicit_isosceles_vertex.spv b/crates/renderling/shaders/tutorial-tutorial_implicit_isosceles_vertex.spv index a8e4054515b7a3d81dabf26a09ffebb096f7db00..0abe2554d80157f9a6bf9d5afd4115632932d9c1 100644 GIT binary patch delta 108 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, } -struct type_18 { +struct type_13 { + member: u32, + member_1: u32, +} + +struct type_19 { member: vec4, member_1: vec4, member_2: vec4, member_3: vec4, } -struct type_19 { +struct type_20 { member: array, 8>, member_1: array, 6>, member_2: vec3, } -struct type_20 { - member: type_18, - member_1: type_18, +struct type_21 { + member: type_19, + member_1: type_19, member_2: vec3, - member_3: type_19, -} - -struct type_22 { - member: u32, - member_1: u32, + member_3: type_20, } struct type_25 { @@ -49,9 +49,9 @@ struct VertexOutput { @builtin(position) member_1: vec4, } -var global: u32; @group(0) @binding(0) -var global_1: type_11; +var global: type_3; +var global_1: u32; var global_2: vec4 = vec4(0f, 0f, 0f, 1f); var global_3: u32; var global_4: vec4; @@ -63,35 +63,35 @@ fn function() { var local_3: array; var phi_613_: u32; var phi_1426_: bool; - var phi_699_: type_22; - var phi_700_: type_22; - var phi_723_: type_22; + var phi_699_: type_13; + var phi_700_: type_13; + var phi_723_: type_13; var phi_736_: bool; - var phi_742_: type_22; - var phi_743_: type_22; - var phi_766_: type_22; + var phi_742_: type_13; + var phi_743_: type_13; + var phi_766_: type_13; var phi_780_: bool; var phi_784_: type_28; var phi_1456_: bool; var phi_835_: type_25; var phi_1526_: bool; - var phi_996_: type_22; - var phi_997_: type_22; - var phi_1020_: type_22; + var phi_996_: type_13; + var phi_997_: type_13; + var phi_1020_: type_13; var phi_1047_: bool; - var phi_1053_: type_22; - var phi_1054_: type_22; - var phi_1077_: type_22; + var phi_1053_: type_13; + var phi_1054_: type_13; + var phi_1077_: type_13; var phi_1100_: bool; - var phi_1121_: type_20; + var phi_1121_: type_21; let _e79 = global_3; - let _e80 = global; - let _e82 = arrayLength((&global_1.member)); - let _e86 = global_1.member[(_e79 + 1u)]; - let _e90 = global_1.member[(_e79 + 2u)]; - let _e94 = global_1.member[(_e79 + 9u)]; - let _e98 = global_1.member[(_e79 + 10u)]; + let _e80 = global_1; + let _e82 = arrayLength((&global.member)); + let _e86 = global.member[(_e79 + 1u)]; + let _e90 = global.member[(_e79 + 2u)]; + let _e94 = global.member[(_e79 + 9u)]; + let _e98 = global.member[(_e79 + 10u)]; if (_e80 >= _e90) { phi_613_ = 4294967295u; } else { @@ -105,34 +105,34 @@ fn function() { } let _e108 = phi_1426_; if _e108 { - let _e111 = global_1.member[_e103]; - let _e116 = global_1.member[(_e103 + 1u)]; - let _e121 = global_1.member[(_e103 + 2u)]; - let _e127 = global_1.member[(_e103 + 3u)]; - let _e132 = global_1.member[(_e103 + 4u)]; - let _e137 = global_1.member[(_e103 + 5u)]; - let _e142 = global_1.member[(_e103 + 6u)]; - let _e148 = global_1.member[(_e103 + 7u)]; - let _e153 = global_1.member[(_e103 + 8u)]; - let _e159 = global_1.member[(_e103 + 9u)]; - let _e164 = global_1.member[(_e103 + 10u)]; - let _e170 = global_1.member[(_e103 + 11u)]; - let _e175 = global_1.member[(_e103 + 12u)]; - let _e180 = global_1.member[(_e103 + 13u)]; - let _e186 = global_1.member[(_e103 + 14u)]; - let _e191 = global_1.member[(_e103 + 15u)]; - let _e196 = global_1.member[(_e103 + 16u)]; - let _e201 = global_1.member[(_e103 + 17u)]; + let _e111 = global.member[_e103]; + let _e116 = global.member[(_e103 + 1u)]; + let _e121 = global.member[(_e103 + 2u)]; + let _e127 = global.member[(_e103 + 3u)]; + let _e132 = global.member[(_e103 + 4u)]; + let _e137 = global.member[(_e103 + 5u)]; + let _e142 = global.member[(_e103 + 6u)]; + let _e148 = global.member[(_e103 + 7u)]; + let _e153 = global.member[(_e103 + 8u)]; + let _e159 = global.member[(_e103 + 9u)]; + let _e164 = global.member[(_e103 + 10u)]; + let _e170 = global.member[(_e103 + 11u)]; + let _e175 = global.member[(_e103 + 12u)]; + let _e180 = global.member[(_e103 + 13u)]; + let _e186 = global.member[(_e103 + 14u)]; + let _e191 = global.member[(_e103 + 15u)]; + let _e196 = global.member[(_e103 + 16u)]; + let _e201 = global.member[(_e103 + 17u)]; local_3 = array(0u, 0u, 0u, 0u); - phi_699_ = type_22(0u, 4u); + phi_699_ = type_13(0u, 4u); loop { let _e206 = phi_699_; if (_e206.member < _e206.member_1) { - phi_700_ = type_22((_e206.member + 1u), _e206.member_1); - phi_723_ = type_22(1u, _e206.member); + phi_700_ = type_13((_e206.member + 1u), _e206.member_1); + phi_723_ = type_13(1u, _e206.member); } else { phi_700_ = _e206; - phi_723_ = type_22(0u, type_22().member_1); + phi_723_ = type_13(0u, type_13().member_1); } let _e219 = phi_700_; let _e221 = phi_723_; @@ -142,7 +142,7 @@ fn function() { break; } case 1: { - let _e228 = global_1.member[((_e103 + 18u) + _e221.member_1)]; + let _e228 = global.member[((_e103 + 18u) + _e221.member_1)]; local_3[_e221.member_1] = _e228; phi_736_ = true; break; @@ -161,15 +161,15 @@ fn function() { } let _e233 = local_3; local_2 = array(0f, 0f, 0f, 0f); - phi_742_ = type_22(0u, 4u); + phi_742_ = type_13(0u, 4u); loop { let _e236 = phi_742_; if (_e236.member < _e236.member_1) { - phi_743_ = type_22((_e236.member + 1u), _e236.member_1); - phi_766_ = type_22(1u, _e236.member); + phi_743_ = type_13((_e236.member + 1u), _e236.member_1); + phi_766_ = type_13(1u, _e236.member); } else { phi_743_ = _e236; - phi_766_ = type_22(0u, type_22().member_1); + phi_766_ = type_13(0u, type_13().member_1); } let _e249 = phi_743_; let _e251 = phi_766_; @@ -179,7 +179,7 @@ fn function() { break; } case 1: { - let _e258 = global_1.member[((_e103 + 22u) + _e251.member_1)]; + let _e258 = global.member[((_e103 + 22u) + _e251.member_1)]; local_2[_e251.member_1] = bitcast(_e258); phi_780_ = true; break; @@ -210,16 +210,16 @@ fn function() { } let _e273 = phi_1456_; if _e273 { - let _e276 = global_1.member[_e98]; - let _e281 = global_1.member[(_e98 + 1u)]; - let _e286 = global_1.member[(_e98 + 2u)]; - let _e292 = global_1.member[(_e98 + 3u)]; - let _e297 = global_1.member[(_e98 + 4u)]; - let _e302 = global_1.member[(_e98 + 5u)]; - let _e307 = global_1.member[(_e98 + 6u)]; - let _e313 = global_1.member[(_e98 + 7u)]; - let _e318 = global_1.member[(_e98 + 8u)]; - let _e323 = global_1.member[(_e98 + 9u)]; + let _e276 = global.member[_e98]; + let _e281 = global.member[(_e98 + 1u)]; + let _e286 = global.member[(_e98 + 2u)]; + let _e292 = global.member[(_e98 + 3u)]; + let _e297 = global.member[(_e98 + 4u)]; + let _e302 = global.member[(_e98 + 5u)]; + let _e307 = global.member[(_e98 + 6u)]; + let _e313 = global.member[(_e98 + 7u)]; + let _e318 = global.member[(_e98 + 8u)]; + let _e323 = global.member[(_e98 + 9u)]; phi_835_ = type_25(vec3(bitcast(_e276), bitcast(_e281), bitcast(_e286)), vec4(bitcast(_e292), bitcast(_e297), bitcast(_e302), bitcast(_e307)), vec3(bitcast(_e313), bitcast(_e318), bitcast(_e323))); } else { phi_835_ = type_25(vec3(0f, 0f, 0f), vec4(0f, 0f, 0f, 1f), vec3(1f, 1f, 1f)); @@ -242,51 +242,51 @@ fn function() { } let _e375 = phi_1526_; if _e375 { - let _e378 = global_1.member[_e94]; - let _e383 = global_1.member[(_e94 + 1u)]; - let _e388 = global_1.member[(_e94 + 2u)]; - let _e393 = global_1.member[(_e94 + 3u)]; - let _e399 = global_1.member[(_e94 + 4u)]; - let _e404 = global_1.member[(_e94 + 5u)]; - let _e409 = global_1.member[(_e94 + 6u)]; - let _e414 = global_1.member[(_e94 + 7u)]; - let _e420 = global_1.member[(_e94 + 8u)]; - let _e425 = global_1.member[(_e94 + 9u)]; - let _e430 = global_1.member[(_e94 + 10u)]; - let _e435 = global_1.member[(_e94 + 11u)]; - let _e441 = global_1.member[(_e94 + 12u)]; - let _e446 = global_1.member[(_e94 + 13u)]; - let _e451 = global_1.member[(_e94 + 14u)]; - let _e456 = global_1.member[(_e94 + 15u)]; - let _e463 = global_1.member[(_e94 + 16u)]; - let _e468 = global_1.member[(_e94 + 17u)]; - let _e473 = global_1.member[(_e94 + 18u)]; - let _e478 = global_1.member[(_e94 + 19u)]; - let _e484 = global_1.member[(_e94 + 20u)]; - let _e489 = global_1.member[(_e94 + 21u)]; - let _e494 = global_1.member[(_e94 + 22u)]; - let _e499 = global_1.member[(_e94 + 23u)]; - let _e505 = global_1.member[(_e94 + 24u)]; - let _e510 = global_1.member[(_e94 + 25u)]; - let _e515 = global_1.member[(_e94 + 26u)]; - let _e520 = global_1.member[(_e94 + 27u)]; - let _e526 = global_1.member[(_e94 + 28u)]; - let _e531 = global_1.member[(_e94 + 29u)]; - let _e536 = global_1.member[(_e94 + 30u)]; - let _e541 = global_1.member[(_e94 + 31u)]; - let _e548 = global_1.member[(_e94 + 32u)]; - let _e553 = global_1.member[(_e94 + 33u)]; - let _e558 = global_1.member[(_e94 + 34u)]; + let _e378 = global.member[_e94]; + let _e383 = global.member[(_e94 + 1u)]; + let _e388 = global.member[(_e94 + 2u)]; + let _e393 = global.member[(_e94 + 3u)]; + let _e399 = global.member[(_e94 + 4u)]; + let _e404 = global.member[(_e94 + 5u)]; + let _e409 = global.member[(_e94 + 6u)]; + let _e414 = global.member[(_e94 + 7u)]; + let _e420 = global.member[(_e94 + 8u)]; + let _e425 = global.member[(_e94 + 9u)]; + let _e430 = global.member[(_e94 + 10u)]; + let _e435 = global.member[(_e94 + 11u)]; + let _e441 = global.member[(_e94 + 12u)]; + let _e446 = global.member[(_e94 + 13u)]; + let _e451 = global.member[(_e94 + 14u)]; + let _e456 = global.member[(_e94 + 15u)]; + let _e463 = global.member[(_e94 + 16u)]; + let _e468 = global.member[(_e94 + 17u)]; + let _e473 = global.member[(_e94 + 18u)]; + let _e478 = global.member[(_e94 + 19u)]; + let _e484 = global.member[(_e94 + 20u)]; + let _e489 = global.member[(_e94 + 21u)]; + let _e494 = global.member[(_e94 + 22u)]; + let _e499 = global.member[(_e94 + 23u)]; + let _e505 = global.member[(_e94 + 24u)]; + let _e510 = global.member[(_e94 + 25u)]; + let _e515 = global.member[(_e94 + 26u)]; + let _e520 = global.member[(_e94 + 27u)]; + let _e526 = global.member[(_e94 + 28u)]; + let _e531 = global.member[(_e94 + 29u)]; + let _e536 = global.member[(_e94 + 30u)]; + let _e541 = global.member[(_e94 + 31u)]; + let _e548 = global.member[(_e94 + 32u)]; + let _e553 = global.member[(_e94 + 33u)]; + let _e558 = global.member[(_e94 + 34u)]; local_1 = array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)); - phi_996_ = type_22(0u, 6u); + phi_996_ = type_13(0u, 6u); loop { let _e563 = phi_996_; if (_e563.member < _e563.member_1) { - phi_997_ = type_22((_e563.member + 1u), _e563.member_1); - phi_1020_ = type_22(1u, _e563.member); + phi_997_ = type_13((_e563.member + 1u), _e563.member_1); + phi_1020_ = type_13(1u, _e563.member); } else { phi_997_ = _e563; - phi_1020_ = type_22(0u, type_22().member_1); + phi_1020_ = type_13(0u, type_13().member_1); } let _e576 = phi_997_; let _e578 = phi_1020_; @@ -297,10 +297,10 @@ fn function() { } case 1: { let _e583 = ((_e94 + 35u) + (_e578.member_1 * 4u)); - let _e586 = global_1.member[_e583]; - let _e591 = global_1.member[(_e583 + 1u)]; - let _e596 = global_1.member[(_e583 + 2u)]; - let _e601 = global_1.member[(_e583 + 3u)]; + let _e586 = global.member[_e583]; + let _e591 = global.member[(_e583 + 1u)]; + let _e596 = global.member[(_e583 + 2u)]; + let _e601 = global.member[(_e583 + 3u)]; local_1[_e578.member_1] = vec4(bitcast(_e586), bitcast(_e591), bitcast(_e596), bitcast(_e601)); phi_1047_ = true; break; @@ -319,15 +319,15 @@ fn function() { } let _e608 = local_1; local = array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)); - phi_1053_ = type_22(0u, 8u); + phi_1053_ = type_13(0u, 8u); loop { let _e611 = phi_1053_; if (_e611.member < _e611.member_1) { - phi_1054_ = type_22((_e611.member + 1u), _e611.member_1); - phi_1077_ = type_22(1u, _e611.member); + phi_1054_ = type_13((_e611.member + 1u), _e611.member_1); + phi_1077_ = type_13(1u, _e611.member); } else { phi_1054_ = _e611; - phi_1077_ = type_22(0u, type_22().member_1); + phi_1077_ = type_13(0u, type_13().member_1); } let _e624 = phi_1054_; let _e626 = phi_1077_; @@ -338,9 +338,9 @@ fn function() { } case 1: { let _e631 = ((_e94 + 59u) + (_e626.member_1 * 3u)); - let _e634 = global_1.member[_e631]; - let _e639 = global_1.member[(_e631 + 1u)]; - let _e644 = global_1.member[(_e631 + 2u)]; + let _e634 = global.member[_e631]; + let _e639 = global.member[(_e631 + 1u)]; + let _e644 = global.member[(_e631 + 2u)]; local[_e626.member_1] = vec3(bitcast(_e634), bitcast(_e639), bitcast(_e644)); phi_1100_ = true; break; @@ -358,12 +358,12 @@ fn function() { } } let _e651 = local; - let _e655 = global_1.member[(_e94 + 83u)]; - let _e660 = global_1.member[(_e94 + 84u)]; - let _e665 = global_1.member[(_e94 + 85u)]; - phi_1121_ = type_20(type_18(vec4(bitcast(_e378), bitcast(_e383), bitcast(_e388), bitcast(_e393)), vec4(bitcast(_e399), bitcast(_e404), bitcast(_e409), bitcast(_e414)), vec4(bitcast(_e420), bitcast(_e425), bitcast(_e430), bitcast(_e435)), vec4(bitcast(_e441), bitcast(_e446), bitcast(_e451), bitcast(_e456))), type_18(vec4(bitcast(_e463), bitcast(_e468), bitcast(_e473), bitcast(_e478)), vec4(bitcast(_e484), bitcast(_e489), bitcast(_e494), bitcast(_e499)), vec4(bitcast(_e505), bitcast(_e510), bitcast(_e515), bitcast(_e520)), vec4(bitcast(_e526), bitcast(_e531), bitcast(_e536), bitcast(_e541))), vec3(bitcast(_e548), bitcast(_e553), bitcast(_e558)), type_19(_e651, _e608, vec3(bitcast(_e655), bitcast(_e660), bitcast(_e665)))); + let _e655 = global.member[(_e94 + 83u)]; + let _e660 = global.member[(_e94 + 84u)]; + let _e665 = global.member[(_e94 + 85u)]; + phi_1121_ = type_21(type_19(vec4(bitcast(_e378), bitcast(_e383), bitcast(_e388), bitcast(_e393)), vec4(bitcast(_e399), bitcast(_e404), bitcast(_e409), bitcast(_e414)), vec4(bitcast(_e420), bitcast(_e425), bitcast(_e430), bitcast(_e435)), vec4(bitcast(_e441), bitcast(_e446), bitcast(_e451), bitcast(_e456))), type_19(vec4(bitcast(_e463), bitcast(_e468), bitcast(_e473), bitcast(_e478)), vec4(bitcast(_e484), bitcast(_e489), bitcast(_e494), bitcast(_e499)), vec4(bitcast(_e505), bitcast(_e510), bitcast(_e515), bitcast(_e520)), vec4(bitcast(_e526), bitcast(_e531), bitcast(_e536), bitcast(_e541))), vec3(bitcast(_e548), bitcast(_e553), bitcast(_e558)), type_20(_e651, _e608, vec3(bitcast(_e655), bitcast(_e660), bitcast(_e665)))); } else { - phi_1121_ = type_20(type_18(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_18(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_19(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); + phi_1121_ = type_21(type_19(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), type_19(vec4(1f, 0f, 0f, 0f), vec4(0f, 1f, 0f, 0f), vec4(0f, 0f, 1f, 0f), vec4(0f, 0f, 0f, 1f)), vec3(0f, 0f, 0f), type_20(array, 8>(vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f), vec3(0f, 0f, 0f)), array, 6>(vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f), vec4(0f, 0f, 0f, 0f)), vec3(0f, 0f, 0f))); } let _e671 = phi_1121_; let _e711 = fma(_e671.member.member_3.x, _e671.member_1.member.w, fma(_e671.member.member_2.x, _e671.member_1.member.z, fma(_e671.member.member.x, _e671.member_1.member.x, (_e671.member.member_1.x * _e671.member_1.member.y)))); @@ -389,7 +389,7 @@ fn function() { @vertex fn tutorialtutorial_slabbed_renderlet(@builtin(instance_index) param: u32, @builtin(vertex_index) param_1: u32) -> VertexOutput { global_3 = param; - global = param_1; + global_1 = param_1; function(); let _e7 = global_2.y; global_2.y = -(_e7); diff --git a/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices.spv b/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices.spv index 416d8c9a21c68c1019e850075af65cbc2f815034..4878b81089f132cde8089d52e5ebf804b4121127 100644 GIT binary patch delta 1793 zcmY*ZOK4L;6rI;LiTO4$i5lXkl0{4#`%!8eZJM-H+xo$Z6x32&xOUNn*iuUc6+a+Y zW+@7af05!3Ehtv0f(n8n)*?l!g1T_wLd1pWIWupb^})%#_uP5s-kG^Cud}bSC;CT@ z931Hn-wap*OHPz599}Mj2ms4~d7@NQ!&U(EMVY99Wn5y%wRT(vTY-EXY$-rKid8FM zmx5UdOMea4P@n5rqY7RXY(2mS@vtheO2=ve3pS{De<3Ses)NxH zf8tHxEWi}Y!{-JTWBmffGbcnP8qJAeA(|0nR3Jn_Ezn&S;s3$IU1Z^Nrxa%4R#*=} zA)ZtlEF0HrN>!n?DzCNH**VixJ7S(nd>Ez!P6a@5%Wk9-epa}Z@Ot=W_q17*=8xfO|KsZG+FUv%wtS-XSelG{J~EJ%DLmSs8IHNfg0yN;m+#v&mgCa$Hr%+9B}Wla&p?;gWsGd72%i+Aw3A}1)Ak*bgy9p}ij z;INrF=45_&4nSvM&S9%4EpHTl+)L#?uU5VS#Y@0BrF`D2l}|hGfA=P>Y8mt;|Iz9}8AKN;t}nf$1e&-q!W z+n>sCe>V*edjrTrg;RVBU~V7cYI(-5ySf8LS9$5zU5$ac3v_V^i(XyE*DVM z0;wFUjT;{J0br^X_4*i$st!8=n75z6XHNHO1$D1a!RTJ= zg1Xn|V4eY5wKteny}oePjRe{2HT(Tn4nM8bZIirL&0 zF1Yxetd%3-wACcX)bC7q(CU!Ak*%uF2=aQOz-J3? vpOe21F?l|UlQZ#Xo|z6iQvzS@8@3Z1-)IMz=YLK!{*ByrjtaH1ZeHpy$1u|L delta 1797 zcmY*ZTS!z<6g^j+ndYg}%&lZfjro{HN6pf7Fq@ftWhEIQR3d%!-G?7hQehAw7C~}8 zqoBy1MD(JBq6ZaJ5EPL`NLWGj(MKN=eMGHw&OH~qux6jV_P*<^^O*Z4^CokAufJFb z5d^BohmPI|Ss`m=fhZQWV5)$HqD0goGB0xSdM7VItU`S`B2~!8(A9vr6wC@lj$6@_ zL1d2w#L=@7u?Bn%Vk5wZIp(PrO*%J(Sf%oVxs32AGtJ1^((dY+m6YDWni*{lLi{g%NaB^;v zshf8;&f!?+5;q}oJGdxr7f;U%(Bxv|X(88?c(e4$v>K7E%qv7dlp}IaIJJpsjM>MF zQYR0TG}{#Q02DPww@S+sYhuR!?EnvcE?A?^0AQA)&pGO;Ea%R$o40_ca39;oyi4|Y zQXbxkX1Uw*E6gj$9p$q^4tsZ6E9JCz0KZvZGRi$Zfbu?I50I0)e7SHQ>?pvKX_S+` zlwH86fQ`u`9szV^)^`Xx!}CV14r%#g7~6g-5Bat7B`971&MM^zzg9lwzW>vouxe#E zkoZskj9YIDu)ZyjRF2NM{8%6n$PoTJgUf{;kWWBU<+zm?=P?On;3(qgjzy?@F`|8abouv+pN;5~_-uH@Pk>q77mQict1Fahm9Jp*>V`_Si|=5*0s16P zmR`l(>@CZA_&;fv<7FwUASc!DOxZrGTMkCID4$W>SFLm}ny^~s`{<@}{!`-M@kJ6L zM1CW~h&{3}e+s(gF{3*eqwZn#dnHEQbX@DMc6G<%T>nIThtkbEy3LMmi_%?UpGdF8 zES<>`s(|GoV?4)89Ua-$~vb~gt1yTVh^}3pc`PFAHOyD8hM=>RqJKLg5*Ev CkJ6?9 diff --git a/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices.wgsl b/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices.wgsl index 433cb757..20dd251f 100644 --- a/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices.wgsl +++ b/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices.wgsl @@ -1,8 +1,8 @@ -struct type_8 { +struct type_3 { member: array, } -struct type_13 { +struct type_11 { member: u32, member_1: u32, } @@ -23,9 +23,9 @@ struct VertexOutput { @builtin(position) member_1: vec4, } -var global: u32; @group(0) @binding(0) -var global_1: type_8; +var global: type_3; +var global_1: u32; var global_2: vec4 = vec4(0f, 0f, 0f, 1f); var global_3: vec4; var global_4: u32; @@ -34,22 +34,22 @@ fn function() { var local: array; var local_1: array; var phi_381_: bool; - var phi_148_: type_13; + var phi_148_: type_11; var phi_407_: u32; var phi_426_: bool; - var phi_239_: type_13; - var phi_240_: type_13; - var phi_263_: type_13; + var phi_239_: type_11; + var phi_240_: type_11; + var phi_263_: type_11; var phi_276_: bool; - var phi_282_: type_13; - var phi_283_: type_13; - var phi_306_: type_13; + var phi_282_: type_11; + var phi_283_: type_11; + var phi_306_: type_11; var phi_320_: bool; var phi_324_: type_18; let _e45 = global_4; - let _e46 = global; - let _e48 = arrayLength((&global_1.member)); + let _e46 = global_1; + let _e48 = arrayLength((&global.member)); if (_e48 >= 2u) { phi_381_ = (_e45 <= (_e48 - 2u)); } else { @@ -57,11 +57,11 @@ fn function() { } let _e53 = phi_381_; if _e53 { - let _e56 = global_1.member[_e45]; - let _e60 = global_1.member[(_e45 + 1u)]; - phi_148_ = type_13(_e56, _e60); + let _e56 = global.member[_e45]; + let _e60 = global.member[(_e45 + 1u)]; + phi_148_ = type_11(_e56, _e60); } else { - phi_148_ = type_13(4294967295u, 0u); + phi_148_ = type_11(4294967295u, 0u); } let _e63 = phi_148_; if (_e46 >= _e63.member_1) { @@ -77,34 +77,34 @@ fn function() { } let _e75 = phi_426_; if _e75 { - let _e78 = global_1.member[_e70]; - let _e83 = global_1.member[(_e70 + 1u)]; - let _e88 = global_1.member[(_e70 + 2u)]; - let _e94 = global_1.member[(_e70 + 3u)]; - let _e99 = global_1.member[(_e70 + 4u)]; - let _e104 = global_1.member[(_e70 + 5u)]; - let _e109 = global_1.member[(_e70 + 6u)]; - let _e115 = global_1.member[(_e70 + 7u)]; - let _e120 = global_1.member[(_e70 + 8u)]; - let _e126 = global_1.member[(_e70 + 9u)]; - let _e131 = global_1.member[(_e70 + 10u)]; - let _e137 = global_1.member[(_e70 + 11u)]; - let _e142 = global_1.member[(_e70 + 12u)]; - let _e147 = global_1.member[(_e70 + 13u)]; - let _e153 = global_1.member[(_e70 + 14u)]; - let _e158 = global_1.member[(_e70 + 15u)]; - let _e163 = global_1.member[(_e70 + 16u)]; - let _e168 = global_1.member[(_e70 + 17u)]; + let _e78 = global.member[_e70]; + let _e83 = global.member[(_e70 + 1u)]; + let _e88 = global.member[(_e70 + 2u)]; + let _e94 = global.member[(_e70 + 3u)]; + let _e99 = global.member[(_e70 + 4u)]; + let _e104 = global.member[(_e70 + 5u)]; + let _e109 = global.member[(_e70 + 6u)]; + let _e115 = global.member[(_e70 + 7u)]; + let _e120 = global.member[(_e70 + 8u)]; + let _e126 = global.member[(_e70 + 9u)]; + let _e131 = global.member[(_e70 + 10u)]; + let _e137 = global.member[(_e70 + 11u)]; + let _e142 = global.member[(_e70 + 12u)]; + let _e147 = global.member[(_e70 + 13u)]; + let _e153 = global.member[(_e70 + 14u)]; + let _e158 = global.member[(_e70 + 15u)]; + let _e163 = global.member[(_e70 + 16u)]; + let _e168 = global.member[(_e70 + 17u)]; local_1 = array(0u, 0u, 0u, 0u); - phi_239_ = type_13(0u, 4u); + phi_239_ = type_11(0u, 4u); loop { let _e173 = phi_239_; if (_e173.member < _e173.member_1) { - phi_240_ = type_13((_e173.member + 1u), _e173.member_1); - phi_263_ = type_13(1u, _e173.member); + phi_240_ = type_11((_e173.member + 1u), _e173.member_1); + phi_263_ = type_11(1u, _e173.member); } else { phi_240_ = _e173; - phi_263_ = type_13(0u, type_13().member_1); + phi_263_ = type_11(0u, type_11().member_1); } let _e186 = phi_240_; let _e188 = phi_263_; @@ -114,7 +114,7 @@ fn function() { break; } case 1: { - let _e195 = global_1.member[((_e70 + 18u) + _e188.member_1)]; + let _e195 = global.member[((_e70 + 18u) + _e188.member_1)]; local_1[_e188.member_1] = _e195; phi_276_ = true; break; @@ -133,15 +133,15 @@ fn function() { } let _e200 = local_1; local = array(0f, 0f, 0f, 0f); - phi_282_ = type_13(0u, 4u); + phi_282_ = type_11(0u, 4u); loop { let _e203 = phi_282_; if (_e203.member < _e203.member_1) { - phi_283_ = type_13((_e203.member + 1u), _e203.member_1); - phi_306_ = type_13(1u, _e203.member); + phi_283_ = type_11((_e203.member + 1u), _e203.member_1); + phi_306_ = type_11(1u, _e203.member); } else { phi_283_ = _e203; - phi_306_ = type_13(0u, type_13().member_1); + phi_306_ = type_11(0u, type_11().member_1); } let _e216 = phi_283_; let _e218 = phi_306_; @@ -151,7 +151,7 @@ fn function() { break; } case 1: { - let _e225 = global_1.member[((_e70 + 22u) + _e218.member_1)]; + let _e225 = global.member[((_e70 + 22u) + _e218.member_1)]; local[_e218.member_1] = bitcast(_e225); phi_320_ = true; break; @@ -182,7 +182,7 @@ fn function() { @vertex fn tutorialtutorial_slabbed_vertices(@builtin(instance_index) param: u32, @builtin(vertex_index) param_1: u32) -> VertexOutput { global_4 = param; - global = param_1; + global_1 = param_1; function(); let _e7 = global_2.y; global_2.y = -(_e7); diff --git a/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices_no_instance.spv b/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices_no_instance.spv index af229f3a4544baf6866dad04d20467336a7c315c..d7addc79223c75819155ba642c042c4670c507c1 100644 GIT binary patch delta 1683 zcmYjRO-NKx7`@M#aem*7<1~hhiPKci(Mi)V{~E`sTvS+w(56L1gh&YqK}DJhT3A%d zT|}7Bq9`GYXeG39>7s=#iWcp3(ZY3`g3h`3-G>j(`|kI1&v)+6dt1(yvoO85FdMEA zLPUY4&$i{W2Q~nX;#h9n)0a%Kr z&|WdD4=4bKs_Rg&AC@bEI_2kJSxmoPM6gn!1hF|+Ov^c}<7H@+*ZiG>Ja#UPtVZft zj45L`nB(k0fJeR?%#rn+{Nzt30%||cV1HOsl6Jre@XXs}ci@lBtHiD2Q;@~V5vyIk zsl0@@70e~MnO#U91KNR3*%2(+yct&kYHX1+!Hng|pqhq_IVM?q`9Lef6L2nsQh*)muLSwCJuWW zC}LN6I(Gr)Cg3}=Ev!{dAfmfm32RmN5t#&rcwOX^aH~>3t?q(6NjAz zOt%MaPIbfhA;8!Wzdc!wI7;gyL{xX!dBDtmj4^Xs>taM}eTswpQ^0kySvS#9{j*?&dGM6yR+x%52=RI^=2f z9*^I%`sGf1Sn2%kF%2d%R*xJ_oUi45{t1+UO@M!^Z$OvaO#A@vN|oW=sUmMW$#*eH z-nFFWweTHig|*dOe@FFY#T!7JynkKZe~NdtdMVGZJ%Vf);Bx_|&zm2G&p00yljEsW ikr~^~RA8*u4I4*{GhzVq{2TN^3I9RNks&YFQ@Q_(H>=D5 delta 1675 zcmYjROH5Ni6n&5O(SM6@B*M!k2{rOVfu%wtS_}tSWLN&*--B<;I6u?sSDTf^8^}u?7 zW?{Obg*L=kyw8pnV7Ze*w4i>hDU{6*z_NLlh`6HHOq_0lHwft6MMkUqA*^{dG5nTb zlK`{vEGrKKS$kc^I&ajRsomIL6uG2rN6KPTl|qVgXcj z82)is_D5y()3Dr2|ES?dpFAfA*rXTo5I1uA8F9;fdX8z?7}MrakWxnh%BTioEI9^n zw$)&aSuX;*HElUwUhW0l7SB*#-Uvu}qoyGeR@~y~yF|hI8{(VAYvq#@#o7roFFw>> z#joi}N92eRJ_Vcv`b4j%6ymUN0_>n&EO-)Ti&*z0VjOrGV_JX27T_H+)LfV=%M8I42}t_&TNf1!v!mk81XO=>n@QX&!bF(AA#U zFiO+ZbeJ@ggt=I>C+;=4U4QsIo*FV4%~>F^`7 zB=*Bsq|P5srm?z&*&`y^gulfI^KL~{ zUK9TVr7+&W{(Bp)%e)r&VdOdhnD-x07Ml%gS$-7!i249Nmoa_5`2qOk`AAMoN25hX hLUyDEYuPt!7#vRo0mk{Q7=jXhq8MX_R, } -struct type_13 { +struct type_11 { member: u32, member_1: u32, } @@ -23,9 +23,9 @@ struct VertexOutput { @builtin(position) member_1: vec4, } -var global: u32; @group(0) @binding(0) -var global_1: type_8; +var global: type_3; +var global_1: u32; var global_2: vec4 = vec4(0f, 0f, 0f, 1f); var global_3: vec4; @@ -33,18 +33,18 @@ fn function() { var local: array; var local_1: array; var phi_312_: bool; - var phi_180_: type_13; - var phi_181_: type_13; - var phi_204_: type_13; + var phi_180_: type_11; + var phi_181_: type_11; + var phi_204_: type_11; var phi_217_: bool; - var phi_223_: type_13; - var phi_224_: type_13; - var phi_247_: type_13; + var phi_223_: type_11; + var phi_224_: type_11; + var phi_247_: type_11; var phi_261_: bool; var phi_265_: type_18; - let _e42 = global; - let _e44 = arrayLength((&global_1.member)); + let _e42 = global_1; + let _e44 = arrayLength((&global.member)); let _e45 = (_e42 * 26u); if (_e44 >= 26u) { phi_312_ = (_e45 <= (_e44 - 26u)); @@ -53,34 +53,34 @@ fn function() { } let _e50 = phi_312_; if _e50 { - let _e53 = global_1.member[_e45]; - let _e58 = global_1.member[(_e45 + 1u)]; - let _e63 = global_1.member[(_e45 + 2u)]; - let _e69 = global_1.member[(_e45 + 3u)]; - let _e74 = global_1.member[(_e45 + 4u)]; - let _e79 = global_1.member[(_e45 + 5u)]; - let _e84 = global_1.member[(_e45 + 6u)]; - let _e90 = global_1.member[(_e45 + 7u)]; - let _e95 = global_1.member[(_e45 + 8u)]; - let _e101 = global_1.member[(_e45 + 9u)]; - let _e106 = global_1.member[(_e45 + 10u)]; - let _e112 = global_1.member[(_e45 + 11u)]; - let _e117 = global_1.member[(_e45 + 12u)]; - let _e122 = global_1.member[(_e45 + 13u)]; - let _e128 = global_1.member[(_e45 + 14u)]; - let _e133 = global_1.member[(_e45 + 15u)]; - let _e138 = global_1.member[(_e45 + 16u)]; - let _e143 = global_1.member[(_e45 + 17u)]; + let _e53 = global.member[_e45]; + let _e58 = global.member[(_e45 + 1u)]; + let _e63 = global.member[(_e45 + 2u)]; + let _e69 = global.member[(_e45 + 3u)]; + let _e74 = global.member[(_e45 + 4u)]; + let _e79 = global.member[(_e45 + 5u)]; + let _e84 = global.member[(_e45 + 6u)]; + let _e90 = global.member[(_e45 + 7u)]; + let _e95 = global.member[(_e45 + 8u)]; + let _e101 = global.member[(_e45 + 9u)]; + let _e106 = global.member[(_e45 + 10u)]; + let _e112 = global.member[(_e45 + 11u)]; + let _e117 = global.member[(_e45 + 12u)]; + let _e122 = global.member[(_e45 + 13u)]; + let _e128 = global.member[(_e45 + 14u)]; + let _e133 = global.member[(_e45 + 15u)]; + let _e138 = global.member[(_e45 + 16u)]; + let _e143 = global.member[(_e45 + 17u)]; local_1 = array(0u, 0u, 0u, 0u); - phi_180_ = type_13(0u, 4u); + phi_180_ = type_11(0u, 4u); loop { let _e148 = phi_180_; if (_e148.member < _e148.member_1) { - phi_181_ = type_13((_e148.member + 1u), _e148.member_1); - phi_204_ = type_13(1u, _e148.member); + phi_181_ = type_11((_e148.member + 1u), _e148.member_1); + phi_204_ = type_11(1u, _e148.member); } else { phi_181_ = _e148; - phi_204_ = type_13(0u, type_13().member_1); + phi_204_ = type_11(0u, type_11().member_1); } let _e161 = phi_181_; let _e163 = phi_204_; @@ -90,7 +90,7 @@ fn function() { break; } case 1: { - let _e170 = global_1.member[((_e45 + 18u) + _e163.member_1)]; + let _e170 = global.member[((_e45 + 18u) + _e163.member_1)]; local_1[_e163.member_1] = _e170; phi_217_ = true; break; @@ -109,15 +109,15 @@ fn function() { } let _e175 = local_1; local = array(0f, 0f, 0f, 0f); - phi_223_ = type_13(0u, 4u); + phi_223_ = type_11(0u, 4u); loop { let _e178 = phi_223_; if (_e178.member < _e178.member_1) { - phi_224_ = type_13((_e178.member + 1u), _e178.member_1); - phi_247_ = type_13(1u, _e178.member); + phi_224_ = type_11((_e178.member + 1u), _e178.member_1); + phi_247_ = type_11(1u, _e178.member); } else { phi_224_ = _e178; - phi_247_ = type_13(0u, type_13().member_1); + phi_247_ = type_11(0u, type_11().member_1); } let _e191 = phi_224_; let _e193 = phi_247_; @@ -127,7 +127,7 @@ fn function() { break; } case 1: { - let _e200 = global_1.member[((_e45 + 22u) + _e193.member_1)]; + let _e200 = global.member[((_e45 + 22u) + _e193.member_1)]; local[_e193.member_1] = bitcast(_e200); phi_261_ = true; break; @@ -157,7 +157,7 @@ fn function() { @vertex fn tutorialtutorial_slabbed_vertices_no_instance(@builtin(vertex_index) param: u32) -> VertexOutput { - global = param; + global_1 = param; function(); let _e5 = global_2.y; global_2.y = -(_e5); diff --git a/crates/renderling/src/atlas.rs b/crates/renderling/src/atlas.rs index 9a03ea87..84a45726 100644 --- a/crates/renderling/src/atlas.rs +++ b/crates/renderling/src/atlas.rs @@ -10,10 +10,8 @@ //! on web. //! //! `Atlas` is only available on CPU. Not available in shaders. -use crabslab::SlabItem; -use glam::{UVec2, Vec2, Vec3}; -#[cfg(target_arch = "spirv")] -use spirv_std::num_traits::*; +use crabslab::{Id, Slab, SlabItem}; +use glam::{UVec2, UVec3, Vec2, Vec3, Vec3Swizzles, Vec4, Vec4Swizzles}; #[cfg(not(target_arch = "spirv"))] mod atlas_image; @@ -23,6 +21,13 @@ pub use atlas_image::*; mod cpu; #[cfg(not(target_arch = "spirv"))] pub use cpu::*; +use spirv_std::{image::Image2d, spirv, Sampler}; + +/// Describes various qualities of the atlas, to be used on the GPU. +#[derive(Clone, Copy, core::fmt::Debug, Default, PartialEq, SlabItem)] +pub struct AtlasDescriptor { + pub size: UVec3, +} /// Method of addressing the edges of a texture. #[cfg_attr(not(target_arch = "spirv"), derive(Debug))] @@ -71,6 +76,48 @@ impl AtlasTexture { Vec2::new(uv_s, uv_t).extend(self.layer_index as f32) } + + /// Constrain the input `clip_pos` to be within the bounds of this texture + /// within its atlas, in texture space. + pub fn constrain_clip_coords_to_texture_space( + &self, + clip_pos: Vec2, + atlas_size: UVec2, + ) -> Vec2 { + // Convert `clip_pos` into uv coords to figure out where in the texture + // this point lives + let input_uv = (clip_pos * Vec2::new(1.0, -1.0) + Vec2::splat(1.0)) * Vec2::splat(0.5); + // let input_uv = (clip_pos + Vec2::splat(1.0)) * Vec2::new(0.5, -0.5); + self.uv(input_uv, atlas_size).xy() + } + + /// Constrain the input `clip_pos` to be within the bounds of this texture + /// within its atlas. + pub fn constrain_clip_coords(&self, clip_pos: Vec2, atlas_size: UVec2) -> Vec2 { + let uv = self.constrain_clip_coords_to_texture_space(clip_pos, atlas_size); + // Convert `uv` back into clip space + (uv * Vec2::new(2.0, 2.0) - Vec2::splat(1.0)) * Vec2::new(1.0, -1.0) + } + + #[cfg(cpu)] + /// Returns the frame of this texture as a [`wgpu::Origin3d`]. + pub fn origin(&self) -> wgpu::Origin3d { + wgpu::Origin3d { + x: self.offset_px.x, + y: self.offset_px.y, + z: self.layer_index, + } + } + + #[cfg(cpu)] + /// Returns the frame of this texture as a [`wgpu::Extent3d`]. + pub fn size_as_extent(&self) -> wgpu::Extent3d { + wgpu::Extent3d { + width: self.size_px.x, + height: self.size_px.y, + depth_or_array_layers: 1, + } + } } /// Infinitely wrap the input between 0.0 and 1.0. @@ -154,6 +201,54 @@ impl TextureAddressMode { } } +#[derive(Clone, Copy, Default, SlabItem, core::fmt::Debug)] +pub struct AtlasBlittingDescriptor { + pub atlas_texture_id: Id, + pub atlas_desc_id: Id, +} + +/// Vertex shader for blitting a texture into a the frame of an [`AtlasTexture`]. +/// +/// This is useful for copying textures of unsupported formats, or +/// textures of different sizes. +#[spirv(vertex)] +pub fn atlas_blit_vertex( + #[spirv(vertex_index)] vertex_id: u32, + #[spirv(instance_index)] atlas_blitting_desc_id: Id, + #[spirv(descriptor_set = 0, binding = 0, storage_buffer)] slab: &[u32], + out_uv: &mut Vec2, + #[spirv(position)] out_pos: &mut Vec4, +) { + let i = vertex_id as usize; + *out_uv = crate::math::UV_COORD_QUAD_CCW[i]; + + crate::println!("atlas_blitting_desc_id: {atlas_blitting_desc_id:?}"); + let atlas_blitting_desc = slab.read_unchecked(atlas_blitting_desc_id); + crate::println!("atlas_blitting_desc: {atlas_blitting_desc:?}"); + let atlas_texture = slab.read_unchecked(atlas_blitting_desc.atlas_texture_id); + crate::println!("atlas_texture: {atlas_texture:?}"); + let atlas_desc = slab.read_unchecked(atlas_blitting_desc.atlas_desc_id); + crate::println!("atlas_desc: {atlas_desc:?}"); + let clip_pos = crate::math::CLIP_SPACE_COORD_QUAD_CCW[i]; + crate::println!("clip_pos: {clip_pos:?}"); + *out_pos = atlas_texture + .constrain_clip_coords(clip_pos.xy(), atlas_desc.size.xy()) + .extend(clip_pos.z) + .extend(clip_pos.w); + crate::println!("out_pos: {out_pos}"); +} + +/// Fragment shader for blitting a texture into a frame of an atlas. +#[spirv(fragment)] +pub fn atlas_blit_fragment( + #[spirv(descriptor_set = 0, binding = 1)] texture: &Image2d, + #[spirv(descriptor_set = 0, binding = 2)] sampler: &Sampler, + in_uv: Vec2, + frag_color: &mut Vec4, +) { + *frag_color = texture.sample(*sampler, in_uv); +} + #[cfg(test)] mod test { use super::*; @@ -164,4 +259,70 @@ mod test { assert_eq!(1.0, TextureAddressMode::Repeat.wrap(2.0)); assert_eq!(1.0, TextureAddressMode::Repeat.wrap(3.0)); } + + #[test] + /// Tests that clip coordinates can be converted into texture coords within + /// a specific `AtlasTexture`, and back again. + fn constrain_clip_coords_sanity() { + let atlas_texture = AtlasTexture { + offset_px: UVec2::splat(0), + size_px: UVec2::splat(800), + layer_index: 0, + frame_index: 0, + modes: TextureModes { + s: TextureAddressMode::ClampToEdge, + t: TextureAddressMode::ClampToEdge, + }, + }; + let atlas_size = UVec3::new(1024, 1024, 4); + let corners @ [tl, tr, br, bl] = [ + crate::math::CLIP_SPACE_COORD_QUAD_CCW_TL, + crate::math::CLIP_SPACE_COORD_QUAD_CCW_TR, + crate::math::CLIP_SPACE_COORD_QUAD_CCW_BR, + crate::math::CLIP_SPACE_COORD_QUAD_CCW_BL, + ] + .map(|coord| { + atlas_texture.constrain_clip_coords_to_texture_space(coord.xy(), atlas_size.xy()) + }); + log::info!("uv_corners: {corners:#?}"); + + let clip_br = crate::math::CLIP_SPACE_COORD_QUAD_CCW_BR.xy(); + log::info!("clip_br: {clip_br}"); + let input_uv_br = (clip_br * Vec2::new(1.0, -1.0) + Vec2::splat(1.0)) * Vec2::splat(0.5); + log::info!("input_uv_br: {input_uv_br}"); + assert_eq!(Vec2::ONE, input_uv_br, "incorrect uv"); + + let d = 800.0 / 1024.0; + assert_eq!(Vec2::splat(0.0), tl, "incorrect tl"); + assert_eq!(Vec2::new(d, 0.0), tr, "incorrect tr"); + assert_eq!(Vec2::new(d, d), br, "incorrect br"); + assert_eq!(Vec2::new(0.0, d), bl, "incorrect bl"); + + let corners = [ + crate::math::CLIP_SPACE_COORD_QUAD_CCW_TL, + crate::math::CLIP_SPACE_COORD_QUAD_CCW_TR, + crate::math::CLIP_SPACE_COORD_QUAD_CCW_BR, + crate::math::CLIP_SPACE_COORD_QUAD_CCW_BL, + ] + .map(|coord| atlas_texture.constrain_clip_coords(coord.xy(), atlas_size.xy())); + log::info!("clip_corners: {corners:#?}"); + // [ + // Vec2( + // -1.0, + // 1.0, + // ), + // Vec2( + // 0.5625, + // 1.0, + // ), + // Vec2( + // 0.5625, + // -0.5625, + // ), + // Vec2( + // -1.0, + // -0.5625, + // ), + // ] + } } diff --git a/crates/renderling/src/atlas/atlas_image.rs b/crates/renderling/src/atlas/atlas_image.rs index ef6d3fb5..08aa9aee 100644 --- a/crates/renderling/src/atlas/atlas_image.rs +++ b/crates/renderling/src/atlas/atlas_image.rs @@ -1,7 +1,6 @@ //! Images and texture formats. //! -//! Used to represent textures before they are sent to the GPU, in the -//! [`AtlasBuilder`]. +//! Used to represent textures before they are sent to the GPU. use glam::UVec2; use image::EncodableLayout; use snafu::prelude::*; @@ -41,8 +40,10 @@ pub enum AtlasImageFormat { R16G16B16, R16G16B16A16, R16G16B16A16FLOAT, + R32FLOAT, R32G32B32FLOAT, R32G32B32A32FLOAT, + D32FLOAT, } impl AtlasImageFormat { @@ -50,12 +51,33 @@ impl AtlasImageFormat { match value { wgpu::TextureFormat::R8Uint => Some(AtlasImageFormat::R8), wgpu::TextureFormat::R16Uint => Some(AtlasImageFormat::R16), + wgpu::TextureFormat::R32Float => Some(AtlasImageFormat::R32FLOAT), wgpu::TextureFormat::Rg8Uint => Some(AtlasImageFormat::R8G8), wgpu::TextureFormat::Rg16Uint => Some(AtlasImageFormat::R16G16), wgpu::TextureFormat::Rgba16Float => Some(AtlasImageFormat::R16G16B16A16FLOAT), + wgpu::TextureFormat::Depth32Float => Some(AtlasImageFormat::D32FLOAT), _ => None, } } + + pub fn zero_pixel(&self) -> &[u8] { + match self { + AtlasImageFormat::R8 => &[0], + AtlasImageFormat::R8G8 => &[0, 0], + AtlasImageFormat::R8G8B8 => &[0, 0, 0], + AtlasImageFormat::R8G8B8A8 => &[0, 0, 0, 0], + AtlasImageFormat::R16 => &[0, 0], + AtlasImageFormat::R16G16 => &[0, 0, 0, 0], + AtlasImageFormat::R16G16B16 => &[0, 0, 0, 0, 0, 0], + AtlasImageFormat::R16G16B16A16 => &[0, 0, 0, 0, 0, 0, 0, 0], + AtlasImageFormat::R16G16B16A16FLOAT => &[0, 0, 0, 0, 0, 0, 0, 0], + AtlasImageFormat::R32FLOAT | AtlasImageFormat::D32FLOAT => &[0, 0, 0, 0], + AtlasImageFormat::R32G32B32FLOAT => &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + AtlasImageFormat::R32G32B32A32FLOAT => { + &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + } + } + } } /// Image data in transit from CPU to GPU. @@ -177,55 +199,85 @@ impl AtlasImage { } pub fn into_rgba8(self) -> Option { - let pixels = convert_to_rgba8_bytes(self.pixels, self.format, self.apply_linear_transfer); + let pixels = convert_pixels( + self.pixels, + self.format, + wgpu::TextureFormat::Rgba8Unorm, + self.apply_linear_transfer, + ); image::RgbaImage::from_vec(self.size.x, self.size.y, pixels) } + + /// Returns a new [`AtlasImage`] with zeroed data. + pub fn new(size: UVec2, format: AtlasImageFormat) -> Self { + Self { + pixels: std::iter::repeat_n(format.zero_pixel(), (size.x * size.y) as usize) + .flatten() + .copied() + .collect(), + size, + format, + apply_linear_transfer: false, + } + } } -/// Interpret/convert the pixel data into rgba8 pixels. +fn apply_linear_xfer(bytes: &mut [u8], format: AtlasImageFormat) { + use crate::color::*; + match format { + AtlasImageFormat::R8 + | AtlasImageFormat::R8G8 + | AtlasImageFormat::R8G8B8 + | AtlasImageFormat::R8G8B8A8 => { + bytes.iter_mut().for_each(linear_xfer_u8); + } + AtlasImageFormat::R16 + | AtlasImageFormat::R16G16 + | AtlasImageFormat::R16G16B16 + | AtlasImageFormat::R16G16B16A16 => { + let bytes: &mut [u16] = bytemuck::cast_slice_mut(bytes); + bytes.iter_mut().for_each(linear_xfer_u16); + } + AtlasImageFormat::R16G16B16A16FLOAT => { + let bytes: &mut [u16] = bytemuck::cast_slice_mut(bytes); + bytes.iter_mut().for_each(linear_xfer_f16); + } + AtlasImageFormat::R32G32B32FLOAT + | AtlasImageFormat::R32G32B32A32FLOAT + | AtlasImageFormat::D32FLOAT + | AtlasImageFormat::R32FLOAT => { + let bytes: &mut [f32] = bytemuck::cast_slice_mut(bytes); + bytes.iter_mut().for_each(linear_xfer_f32); + } + } +} + +/// Interpret/convert the `AtlasImage` pixel data into `wgpu::TextureFormat` pixels, +/// if possible. /// /// This applies the linear transfer function if `apply_linear_transfer` is /// `true`. -pub fn convert_to_rgba8_bytes( +pub fn convert_pixels( bytes: impl IntoIterator, - format: AtlasImageFormat, + from_format: AtlasImageFormat, + to_format: wgpu::TextureFormat, apply_linear_transfer: bool, ) -> Vec { use crate::color::*; let mut bytes = bytes.into_iter().collect::>(); - log::trace!("converting image of format {format:?}"); + log::trace!("converting image of format {from_format:?}"); // Convert using linear transfer, if needed if apply_linear_transfer { log::trace!(" converting to linear color space (from sRGB)"); - match format { - AtlasImageFormat::R8 - | AtlasImageFormat::R8G8 - | AtlasImageFormat::R8G8B8 - | AtlasImageFormat::R8G8B8A8 => { - bytes.iter_mut().for_each(linear_xfer_u8); - } - AtlasImageFormat::R16 - | AtlasImageFormat::R16G16 - | AtlasImageFormat::R16G16B16 - | AtlasImageFormat::R16G16B16A16 => { - let bytes: &mut [u16] = bytemuck::cast_slice_mut(&mut bytes); - bytes.iter_mut().for_each(linear_xfer_u16); - } - AtlasImageFormat::R16G16B16A16FLOAT => { - let bytes: &mut [u16] = bytemuck::cast_slice_mut(&mut bytes); - bytes.iter_mut().for_each(linear_xfer_f16); - } - AtlasImageFormat::R32G32B32FLOAT | AtlasImageFormat::R32G32B32A32FLOAT => { - let bytes: &mut [f32] = bytemuck::cast_slice_mut(&mut bytes); - bytes.iter_mut().for_each(linear_xfer_f32); - } - } + apply_linear_xfer(&mut bytes, from_format); } - // Convert to rgba8 - match format { - AtlasImageFormat::R8 => bytes.into_iter().flat_map(|r| [r, 0, 0, 255]).collect(), - AtlasImageFormat::R8G8 => bytes + // Hamfisted conversion to `to_format` + match (from_format, to_format) { + (AtlasImageFormat::R8, wgpu::TextureFormat::Rgba8Unorm) => { + bytes.into_iter().flat_map(|r| [r, 0, 0, 255]).collect() + } + (AtlasImageFormat::R8G8, wgpu::TextureFormat::Rgba8Unorm) => bytes .chunks_exact(2) .flat_map(|p| { if let [r, g] = p { @@ -235,7 +287,7 @@ pub fn convert_to_rgba8_bytes( } }) .collect(), - AtlasImageFormat::R8G8B8 => bytes + (AtlasImageFormat::R8G8B8, wgpu::TextureFormat::Rgba8Unorm) => bytes .chunks_exact(3) .flat_map(|p| { if let [r, g, b] = p { @@ -245,64 +297,83 @@ pub fn convert_to_rgba8_bytes( } }) .collect(), - AtlasImageFormat::R8G8B8A8 => bytes, - AtlasImageFormat::R16 => bytemuck::cast_slice::(&bytes) - .iter() - .flat_map(|r| [u16_to_u8(*r), 0, 0, 255]) - .collect(), - AtlasImageFormat::R16G16 => bytemuck::cast_slice::(&bytes) - .chunks_exact(2) - .flat_map(|p| { - if let [r, g] = p { - [u16_to_u8(*r), u16_to_u8(*g), 0, 255] - } else { - unreachable!() - } - }) - .collect(), - AtlasImageFormat::R16G16B16 => bytemuck::cast_slice::(&bytes) - .chunks_exact(3) - .flat_map(|p| { - if let [r, g, b] = p { - [u16_to_u8(*r), u16_to_u8(*g), u16_to_u8(*b), 255] - } else { - unreachable!() - } - }) - .collect(), + (AtlasImageFormat::R8G8B8A8, wgpu::TextureFormat::Rgba8Unorm) => bytes, + (AtlasImageFormat::R16, wgpu::TextureFormat::Rgba8Unorm) => { + bytemuck::cast_slice::(&bytes) + .iter() + .flat_map(|r| [u16_to_u8(*r), 0, 0, 255]) + .collect() + } + (AtlasImageFormat::R16G16, wgpu::TextureFormat::Rgba8Unorm) => { + bytemuck::cast_slice::(&bytes) + .chunks_exact(2) + .flat_map(|p| { + if let [r, g] = p { + [u16_to_u8(*r), u16_to_u8(*g), 0, 255] + } else { + unreachable!() + } + }) + .collect() + } + (AtlasImageFormat::R16G16B16, wgpu::TextureFormat::Rgba8Unorm) => { + bytemuck::cast_slice::(&bytes) + .chunks_exact(3) + .flat_map(|p| { + if let [r, g, b] = p { + [u16_to_u8(*r), u16_to_u8(*g), u16_to_u8(*b), 255] + } else { + unreachable!() + } + }) + .collect() + } - AtlasImageFormat::R16G16B16A16 => bytemuck::cast_slice::(&bytes) - .iter() - .copied() - .map(u16_to_u8) - .collect(), - AtlasImageFormat::R16G16B16A16FLOAT => bytemuck::cast_slice::(&bytes) - .iter() - .map(|bits| half::f16::from_bits(*bits).to_f32()) - .collect::>() - .chunks_exact(4) - .flat_map(|p| { - if let [r, g, b, a] = p { - [f32_to_u8(*r), f32_to_u8(*g), f32_to_u8(*b), f32_to_u8(*a)] - } else { - unreachable!() - } - }) - .collect(), - AtlasImageFormat::R32G32B32FLOAT => bytemuck::cast_slice::(&bytes) - .chunks_exact(3) - .flat_map(|p| { - if let [r, g, b] = p { - [f32_to_u8(*r), f32_to_u8(*g), f32_to_u8(*b), 255] - } else { - unreachable!() - } - }) - .collect(), - AtlasImageFormat::R32G32B32A32FLOAT => bytemuck::cast_slice::(&bytes) - .iter() - .copied() - .map(f32_to_u8) - .collect(), + (AtlasImageFormat::R16G16B16A16, wgpu::TextureFormat::Rgba8Unorm) => { + bytemuck::cast_slice::(&bytes) + .iter() + .copied() + .map(u16_to_u8) + .collect() + } + (AtlasImageFormat::R16G16B16A16FLOAT, wgpu::TextureFormat::Rgba8Unorm) => { + bytemuck::cast_slice::(&bytes) + .iter() + .map(|bits| half::f16::from_bits(*bits).to_f32()) + .collect::>() + .chunks_exact(4) + .flat_map(|p| { + if let [r, g, b, a] = p { + [f32_to_u8(*r), f32_to_u8(*g), f32_to_u8(*b), f32_to_u8(*a)] + } else { + unreachable!() + } + }) + .collect() + } + (AtlasImageFormat::R32G32B32FLOAT, wgpu::TextureFormat::Rgba8Unorm) => { + bytemuck::cast_slice::(&bytes) + .chunks_exact(3) + .flat_map(|p| { + if let [r, g, b] = p { + [f32_to_u8(*r), f32_to_u8(*g), f32_to_u8(*b), 255] + } else { + unreachable!() + } + }) + .collect() + } + (AtlasImageFormat::R32G32B32A32FLOAT, wgpu::TextureFormat::Rgba8Unorm) + | (AtlasImageFormat::R32FLOAT, wgpu::TextureFormat::Rgba8Unorm) + | (AtlasImageFormat::D32FLOAT, wgpu::TextureFormat::Rgba8Unorm) => { + bytemuck::cast_slice::(&bytes) + .iter() + .copied() + .map(f32_to_u8) + .collect() + } + (AtlasImageFormat::R32FLOAT, wgpu::TextureFormat::R32Float) => bytes, + // TODO: add more atlas format conversions + (from, to) => panic!("cannot convert from atlas format {from:?} to {to:?}"), } } diff --git a/crates/renderling/src/atlas/cpu.rs b/crates/renderling/src/atlas/cpu.rs index a711c744..4b88ae2b 100644 --- a/crates/renderling/src/atlas/cpu.rs +++ b/crates/renderling/src/atlas/cpu.rs @@ -1,19 +1,25 @@ -use core::ops::Deref; -use std::sync::{Arc, RwLock}; +use core::{ops::Deref, sync::atomic::AtomicUsize}; +use std::sync::{Arc, Mutex, RwLock}; use craballoc::{ prelude::{Hybrid, SlabAllocator, WeakHybrid}, runtime::WgpuRuntime, + slab::SlabBuffer, }; -use glam::UVec2; +use crabslab::Id; +use glam::{UVec2, UVec3}; use image::RgbaImage; use snafu::{prelude::*, OptionExt}; -use crate::texture::Texture; +use crate::{ + atlas::AtlasDescriptor, + bindgroup::ManagedBindGroup, + texture::{CopiedTextureBuffer, Texture}, +}; use super::{ - atlas_image::{convert_to_rgba8_bytes, AtlasImage}, - AtlasTexture, + atlas_image::{convert_pixels, AtlasImage}, + AtlasBlittingDescriptor, AtlasTexture, }; pub(crate) const ATLAS_SUGGESTED_SIZE: u32 = 2048; @@ -66,15 +72,13 @@ impl InternalAtlasTexture { } } -pub(crate) fn check_size(size: wgpu::Extent3d) -> Result<(), AtlasError> { +pub(crate) fn check_size(size: wgpu::Extent3d) { let conditions = size.depth_or_array_layers >= 2 && size.width == size.height && (size.width & (size.width - 1)) == 0; if !conditions { - return SizeSnafu { size }.fail(); + log::error!("{}", AtlasError::Size { size }); } - - Ok(()) } fn fan_split_n(n: usize, input: impl IntoIterator) -> Vec> { @@ -128,43 +132,41 @@ pub struct Layer { /// Clones of `Atlas` all point to the same internal data. #[derive(Clone)] pub struct Atlas { + pub(crate) slab: SlabAllocator, texture_array: Arc>, layers: Arc>>, + label: Option, + descriptor: Hybrid, } impl Atlas { - /// Create a new atlas with `size` and `num_layers` layers. - /// - /// `size` **must be a power of two**. - /// - /// ## Panics - /// Panics if `size` is _not_ a power of two. - fn new_with_texture(texture: Texture) -> Self { - let num_layers = texture.texture.size().depth_or_array_layers as usize; - let layers = vec![Layer::default(); num_layers]; - log::trace!("created atlas with {num_layers} layers"); - Atlas { - layers: Arc::new(RwLock::new(layers)), - texture_array: Arc::new(RwLock::new(texture)), - } + const LABEL: Option<&str> = Some("atlas-texture"); + + pub fn device(&self) -> &wgpu::Device { + self.slab.device() } /// Create the initial texture to use. fn create_texture( runtime: impl AsRef, size: wgpu::Extent3d, - ) -> Result { + format: Option, + label: Option<&str>, + usage: Option, + ) -> Texture { let device = &runtime.as_ref().device; let queue = &runtime.as_ref().queue; - check_size(size)?; + check_size(size); + let usage = usage.unwrap_or(wgpu::TextureUsages::empty()); let texture = device.create_texture(&wgpu::TextureDescriptor { - label: Some("atlas texture"), + label: Some(label.unwrap_or(Self::LABEL.unwrap())), size, mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: wgpu::TextureFormat::Rgba8Unorm, - usage: wgpu::TextureUsages::TEXTURE_BINDING + format: format.unwrap_or(wgpu::TextureFormat::Rgba8Unorm), + usage: usage + | wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST | wgpu::TextureUsages::COPY_SRC, view_formats: &[], @@ -197,12 +199,7 @@ impl Atlas { ..Default::default() }; - Ok(Texture::from_wgpu_tex( - device, - texture, - Some(sampler_desc), - None, - )) + Texture::from_wgpu_tex(device, texture, Some(sampler_desc), None) } /// Create a new atlas. @@ -211,10 +208,33 @@ impl Atlas { /// /// ## Panics /// Panics if `size` is not a power of two. - pub fn new(runtime: impl AsRef, size: wgpu::Extent3d) -> Result { - log::trace!("creating new atlas with dimensions {size:?}"); - let texture = Self::create_texture(runtime, size)?; - Ok(Self::new_with_texture(texture)) + pub fn new( + slab: &SlabAllocator, + size: wgpu::Extent3d, + format: Option, + label: Option<&str>, + usage: Option, + ) -> Self { + let texture = Self::create_texture(slab.runtime(), size, format, label, usage); + let num_layers = texture.texture.size().depth_or_array_layers as usize; + let layers = vec![Layer::default(); num_layers]; + log::trace!("creating new atlas with dimensions {size:?}, {num_layers} layers"); + let descriptor = slab.new_value(AtlasDescriptor { + size: UVec3::new(size.width, size.height, size.depth_or_array_layers), + }); + let label = label.map(|s| s.to_owned()); + + Atlas { + slab: slab.clone(), + layers: Arc::new(RwLock::new(layers)), + texture_array: Arc::new(RwLock::new(texture)), + descriptor, + label, + } + } + + pub fn descriptor_id(&self) -> Id { + self.descriptor.id() } pub fn len(&self) -> usize { @@ -228,10 +248,10 @@ impl Atlas { self.len() == 0 } - /// Returns a clone of the current atlas texture array. - pub fn get_texture(&self) -> Texture { + /// Returns a reference to the current atlas texture array. + pub fn get_texture(&self) -> impl Deref + '_ { // UNWRAP: panic on purpose - self.texture_array.read().unwrap().clone() + self.texture_array.read().unwrap() } pub fn get_layers(&self) -> impl Deref> + '_ { @@ -244,7 +264,6 @@ impl Atlas { /// Any existing `Hybrid`s will be invalidated. pub fn set_images( &self, - slab: &SlabAllocator, images: &[AtlasImage], ) -> Result>, AtlasError> { log::debug!("setting images"); @@ -257,7 +276,7 @@ impl Atlas { vec![Layer::default(); texture.texture.size().depth_or_array_layers as usize]; let _old_layers = std::mem::replace(layers, new_layers); } - self.add_images(slab, images) + self.add_images(images) } pub fn get_size(&self) -> wgpu::Extent3d { @@ -265,11 +284,10 @@ impl Atlas { self.texture_array.read().unwrap().texture.size() } - // TODO: Atlas should probably clone a reference to the runtime and the slab. - pub fn add_images( + /// Add the given images + pub fn add_images<'a>( &self, - slab: &SlabAllocator, - images: &[AtlasImage], + images: impl IntoIterator, ) -> Result>, AtlasError> { // UNWRAP: POP let mut layers = self.layers.write().unwrap(); @@ -280,11 +298,12 @@ impl Atlas { .context(CannotPackTexturesSnafu { size: extent })?; let mut staged = StagedResources::try_staging( - slab.runtime(), + self.slab.runtime(), extent, newly_packed_layers, - Some(slab), + Some(&self.slab), &texture_array, + self.label.as_deref(), )?; // Commit our newly staged values, now that everything is done. @@ -319,6 +338,7 @@ impl Atlas { newly_packed_layers, None::<&SlabAllocator>, &texture_array, + self.label.as_deref(), )?; // Commit our newly staged values, now that everything is done. @@ -363,39 +383,60 @@ impl Atlas { } } - /// Read the atlas image from the GPU. + /// Read the atlas image from the GPU into a [`CopiedTextureBuffer`]. /// /// This is primarily for testing. /// - /// The resulting image will be in a **linear** color space. - /// /// ## Panics - /// Panics if the pixels read from the GPU cannot be converted into an - /// `RgbaImage`. - pub fn atlas_img(&self, ctx: &crate::Context, layer: u32) -> RgbaImage { + /// Panics if the pixels read from the GPU cannot be read. + pub fn atlas_img_buffer( + &self, + runtime: impl AsRef, + layer: u32, + ) -> CopiedTextureBuffer { + let runtime = runtime.as_ref(); let tex = self.get_texture(); let size = tex.texture.size(); - let buffer = Texture::read_from( - ctx, + let (channels, subpixel_bytes) = + crate::texture::wgpu_texture_format_channels_and_subpixel_bytes(tex.texture.format()); + log::info!("atlas_texture_format: {:#?}", tex.texture.format()); + log::info!("atlas_texture_channels: {channels:#?}"); + log::info!("atlas_texture_subpixel_bytes: {subpixel_bytes:#?}"); + Texture::read_from( + runtime, &tex.texture, size.width as usize, size.height as usize, - 4, - 1, + channels as usize, + subpixel_bytes as usize, 0, Some(wgpu::Origin3d { x: 0, y: 0, z: layer, }), - ); - buffer.into_linear_rgba(ctx.get_device()).unwrap() + ) + } + + /// Read the atlas image from the GPU. + /// + /// This is primarily for testing. + /// + /// The resulting image will be in a **linear** color space. + /// + /// ## Panics + /// Panics if the pixels read from the GPU cannot be converted into an + /// `RgbaImage`. + pub fn atlas_img(&self, runtime: impl AsRef, layer: u32) -> RgbaImage { + let runtime = runtime.as_ref(); + let buffer = self.atlas_img_buffer(runtime, layer); + buffer.into_linear_rgba(&runtime.device).unwrap() } } fn pack_images<'a>( layers: &[Layer], - images: &'a [AtlasImage], + images: impl IntoIterator, extent: wgpu::Extent3d, ) -> Option>>> { let mut new_packing: Vec = { @@ -414,7 +455,7 @@ fn pack_images<'a>( }) .chain( images - .iter() + .into_iter() .enumerate() .map(|(i, image)| AnotherPacking::Img { original_index: i, @@ -462,9 +503,16 @@ impl StagedResources { newly_packed_layers: Vec>, slab: Option<&SlabAllocator>, old_texture_array: &Texture, + label: Option<&str>, ) -> Result { let runtime = runtime.as_ref(); - let new_texture_array = Atlas::create_texture(runtime, extent)?; + let new_texture_array = Atlas::create_texture( + runtime, + extent, + Some(old_texture_array.texture.format()), + label, + Some(old_texture_array.texture.usage()), + ); let mut output = vec![]; let mut encoder = runtime .device @@ -504,9 +552,10 @@ impl StagedResources { .push(InternalAtlasTexture::from_hybrid(&texture)); output.push((original_index, texture)); - let bytes = convert_to_rgba8_bytes( + let bytes = convert_pixels( image.pixels.clone(), image.format, + old_texture_array.texture.format(), image.apply_linear_transfer, ); @@ -529,14 +578,14 @@ impl StagedResources { // write the new image from the CPU to the new texture runtime.queue.write_texture( - wgpu::ImageCopyTexture { + wgpu::TexelCopyTextureInfo { texture: &new_texture_array.texture, mip_level: 0, origin, aspect: wgpu::TextureAspect::All, }, &bytes, - wgpu::ImageDataLayout { + wgpu::TexelCopyBufferLayout { offset: 0, bytes_per_row: Some(4 * size_px.x), rows_per_image: Some(size_px.y), @@ -551,17 +600,13 @@ impl StagedResources { // copy the frame from the old texture to the new texture // in a new destination encoder.copy_texture_to_texture( - wgpu::ImageCopyTexture { + wgpu::TexelCopyTextureInfo { texture: &old_texture_array.texture, mip_level: 0, - origin: wgpu::Origin3d { - x: t.offset_px.x, - y: t.offset_px.y, - z: t.layer_index, - }, + origin: t.origin(), aspect: wgpu::TextureAspect::All, }, - wgpu::ImageCopyTexture { + wgpu::TexelCopyTextureInfo { texture: &new_texture_array.texture, mip_level: 0, origin: wgpu::Origin3d { @@ -571,11 +616,7 @@ impl StagedResources { }, aspect: wgpu::TextureAspect::All, }, - wgpu::Extent3d { - width: size_px.x, - height: size_px.y, - depth_or_array_layers: 1, - }, + t.size_as_extent(), ); t.layer_index = layer_index as u32; @@ -597,6 +638,250 @@ impl StagedResources { } } +/// A reusable blitting operation that copies a source texture into a specific +/// frame of an [`Atlas`]. +#[derive(Clone)] +pub struct AtlasBlittingOperation { + atlas_slab_buffer: Arc>>, + pipeline: Arc, + bindgroup: ManagedBindGroup, + bindgroup_layout: Arc, + sampler: Arc, + from_texture_id: Arc, + pub(crate) desc: Hybrid, +} + +impl AtlasBlittingOperation { + /// Copies the data from texture this [`AtlasBlittingOperation`] was created with + /// into the atlas. + /// + /// The original items used to create the inner bind group are required here, to + /// determine whether or not the bind group needs to be invalidated. + pub fn run( + &self, + runtime: impl AsRef, + encoder: &mut wgpu::CommandEncoder, + from_texture: &crate::texture::Texture, + to_atlas: &Atlas, + atlas_texture: &Hybrid, + ) { + let runtime = runtime.as_ref(); + + // update the descriptor + self.desc.set(AtlasBlittingDescriptor { + atlas_texture_id: atlas_texture.id(), + atlas_desc_id: to_atlas.descriptor_id(), + }); + // sync the update + let _ = to_atlas.slab.commit(); + + let to_atlas_texture = to_atlas.get_texture(); + let mut atlas_slab_buffer = self.atlas_slab_buffer.lock().unwrap(); + let atlas_slab_invalid = atlas_slab_buffer.update_if_invalid(); + let from_texture_has_been_replaced = { + let prev_id = self + .from_texture_id + .swap(from_texture.id(), std::sync::atomic::Ordering::Relaxed); + from_texture.id() != prev_id + }; + let should_invalidate = atlas_slab_invalid || from_texture_has_been_replaced; + let bindgroup = self.bindgroup.get(should_invalidate, || { + runtime + .device + .create_bind_group(&wgpu::BindGroupDescriptor { + label: Some("atlas-blitting"), + layout: &self.bindgroup_layout, + entries: &[ + wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::Buffer( + atlas_slab_buffer.deref().as_entire_buffer_binding(), + ), + }, + wgpu::BindGroupEntry { + binding: 1, + resource: wgpu::BindingResource::TextureView(&from_texture.view), + }, + wgpu::BindGroupEntry { + binding: 2, + resource: wgpu::BindingResource::Sampler(&self.sampler), + }, + ], + }) + }); + + let atlas_texture = atlas_texture.get(); + let atlas_view = to_atlas_texture + .texture + .create_view(&wgpu::TextureViewDescriptor { + label: Some("atlas-blitting"), + format: None, + dimension: Some(wgpu::TextureViewDimension::D2), + usage: None, + aspect: wgpu::TextureAspect::All, + base_mip_level: 0, + mip_level_count: None, + base_array_layer: atlas_texture.layer_index, + array_layer_count: Some(1), + }); + let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("atlas-blitter"), + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: &atlas_view, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Load, + store: wgpu::StoreOp::Store, + }, + })], + depth_stencil_attachment: None, + timestamp_writes: None, + occlusion_query_set: None, + }); + pass.set_pipeline(&self.pipeline); + pass.set_bind_group(0, Some(bindgroup.as_ref()), &[]); + let id = self.desc.id(); + pass.draw(0..6, id.inner()..id.inner() + 1); + } +} + +/// A texture blitting utility. +/// +/// [`AtlasBlitter`] copies textures to specific frames within the texture atlas. +/// +/// Use this if you want to just render/copy texture A to texture B where +/// [CommandEncoder::copy_texture_to_texture] would not work because of either +/// - Textures are in incompatible formats +/// - Textures are of different sizes +#[derive(Clone)] +pub struct AtlasBlitter { + pipeline: Arc, + bind_group_layout: Arc, + sampler: Arc, +} + +impl AtlasBlitter { + /// Returns a new [`TextureBlitter`] + /// # Arguments + /// - `device` - A [`Device`] + /// - `format` - The [`TextureFormat`] of the texture that will be copied to. This has to be renderable. + /// - `sample_type` - The [`Sampler`] Filtering Mode + pub fn new( + device: &wgpu::Device, + format: wgpu::TextureFormat, + sample_type: wgpu::FilterMode, + ) -> Self { + let sampler = device.create_sampler(&wgpu::SamplerDescriptor { + label: Some("atlas-blitter"), + address_mode_u: wgpu::AddressMode::ClampToEdge, + address_mode_v: wgpu::AddressMode::ClampToEdge, + address_mode_w: wgpu::AddressMode::ClampToEdge, + mag_filter: sample_type, + ..Default::default() + }); + + let bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + label: Some("atlas-blitter"), + entries: &[ + wgpu::BindGroupLayoutEntry { + binding: 0, + visibility: wgpu::ShaderStages::VERTEX, + ty: wgpu::BindingType::Buffer { + ty: wgpu::BufferBindingType::Storage { read_only: true }, + has_dynamic_offset: false, + min_binding_size: None, + }, + count: None, + }, + wgpu::BindGroupLayoutEntry { + binding: 1, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Texture { + sample_type: wgpu::TextureSampleType::Float { + filterable: sample_type == wgpu::FilterMode::Linear, + }, + view_dimension: wgpu::TextureViewDimension::D2, + multisampled: false, + }, + count: None, + }, + wgpu::BindGroupLayoutEntry { + binding: 2, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Sampler(if sample_type == wgpu::FilterMode::Linear { + wgpu::SamplerBindingType::Filtering + } else { + wgpu::SamplerBindingType::NonFiltering + }), + count: None, + }, + ], + }); + + let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + label: Some("atlas-blitter"), + bind_group_layouts: &[&bind_group_layout], + push_constant_ranges: &[], + }); + + let vertex = crate::linkage::atlas_blit_vertex::linkage(device); + let fragment = crate::linkage::atlas_blit_fragment::linkage(device); + let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { + label: Some("atlas-blitter"), + layout: Some(&pipeline_layout), + vertex: wgpu::VertexState { + module: &vertex.module, + entry_point: Some(vertex.entry_point), + compilation_options: wgpu::PipelineCompilationOptions::default(), + buffers: &[], + }, + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, + front_face: wgpu::FrontFace::Ccw, + cull_mode: None, + unclipped_depth: false, + polygon_mode: wgpu::PolygonMode::Fill, + conservative: false, + }, + depth_stencil: None, + multisample: wgpu::MultisampleState::default(), + fragment: Some(wgpu::FragmentState { + module: &fragment.module, + entry_point: Some(fragment.entry_point), + compilation_options: wgpu::PipelineCompilationOptions::default(), + targets: &[Some(wgpu::ColorTargetState { + format, + blend: None, + write_mask: wgpu::ColorWrites::ALL, + })], + }), + multiview: None, + cache: None, + }); + + Self { + pipeline: pipeline.into(), + bind_group_layout: bind_group_layout.into(), + sampler: sampler.into(), + } + } + + pub fn new_blitting_operation(&self, into_atlas: &Atlas) -> AtlasBlittingOperation { + AtlasBlittingOperation { + desc: into_atlas + .slab + .new_value(AtlasBlittingDescriptor::default()), + atlas_slab_buffer: Arc::new(Mutex::new(into_atlas.slab.commit())), + bindgroup: ManagedBindGroup::default(), + pipeline: self.pipeline.clone(), + sampler: self.sampler.clone(), + bindgroup_layout: self.bind_group_layout.clone(), + from_texture_id: Default::default(), + } + } +} + #[cfg(test)] mod test { use crate::{ diff --git a/crates/renderling/src/bindgroup.rs b/crates/renderling/src/bindgroup.rs index 8c868678..e90b68de 100644 --- a/crates/renderling/src/bindgroup.rs +++ b/crates/renderling/src/bindgroup.rs @@ -8,13 +8,28 @@ use std::sync::{Arc, RwLock}; /// re-creating bindgroups. #[derive(Clone)] pub struct ManagedBindGroup { - bindgroup: Arc>>, + bindgroup: Arc>>>, +} + +impl Default for ManagedBindGroup { + fn default() -> Self { + Self::new() + } +} + +impl From for ManagedBindGroup { + fn from(value: wgpu::BindGroup) -> Self { + let mbg = ManagedBindGroup::new(); + // UNWRAP: POP + *mbg.bindgroup.write().unwrap() = Some(value.into()); + mbg + } } impl ManagedBindGroup { - pub fn new(buffer: wgpu::BindGroup) -> Self { + pub fn new() -> Self { Self { - bindgroup: Arc::new(RwLock::new(buffer.into())), + bindgroup: Arc::new(RwLock::new(None)), } } @@ -23,14 +38,22 @@ impl ManagedBindGroup { should_invalidate: bool, fn_recreate: impl FnOnce() -> wgpu::BindGroup, ) -> Arc { - if should_invalidate { + let recreate = || { let mut guard = self.bindgroup.write().unwrap(); let bg = Arc::new(fn_recreate()); - *guard = bg.clone(); + *guard = Some(bg.clone()); bg + }; + if should_invalidate { + recreate() } else { - self.bindgroup.read().unwrap().clone() + let maybe_buffer = self.bindgroup.read().unwrap().clone(); + if let Some(buffer) = maybe_buffer { + buffer + } else { + recreate() + } } } } diff --git a/crates/renderling/src/bloom/cpu.rs b/crates/renderling/src/bloom/cpu.rs index 8310b5c4..0bab8bd8 100644 --- a/crates/renderling/src/bloom/cpu.rs +++ b/crates/renderling/src/bloom/cpu.rs @@ -416,7 +416,7 @@ impl Bloom { let upsample_filter_radius = slab.new_value(1.0 / Vec2::new(resolution.x as f32, resolution.y as f32)); let mix_strength = slab.new_value(0.04f32); - let slab_buffer = slab.upkeep(); + let slab_buffer = slab.commit(); let downsample_pipeline = Arc::new(create_bloom_downsample_pipeline(&runtime.device)); let upsample_pipeline = Arc::new(create_bloom_upsample_pipeline(&runtime.device)); @@ -684,7 +684,7 @@ impl Bloom { } pub fn bloom(&self, device: &wgpu::Device, queue: &wgpu::Queue) { - self.slab.upkeep(); + self.slab.commit(); assert!( self.slab_buffer.is_valid(), "bloom slab buffer should never resize" diff --git a/crates/renderling/src/context.rs b/crates/renderling/src/context.rs index 770fa11a..c9667322 100644 --- a/crates/renderling/src/context.rs +++ b/crates/renderling/src/context.rs @@ -170,7 +170,7 @@ fn new_instance(backends: Option) -> wgpu::Instance { ); // BackendBit::PRIMARY => Vulkan + Metal + DX12 + Browser WebGPU let backends = backends.unwrap_or(wgpu::Backends::PRIMARY); - let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { + let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor { backends, ..Default::default() }); @@ -338,9 +338,9 @@ impl Frame { // Copy the data from the surface texture to the buffer encoder.copy_texture_to_buffer( texture.as_image_copy(), - wgpu::ImageCopyBuffer { + wgpu::TexelCopyBufferInfo { buffer: &buffer, - layout: wgpu::ImageDataLayout { + layout: wgpu::TexelCopyBufferLayout { offset: 0, bytes_per_row: Some(dimensions.padded_bytes_per_row as u32), rows_per_image: None, @@ -601,6 +601,10 @@ impl Context { Texture::from_wgpu_tex(self.get_device(), texture, sampler, None) } + pub fn runtime(&self) -> &WgpuRuntime { + &self.runtime + } + pub fn get_device(&self) -> &wgpu::Device { &self.runtime.device } @@ -662,7 +666,7 @@ impl Context { height: size.y, depth_or_array_layers: size.z, }; - crate::atlas::check_size(size).unwrap(); + crate::atlas::check_size(size); *self.atlas_size.write().unwrap() = size; self } diff --git a/crates/renderling/src/cull/cpu.rs b/crates/renderling/src/cull/cpu.rs index 2c032568..36d3839b 100644 --- a/crates/renderling/src/cull/cpu.rs +++ b/crates/renderling/src/cull/cpu.rs @@ -160,7 +160,7 @@ impl ComputeCulling { Self { pipeline, bindgroup_layout, - bindgroup: ManagedBindGroup::new(bindgroup), + bindgroup: ManagedBindGroup::from(bindgroup), compute_depth_pyramid, pyramid_slab_buffer, stage_slab_buffer: stage_slab_buffer.clone(), @@ -180,9 +180,9 @@ impl ComputeCulling { // Compute the depth pyramid from last frame's depth buffer self.compute_depth_pyramid.run(depth_texture); - let stage_slab_invalid = self.stage_slab_buffer.synchronize(); - let indirect_slab_invalid = self.indirect_slab_buffer.synchronize(); - let pyramid_slab_invalid = self.pyramid_slab_buffer.synchronize(); + let stage_slab_invalid = self.stage_slab_buffer.update_if_invalid(); + let indirect_slab_invalid = self.indirect_slab_buffer.update_if_invalid(); + let pyramid_slab_invalid = self.pyramid_slab_buffer.update_if_invalid(); let should_recreate_bindgroup = stage_slab_invalid || indirect_slab_invalid || pyramid_slab_invalid; log::trace!("stage_slab_invalid: {stage_slab_invalid}"); @@ -270,7 +270,7 @@ impl DepthPyramid { self.mip = mip.into_gpu_only(); // Reclaim the dropped buffer slots - self.slab.upkeep(); + self.slab.commit(); // Reallocate let (mip_data, mip) = Self::allocate(size, &self.desc, &self.slab); @@ -278,7 +278,7 @@ impl DepthPyramid { self.mip = mip; // Run upkeep one more time to sync the resize - self.slab.upkeep(); + self.slab.commit(); } pub fn size(&self) -> UVec2 { @@ -428,7 +428,7 @@ impl ComputeCopyDepth { let sample_count = depth_texture.texture.sample_count(); let bindgroup_layout = Self::create_bindgroup_layout(device, sample_count); let pipeline = Self::create_pipeline(device, &bindgroup_layout, sample_count > 1); - let pyramid_slab_buffer = depth_pyramid.slab.upkeep(); + let pyramid_slab_buffer = depth_pyramid.slab.commit(); let buffer = Self::create_bindgroup( device, &bindgroup_layout, @@ -437,7 +437,7 @@ impl ComputeCopyDepth { ); Self { pipeline, - bindgroup: ManagedBindGroup::new(buffer), + bindgroup: ManagedBindGroup::from(buffer), bindgroup_layout, pyramid_slab_buffer, sample_count, @@ -474,9 +474,9 @@ impl ComputeCopyDepth { } // TODO: check if we need to upkeep the depth pyramid slab here. - let _ = pyramid.slab.upkeep(); + let _ = pyramid.slab.commit(); let should_recreate_bindgroup = - self.pyramid_slab_buffer.synchronize() || sample_count_mismatch || size_changed; + self.pyramid_slab_buffer.update_if_invalid() || sample_count_mismatch || size_changed; let bindgroup = self.bindgroup.get(should_recreate_bindgroup, || { Self::create_bindgroup( &runtime.device, @@ -577,7 +577,7 @@ impl ComputeDownsampleDepth { let device = pyramid.slab.device(); let bindgroup_layout = Self::create_bindgroup_layout(device); let pipeline = Self::create_pipeline(device, &bindgroup_layout); - let pyramid_slab_buffer = pyramid.slab.upkeep(); + let pyramid_slab_buffer = pyramid.slab.commit(); let bindgroup = Self::create_bindgroup(device, &bindgroup_layout, &pyramid_slab_buffer); Self { pipeline, @@ -590,7 +590,7 @@ impl ComputeDownsampleDepth { pub fn run(&mut self, pyramid: &DepthPyramid) { let device = pyramid.slab.device(); - if self.pyramid_slab_buffer.synchronize() { + if self.pyramid_slab_buffer.update_if_invalid() { self.bindgroup = Self::create_bindgroup(device, &self.bindgroup_layout, &self.pyramid_slab_buffer); } @@ -603,7 +603,7 @@ impl ComputeDownsampleDepth { desc.size }); // Sync the change. - pyramid.slab.upkeep(); + pyramid.slab.commit(); debug_assert!( self.pyramid_slab_buffer.is_valid(), "pyramid slab should never resize here" diff --git a/crates/renderling/src/debug.rs b/crates/renderling/src/debug.rs index 72b5e924..d839a99b 100644 --- a/crates/renderling/src/debug.rs +++ b/crates/renderling/src/debug.rs @@ -1,8 +1,6 @@ //! Debug overlay. use crabslab::{Id, Slab}; use glam::{Vec2, Vec3Swizzles, Vec4, Vec4Swizzles}; -#[cfg(target_arch = "spirv")] -use spirv_std::num_traits::Float; use spirv_std::{arch::IndexUnchecked, spirv}; use crate::{draw::DrawIndirectArgs, pbr::PbrConfig, sdf, stage::Renderlet, transform::Transform}; diff --git a/crates/renderling/src/draw/cpu.rs b/crates/renderling/src/draw/cpu.rs index 8b2c5d33..4b56ef53 100644 --- a/crates/renderling/src/draw/cpu.rs +++ b/crates/renderling/src/draw/cpu.rs @@ -1,13 +1,10 @@ //! CPU-only side of renderling/draw.rs -use std::sync::Arc; - use craballoc::{ prelude::{Gpu, Hybrid, SlabAllocator, WeakHybrid, WgpuRuntime}, slab::SlabBuffer, }; use crabslab::Id; -use glam::UVec2; use rustc_hash::FxHashMap; use crate::{ @@ -66,7 +63,7 @@ impl IndirectDraws { compute_culling: ComputeCulling::new( runtime, stage_slab_buffer, - &indirect_slab.upkeep(), + &indirect_slab.commit(), depth_texture, ), slab: indirect_slab, @@ -81,7 +78,7 @@ impl IndirectDraws { } fn get_indirect_buffer(&self) -> SlabBuffer { - self.slab.upkeep() + self.slab.commit() } fn sync_with_internal_renderlets( @@ -93,8 +90,8 @@ impl IndirectDraws { self.invalidate(); // Pre-upkeep to reclaim resources - this is necessary because // the draw buffer has to be contiguous (it can't start with a bunch of trash) - let indirect_buffer = self.slab.upkeep(); - if indirect_buffer.is_new_this_upkeep() { + let indirect_buffer = self.slab.commit(); + if indirect_buffer.is_new_this_commit() { log::warn!("new indirect buffer"); } self.draws = internal_renderlets diff --git a/crates/renderling/src/lib.rs b/crates/renderling/src/lib.rs index 7241ab07..ed7e0f6b 100644 --- a/crates/renderling/src/lib.rs +++ b/crates/renderling/src/lib.rs @@ -226,6 +226,58 @@ mod test { std::path::PathBuf::from(std::env!("CARGO_WORKSPACE_DIR")) } + pub fn capture_gpu_frame( + ctx: &Context, + path: impl AsRef, + f: impl FnOnce() -> T, + ) -> T { + let path = workspace_dir().join("test_output").join(path); + let parent = path.parent().unwrap(); + std::fs::create_dir_all(parent).unwrap(); + + #[cfg(target_os = "macos")] + { + if path.exists() { + log::info!( + "deleting {} before writing gpu frame capture", + path.display() + ); + std::fs::remove_dir_all(&path).unwrap(); + } + + if std::env::var("METAL_CAPTURE_ENABLED").is_err() { + log::error!("Env var METAL_CAPTURE_ENABLED must be set"); + panic!("missing METAL_CAPTURE_ENABLED=1"); + } + + let m = metal::CaptureManager::shared(); + let desc = metal::CaptureDescriptor::new(); + + desc.set_destination(metal::MTLCaptureDestination::GpuTraceDocument); + desc.set_output_url(path); + unsafe { + ctx.get_device() + .as_hal::(|maybe_metal_device| { + if let Some(metal_device) = maybe_metal_device { + desc.set_capture_device( + metal_device.raw_device().try_lock().unwrap().as_ref(), + ); + } else { + panic!("not a capturable device") + } + }) + }; + m.start_capture(&desc).unwrap(); + let t = f(); + m.stop_capture(); + t + } + #[cfg(not(target_os = "macos"))] + { + f() + } + } + #[test] fn sanity_transmute() { let zerof32 = 0f32; @@ -769,7 +821,7 @@ mod test { #[test] /// Tests shading with directional light. fn scene_cube_directional() { - use crate::light::{DirectionalLight, Light, LightStyle}; + use crate::light::{DirectionalLightDescriptor, Light, LightStyle}; let ctx = Context::headless(100, 100); let stage = ctx @@ -784,33 +836,38 @@ mod test { let red = Vec3::X.extend(1.0); let green = Vec3::Y.extend(1.0); let blue = Vec3::Z.extend(1.0); - let dir_red = stage.new_value(DirectionalLight { - direction: Vec3::NEG_Y, - color: red, - intensity: 10.0, - }); - let dir_green = stage.new_value(DirectionalLight { - direction: Vec3::NEG_X, - color: green, - intensity: 10.0, - }); - let dir_blue = stage.new_value(DirectionalLight { - direction: Vec3::NEG_Z, - color: blue, - intensity: 10.0, - }); + let dir_red = stage.lighting().new_directional_light( + DirectionalLightDescriptor { + direction: Vec3::NEG_Y, + color: red, + intensity: 10.0, + }, + None, + ); + let _dir_green = stage.lighting().new_directional_light( + DirectionalLightDescriptor { + direction: Vec3::NEG_X, + color: green, + intensity: 10.0, + }, + None, + ); + let _dir_blue = stage.lighting().new_directional_light( + DirectionalLightDescriptor { + direction: Vec3::NEG_Z, + color: blue, + intensity: 10.0, + }, + None, + ); assert_eq!( Light { light_type: LightStyle::Directional, - index: dir_red.id().inner(), + index: dir_red.light_details.as_directional().unwrap().id().inner(), ..Default::default() }, - dir_red.id().into() + Light::from(dir_red.light_details.as_directional().unwrap().id()) ); - let dir_red = stage.new_value(Light::from(dir_red.id())); - let dir_green = stage.new_value(Light::from(dir_green.id())); - let dir_blue = stage.new_value(Light::from(dir_blue.id())); - stage.set_lights(vec![dir_red.id(), dir_green.id(), dir_blue.id()]); let material = stage.new_value(Material::default()); let geometry = stage.new_array( diff --git a/crates/renderling/src/light.rs b/crates/renderling/src/light.rs index 4eee3f37..51f39739 100644 --- a/crates/renderling/src/light.rs +++ b/crates/renderling/src/light.rs @@ -3,17 +3,53 @@ //! Directional, point and spot lights. //! //! Shadow mapping. -use crabslab::{Id, Slab, SlabItem}; -use glam::{Mat4, Vec3, Vec4, Vec4Swizzles}; +use crabslab::{Array, Id, Slab, SlabItem}; +use glam::{Mat4, UVec2, Vec3, Vec3Swizzles, Vec4, Vec4Swizzles}; use spirv_std::spirv; -use crate::{camera::Camera, math::IsVector, stage::Renderlet, transform::Transform}; +use crate::{ + atlas::{AtlasDescriptor, AtlasTexture}, + bvol::Frustum, + math::{IsSampler, IsVector, Sample2dArray}, + stage::Renderlet, + transform::Transform, +}; #[cfg(cpu)] mod cpu; #[cfg(cpu)] pub use cpu::*; +/// Root descriptor of the lighting system. +#[derive(Clone, Copy, Default, SlabItem, core::fmt::Debug)] +#[offsets] +pub struct LightingDescriptor { + /// List of all analytical lights in the scene. + pub analytical_lights_array: Array>, + /// Shadow mapping atlas info. + pub shadow_map_atlas_descriptor_id: Id, + /// `Id` of the [`ShadowMapDescriptor`] to use when updating + /// a shadow map. + /// + /// This changes from each run of the `shadow_mapping_vertex`. + pub update_shadow_map_id: Id, + /// The index of the shadow map atlas texture to update. + pub update_shadow_map_texture_index: u32, +} + +#[derive(Clone, Copy, Default, SlabItem, core::fmt::Debug)] +pub struct ShadowMapDescriptor { + pub light_space_transforms_array: Array, + /// Pointers to the atlas textures where the shadow map depth + /// data is stored. + /// + /// This will be an array of one `Id` for directional and spot lights, + /// and an array of four `Id`s for a point light. + pub atlas_textures_array: Array>, + pub bias_min: f32, + pub bias_max: f32, +} + #[cfg(test)] #[derive(Default, Debug, Clone, Copy, PartialEq)] pub struct ShadowMappingVertexInfo { @@ -28,6 +64,18 @@ pub struct ShadowMappingVertexInfo { } /// Shadow mapping vertex shader. +/// +/// It is assumed that a [`LightingDescriptor`] is stored at `Id(0)` of the +/// `light_slab`. +/// +/// This shader reads the [`LightingDescriptor`] to find the shadow map to +/// be updated, then determines the clip positions to emit based on the +/// shadow map's atlas texture. +/// +/// It then renders the renderlet into the designated atlas frame. +// Note: +// If this is taking too long to render for each renderlet, think about +// a frustum and occlusion culling pass to generate the list of renderlets. #[spirv(vertex)] #[allow(clippy::too_many_arguments)] pub fn shadow_mapping_vertex( @@ -36,16 +84,14 @@ pub fn shadow_mapping_vertex( // Which vertex within the renderlet are we rendering #[spirv(vertex_index)] vertex_index: u32, // The slab where the renderlet's geometry is staged - #[spirv(storage_buffer, descriptor_set = 0, binding = 0)] slab: &[u32], - // The projection*view matrix that puts world coordinates into clip space. - // - // This is the projection*view from the light's point of view. - #[spirv(storage_buffer, descriptor_set = 0, binding = 1)] light_transform: &Mat4, + #[spirv(storage_buffer, descriptor_set = 0, binding = 0)] geometry_slab: &[u32], + // The slab where the scene's lighting data is staged + #[spirv(storage_buffer, descriptor_set = 0, binding = 1)] light_slab: &[u32], #[spirv(position)] out_clip_pos: &mut Vec4, #[cfg(test)] out_comparison_info: &mut ShadowMappingVertexInfo, ) { - let renderlet = slab.read_unchecked(renderlet_id); + let renderlet = geometry_slab.read_unchecked(renderlet_id); if !renderlet.visible { // put it outside the clipping frustum *out_clip_pos = Vec4::new(10.0, 10.0, 10.0, 1.0); @@ -53,9 +99,15 @@ pub fn shadow_mapping_vertex( } let (_vertex, _transform, _model_matrix, world_pos) = - renderlet.get_vertex_info(vertex_index, slab); - - let clip_pos = *light_transform * world_pos.extend(1.0); + renderlet.get_vertex_info(vertex_index, geometry_slab); + + let lighting_desc = light_slab.read_unchecked(Id::::new(0)); + let shadow_desc = light_slab.read_unchecked(lighting_desc.update_shadow_map_id); + let light_space_transform_id = shadow_desc + .light_space_transforms_array + .at(lighting_desc.update_shadow_map_texture_index as usize); + let light_space_transform = light_slab.read_unchecked(light_space_transform_id); + let clip_pos = light_space_transform * world_pos.extend(1.0); #[cfg(test)] { *out_comparison_info = ShadowMappingVertexInfo { @@ -65,7 +117,7 @@ pub fn shadow_mapping_vertex( transform: _transform, model_matrix: _model_matrix, world_pos, - view_projection: *light_transform, + view_projection: light_space_transform, clip_pos, }; } @@ -80,7 +132,7 @@ pub fn shadow_mapping_fragment(clip_pos: Vec4, frag_color: &mut Vec4) { #[repr(C)] #[cfg_attr(not(target_arch = "spirv"), derive(Debug))] #[derive(Copy, Clone, SlabItem)] -pub struct SpotLight { +pub struct SpotLightDescriptor { pub position: Vec3, pub direction: Vec3, pub inner_cutoff: f32, @@ -89,7 +141,7 @@ pub struct SpotLight { pub intensity: f32, } -impl Default for SpotLight { +impl Default for SpotLightDescriptor { fn default() -> Self { let white = Vec4::splat(1.0); let inner_cutoff = core::f32::consts::PI / 3.0; @@ -112,13 +164,13 @@ impl Default for SpotLight { #[repr(C)] #[cfg_attr(not(target_arch = "spirv"), derive(Debug))] #[derive(Copy, Clone, SlabItem)] -pub struct DirectionalLight { +pub struct DirectionalLightDescriptor { pub direction: Vec3, pub color: Vec4, pub intensity: f32, } -impl Default for DirectionalLight { +impl Default for DirectionalLightDescriptor { fn default() -> Self { let direction = Vec3::new(0.0, -1.0, 0.0); let color = Vec4::splat(1.0); @@ -132,14 +184,14 @@ impl Default for DirectionalLight { } } -impl DirectionalLight { +impl DirectionalLightDescriptor { + // TODO: add `shadow_mapping_projection_and_view` to `SpotLight` pub fn shadow_mapping_projection_and_view( &self, parent_light_transform: &Mat4, - camera: &Camera, + // Limits of the reach of the light + frustum: Frustum, ) -> (Mat4, Mat4) { - // TODO: add `shadow_mapping_projection_and_view` to `SpotLight` - let frustum = camera.frustum(); let depth = frustum.depth(); let hd = depth * 0.5; let projection = Mat4::orthographic_rh(-hd, hd, -hd, hd, 0.0, depth); @@ -147,6 +199,8 @@ impl DirectionalLight { .transform_vector3(self.direction) .alt_norm_or_zero(); let position = -direction * depth * 0.5; + crate::println!("direction: {direction}"); + crate::println!("position: {position}"); let view = Mat4::look_to_rh(position, direction, Vec3::Z); (projection, view) } @@ -155,13 +209,13 @@ impl DirectionalLight { #[repr(C)] #[cfg_attr(not(target_arch = "spirv"), derive(Debug))] #[derive(Copy, Clone, SlabItem)] -pub struct PointLight { +pub struct PointLightDescriptor { pub position: Vec3, pub color: Vec4, pub intensity: f32, } -impl Default for PointLight { +impl Default for PointLightDescriptor { fn default() -> Self { let color = Vec4::splat(1.0); let intensity = 1.0; @@ -204,16 +258,21 @@ impl SlabItem for LightStyle { /// A type-erased/generic light that is used as a slab pointer to a /// specific light type. +// TODO: rename to `LightDescriptor` #[repr(C)] #[cfg_attr(not(target_arch = "spirv"), derive(Debug))] #[derive(Copy, Clone, PartialEq, SlabItem)] pub struct Light { /// The type of the light pub light_type: LightStyle, - /// The index of the light in the slab + /// The index of the light in the lighting slab pub index: u32, /// The id of a transform to apply to the position and direction of the light. + /// + /// This `Id` points to a transform on the geometry slab. pub transform_id: Id, + /// The id of the shadow map in use by this light. + pub shadow_map_desc_id: Id, } impl Default for Light { @@ -222,54 +281,168 @@ impl Default for Light { light_type: LightStyle::Directional, index: Id::<()>::NONE.inner(), transform_id: Id::NONE, + shadow_map_desc_id: Id::NONE, } } } -impl From> for Light { - fn from(id: Id) -> Self { +impl From> for Light { + fn from(id: Id) -> Self { Self { light_type: LightStyle::Directional, index: id.inner(), transform_id: Id::NONE, + shadow_map_desc_id: Id::NONE, } } } -impl From> for Light { - fn from(id: Id) -> Self { +impl From> for Light { + fn from(id: Id) -> Self { Self { light_type: LightStyle::Spot, index: id.inner(), transform_id: Id::NONE, + shadow_map_desc_id: Id::NONE, } } } -impl From> for Light { - fn from(id: Id) -> Self { +impl From> for Light { + fn from(id: Id) -> Self { Self { light_type: LightStyle::Point, index: id.inner(), transform_id: Id::NONE, + shadow_map_desc_id: Id::NONE, } } } impl Light { - pub fn into_directional_id(self) -> Id { + pub fn into_directional_id(self) -> Id { Id::from(self.index) } - pub fn into_spot_id(self) -> Id { + pub fn into_spot_id(self) -> Id { Id::from(self.index) } - pub fn into_point_id(self) -> Id { + pub fn into_point_id(self) -> Id { Id::from(self.index) } } +/// Parameters to the shadow mapping calculation function. +/// +/// This is mostly just to appease clippy. +pub struct ShadowCalculation { + pub shadow_map_atlas_texture: AtlasTexture, + pub shadow_map_atlas_size: UVec2, + pub frag_pos_in_light_space: Vec3, + pub surface_normal: Vec3, + pub light_direction: Vec3, + pub bias_min: f32, + pub bias_max: f32, +} + +impl ShadowCalculation { + /// Reads various required parameters from the slab and creates a `ShadowCalculation`. + pub fn new( + light_slab: &[u32], + light: crate::prelude::Light, + in_pos: Vec3, + surface_normal: Vec3, + light_direction: Vec3, + ) -> Self { + let shadow_map_descr = light_slab.read_unchecked(light.shadow_map_desc_id); + let atlas_texture = { + let atlas_texture_id = + light_slab.read_unchecked(shadow_map_descr.atlas_textures_array.at(0)); + light_slab.read_unchecked(atlas_texture_id) + }; + let atlas_size = { + let lighting_desc_id = Id::::new(0); + let atlas_desc_id = light_slab.read_unchecked( + lighting_desc_id + LightingDescriptor::OFFSET_OF_SHADOW_MAP_ATLAS_DESCRIPTOR_ID, + ); + let atlas_desc = light_slab.read_unchecked(atlas_desc_id); + atlas_desc.size + }; + let light_space_transform_id = shadow_map_descr.light_space_transforms_array.at(0); + let light_space_transform = light_slab.read_unchecked(light_space_transform_id); + let frag_pos_in_light_space = light_space_transform.project_point3(in_pos); + + ShadowCalculation { + shadow_map_atlas_texture: atlas_texture, + shadow_map_atlas_size: atlas_size.xy(), + frag_pos_in_light_space, + surface_normal, + light_direction, + bias_min: shadow_map_descr.bias_min, + bias_max: shadow_map_descr.bias_max, + } + } + + /// Returns shadow _intensity. + /// + /// Returns `1.0` when the fragment is in complete shadow. + /// Returns `0.0` when the fragment is in the light. + pub fn run(&self, shadow_map: &T, shadow_map_sampler: &S) -> f32 + where + S: IsSampler, + T: Sample2dArray, + { + let ShadowCalculation { + shadow_map_atlas_texture, + shadow_map_atlas_size, + frag_pos_in_light_space, + surface_normal, + light_direction, + bias_min, + bias_max, + } = self; + crate::println!("frag_pos_in_light_space: {frag_pos_in_light_space}"); + // The range of coordinates in the light's clip space is -1.0 to 1.0 for x and y, + // but the texture space is [0, 1], and Y increases downward, so we do this + // conversion to flip Y and also normalize to the range [0.0, 1.0]. + // Z should already be 0.0 to 1.0. + let proj_coords = shadow_map_atlas_texture.constrain_clip_coords_to_texture_space( + frag_pos_in_light_space.xy(), + *shadow_map_atlas_size, + ); + crate::println!("proj_coords: {proj_coords}"); + + // With these projected coordinates we can sample the depth map as the + // resulting [0,1] coordinates from proj_coords directly correspond to + // the transformed NDC coordinates from the `ShadowMap::update` render pass. + // This gives us the closest depth from the light's point of view: + let closest_depth = shadow_map + .sample_by_lod( + *shadow_map_sampler, + proj_coords.extend(shadow_map_atlas_texture.layer_index as f32), + 0.0, + ) + .x; + // To get the current depth at this fragment we simply retrieve the projected vector's z + // coordinate which equals the depth of this fragment from the light's perspective. + let current_depth = frag_pos_in_light_space.z; + + // If the `current_depth`, which is the depth of the fragment from the lights POV, is + // greater than the `closest_depth` of the shadow map at that fragment, the fragment + // is in shadow + crate::println!("current_depth: {current_depth}"); + crate::println!("closest_depth: {closest_depth}"); + let bias = (bias_max * (1.0 - surface_normal.dot(*light_direction))).max(*bias_min); + + if (current_depth - bias) > closest_depth { + 1.0 + } else { + 0.0 + } + } +} + #[cfg(test)] mod test { use super::*; diff --git a/crates/renderling/src/light/cpu.rs b/crates/renderling/src/light/cpu.rs index 93ef3c85..668f8364 100644 --- a/crates/renderling/src/light/cpu.rs +++ b/crates/renderling/src/light/cpu.rs @@ -1,75 +1,320 @@ //! CPU-only lighting and shadows. -use std::sync::{Arc, RwLock}; +use core::{ops::Deref, sync::atomic::AtomicUsize}; +use std::sync::{Arc, Mutex, RwLock}; use craballoc::{ prelude::{Hybrid, SlabAllocator, WgpuRuntime}, slab::SlabBuffer, + value::{ + HybridArray, HybridContainer, HybridWriteGuard, IsContainer, WeakContainer, WeakHybrid, + }, +}; +use crabslab::Id; +use glam::{Mat4, UVec2}; +use snafu::prelude::*; + +use crate::{ + atlas::{Atlas, AtlasBlitter, AtlasBlittingOperation, AtlasError, AtlasImage, AtlasTexture}, + bindgroup::ManagedBindGroup, + bvol::Frustum, + camera::Camera, + stage::{NestedTransform, Renderlet}, }; -use glam::Mat4; -use crate::{bindgroup::ManagedBindGroup, stage::Renderlet}; +use super::{ + DirectionalLightDescriptor, LightStyle, LightingDescriptor, PointLightDescriptor, + ShadowMapDescriptor, SpotLightDescriptor, +}; -use super::{DirectionalLight, PointLight, SpotLight}; +#[derive(Debug, Snafu)] +pub enum LightingError { + #[snafu(display("{source}"))] + Atlas { source: AtlasError }, +} + +impl From for LightingError { + fn from(source: AtlasError) -> Self { + LightingError::Atlas { source } + } +} /// A wrapper around all types of analytical lighting. #[derive(Clone, Debug)] -pub enum LightDetails { - Directional(Hybrid), - Point(Hybrid), - Spot(Hybrid), +pub enum LightDetails { + Directional(C::Container), + Point(C::Container), + Spot(C::Container), } -impl LightDetails { - pub fn as_directional(&self) -> Option<&Hybrid> { +impl LightDetails { + pub fn as_directional(&self) -> Option<&C::Container> { if let LightDetails::Directional(d) = self { Some(d) } else { None } } + + pub fn style(&self) -> LightStyle { + match self { + LightDetails::Directional(_) => LightStyle::Directional, + LightDetails::Point(_) => LightStyle::Point, + LightDetails::Spot(_) => LightStyle::Spot, + } + } } -pub struct ShadowMapBindGroup {} +impl LightDetails { + pub fn from_hybrid(hybrid: &LightDetails) -> Self { + match hybrid { + LightDetails::Directional(d) => LightDetails::Directional(WeakHybrid::from_hybrid(d)), + LightDetails::Point(p) => LightDetails::Point(WeakHybrid::from_hybrid(p)), + LightDetails::Spot(s) => LightDetails::Spot(WeakHybrid::from_hybrid(s)), + } + } +} /// A depth map rendering of the scene from a light's point of view. /// /// Used to project shadows from one light source for specific objects. -/// -/// Based on the -/// [shadow mapping article at learnopengl](https://learnopengl.com/Advanced-Lighting/Shadows/Shadow-Mapping). -// TODO: Separate pipeline and bindgroup layout from ShadowMap +#[derive(Clone)] pub struct ShadowMap { - /// A depth texture used to store the scene from the light's POV. - texture: Arc, - /// A slab used as a "shadow mapping" descriptor. + /// Last time the stage slab was bound. + stage_slab_buffer_creation_time: Arc, + /// Last time the light slab was bound. + light_slab_buffer_creation_time: Arc, + /// This shadow map's light transform, + shadowmap_descriptor: Hybrid, + /// This shadow map's transforms. /// - /// This tells the shadow mapping vertex shader which light we're updating. - desc: SlabAllocator, - stage_slab_buffer: SlabBuffer, - _light_transform: Hybrid, - pipeline: Arc, - bindgroup_layout: Arc, - bindgroup: ManagedBindGroup, + /// Directional and spot lights have 1, point lights + /// have 6. + #[allow(dead_code)] + light_space_transforms: HybridArray, + /// Bindgroup for the shadow map update shader + update_bindgroup: ManagedBindGroup, + atlas_textures: Vec>, + #[allow(dead_code)] + atlas_textures_array: HybridArray>, + update_texture: crate::texture::Texture, + blitting_op: AtlasBlittingOperation, } impl ShadowMap { const LABEL: Option<&str> = Some("shadow-map"); - pub fn new( - runtime: impl AsRef, - light_transform: Mat4, + /// Create the bindgroup for the shadow map update shader. + fn create_update_bindgroup( + device: &wgpu::Device, + bindgroup_layout: &wgpu::BindGroupLayout, + geometry_slab_buffer: &wgpu::Buffer, + light_slab_buffer: &wgpu::Buffer, + ) -> wgpu::BindGroup { + device.create_bind_group(&wgpu::BindGroupDescriptor { + label: Self::LABEL, + layout: bindgroup_layout, + entries: &[ + wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::Buffer( + geometry_slab_buffer.as_entire_buffer_binding(), + ), + }, + wgpu::BindGroupEntry { + binding: 1, + resource: wgpu::BindingResource::Buffer( + light_slab_buffer.as_entire_buffer_binding(), + ), + }, + ], + }) + } + + /// Returns the [`Id`] of the inner [`ShadowMapDescriptor`]. + pub fn descriptor_id(&self) -> Id { + self.shadowmap_descriptor.id() + } + + /// Returns a guard on the inner [`ShadowMapDescriptor`]. + /// + /// Use this to update descriptor values before calling `ShadowMap::update`. + pub fn descriptor_lock(&self) -> HybridWriteGuard<'_, ShadowMapDescriptor> { + self.shadowmap_descriptor.lock() + } + + /// Update the shadow map, rendering the given [`Renderlet`]s to the map as shadow casters. + // TODO: pass `AnalyticalLightBundle` to `ShadowMap::update` + pub fn update<'a>( + &self, + lighting: &Lighting, + renderlets: impl IntoIterator>, + ) { + let renderlets = renderlets.into_iter().collect::>(); + + let device = lighting.light_slab.device(); + let queue = lighting.light_slab.queue(); + let mut light_slab_buffer = lighting.light_slab_buffer.write().unwrap(); + let mut stage_slab_buffer = lighting.stage_slab_buffer.write().unwrap(); + + let bindgroup = { + light_slab_buffer.update_if_invalid(); + stage_slab_buffer.update_if_invalid(); + let stored_light_buffer_creation_time = self.light_slab_buffer_creation_time.swap( + light_slab_buffer.creation_time(), + std::sync::atomic::Ordering::Relaxed, + ); + let stored_stage_buffer_creation_time = self.stage_slab_buffer_creation_time.swap( + stage_slab_buffer.creation_time(), + std::sync::atomic::Ordering::Relaxed, + ); + let should_invalidate = light_slab_buffer.creation_time() + > stored_light_buffer_creation_time + || stage_slab_buffer.creation_time() > stored_stage_buffer_creation_time; + self.update_bindgroup.get(should_invalidate, || { + log::trace!("recreating shadow mapping bindgroup"); + Self::create_update_bindgroup( + device, + &lighting.shadow_map_update_bindgroup_layout, + &stage_slab_buffer, + &light_slab_buffer, + ) + }) + }; + let mut encoder = + device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: Self::LABEL }); + + for (i, atlas_texture) in self.atlas_textures.iter().enumerate() { + // Update the lighting descriptor to point to this shadow map, which tells the + // vertex shader which shadow map we're updating. + lighting.lighting_descriptor.modify(|ld| { + let id = self.shadowmap_descriptor.id(); + log::trace!("updating the shadow map {id:?} {i}"); + ld.update_shadow_map_id = id; + ld.update_shadow_map_texture_index = i as u32; + }); + // Sync those changes + let _ = lighting.light_slab.commit(); + { + let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Self::LABEL, + color_attachments: &[], + depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachment { + view: &self.update_texture.view, + depth_ops: Some(wgpu::Operations { + load: wgpu::LoadOp::Clear(1.0), + store: wgpu::StoreOp::Store, + }), + stencil_ops: None, + }), + ..Default::default() + }); + render_pass.set_pipeline(&lighting.shadow_map_update_pipeline); + render_pass.set_bind_group(0, Some(bindgroup.as_ref()), &[]); + let mut count = 0; + for rlet in renderlets.iter() { + let id = rlet.id(); + let rlet = rlet.get(); + let vertex_range = 0..rlet.get_vertex_count(); + let instance_range = id.inner()..id.inner() + 1; + render_pass.draw(vertex_range, instance_range); + count += 1; + } + log::trace!("rendered {count} renderlets to the shadow map"); + } + // Then copy the depth texture to our shadow map atlas in the lighting struct + self.blitting_op.run( + lighting.light_slab.runtime(), + &mut encoder, + &self.update_texture, + &lighting.shadow_map_atlas, + atlas_texture, + ); + } + let submission = queue.submit(Some(encoder.finish())); + device.poll(wgpu::Maintain::wait_for(submission)); + } +} + +/// A bundle of lighting resources representing one analytical light in a scene. +/// +/// Create an `AnalyticalLightBundle` with the `Lighting::new_*_light` functions: +/// - [`Lighting::new_directional_light`] +pub struct AnalyticalLightBundle { + pub light: Ct::Container, + pub light_details: LightDetails, + pub transform: NestedTransform, +} + +impl AnalyticalLightBundle { + fn from_hybrid(light: &AnalyticalLightBundle) -> Self { + AnalyticalLightBundle { + light: WeakHybrid::from_hybrid(&light.light), + light_details: LightDetails::from_hybrid(&light.light_details), + transform: NestedTransform::from_hybrid(&light.transform), + } + } +} + +impl AnalyticalLightBundle { + pub fn light_space_transforms(&self, frustum: Frustum) -> Vec { + let t = self.transform.get(); + let m = Mat4::from(t); + match &self.light_details { + LightDetails::Directional(d) => vec![{ + let (p, j) = d.get().shadow_mapping_projection_and_view(&m, frustum); + p * j + }], + LightDetails::Point(_) => todo!(), + LightDetails::Spot(_) => todo!(), + } + } +} + +/// Manages lighting for an entire scene. +#[derive(Clone)] +pub struct Lighting { + light_slab: SlabAllocator, + light_slab_buffer: Arc>>, + stage_slab_buffer: Arc>>, + lighting_descriptor: Hybrid, + analytical_lights: Arc>>>, + analytical_lights_array: Arc>>>, + bindgroup_layout: Arc, + shadow_map_update_pipeline: Arc, + shadow_map_update_bindgroup_layout: Arc, + shadow_map_update_blitter: AtlasBlitter, + shadow_map_atlas: Atlas, +} + +impl Lighting { + const LABEL: Option<&str> = Some("lighting"); + + /// Create the atlas used to store all shadow maps. + fn create_shadow_map_atlas( + light_slab: &SlabAllocator, size: wgpu::Extent3d, - stage_slab_buffer: &SlabBuffer, - ) -> Self { - let runtime = runtime.as_ref(); - let device = &runtime.device; - let bindgroup_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + ) -> Atlas { + let usage = wgpu::TextureUsages::RENDER_ATTACHMENT + | wgpu::TextureUsages::TEXTURE_BINDING + | wgpu::TextureUsages::COPY_SRC; + Atlas::new( + light_slab, + size, + Some(wgpu::TextureFormat::R32Float), + Some("shadow-map-atlas"), + Some(usage), + ) + } + + pub(crate) fn create_bindgroup_layout(device: &wgpu::Device) -> wgpu::BindGroupLayout { + device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { label: Self::LABEL, entries: &[ + // light slab wgpu::BindGroupLayoutEntry { binding: 0, - visibility: wgpu::ShaderStages::VERTEX, + visibility: wgpu::ShaderStages::FRAGMENT, ty: wgpu::BindingType::Buffer { ty: wgpu::BufferBindingType::Storage { read_only: true }, has_dynamic_offset: false, @@ -77,100 +322,33 @@ impl ShadowMap { }, count: None, }, + // shadow map texture view wgpu::BindGroupLayoutEntry { binding: 1, - visibility: wgpu::ShaderStages::VERTEX, - ty: wgpu::BindingType::Buffer { - ty: wgpu::BufferBindingType::Storage { read_only: true }, - has_dynamic_offset: false, - min_binding_size: None, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Texture { + sample_type: wgpu::TextureSampleType::Float { filterable: false }, + view_dimension: wgpu::TextureViewDimension::D2Array, + multisampled: false, }, count: None, }, + // shadow map texture sampler + wgpu::BindGroupLayoutEntry { + binding: 2, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::NonFiltering), + count: None, + }, ], - }); - let layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { - label: Self::LABEL, - bind_group_layouts: &[&bindgroup_layout], - push_constant_ranges: &[], - }); - let vertex = crate::linkage::shadow_mapping_vertex::linkage(device); - - let slab = SlabAllocator::new_with_label(runtime, wgpu::BufferUsages::empty(), Self::LABEL); - let _light_transform = slab.new_value(light_transform); - let desc_slab_buffer = slab.upkeep(); - let bindgroup = ManagedBindGroup::new(Self::create_bindgroup( - device, - &bindgroup_layout, - stage_slab_buffer, - &desc_slab_buffer, - )); - - ShadowMap { - stage_slab_buffer: stage_slab_buffer.clone(), - texture: device - .create_texture(&wgpu::TextureDescriptor { - label: Self::LABEL, - size, - mip_level_count: 1, - sample_count: 1, - // TODO: what about point lights? Does this need to be D3 then? - dimension: wgpu::TextureDimension::D2, - format: wgpu::TextureFormat::Depth32Float, - usage: wgpu::TextureUsages::RENDER_ATTACHMENT - | wgpu::TextureUsages::TEXTURE_BINDING - | wgpu::TextureUsages::COPY_SRC, - view_formats: &[], - }) - .into(), - desc: slab, - _light_transform, - bindgroup_layout: bindgroup_layout.into(), - bindgroup, - pipeline: device - .create_render_pipeline(&wgpu::RenderPipelineDescriptor { - label: Self::LABEL, - layout: Some(&layout), - vertex: wgpu::VertexState { - module: &vertex.module, - entry_point: Some(vertex.entry_point), - compilation_options: wgpu::PipelineCompilationOptions::default(), - buffers: &[], - }, - primitive: wgpu::PrimitiveState { - topology: wgpu::PrimitiveTopology::TriangleList, - strip_index_format: None, - front_face: wgpu::FrontFace::Ccw, - cull_mode: None, - unclipped_depth: false, - polygon_mode: wgpu::PolygonMode::Fill, - conservative: false, - }, - depth_stencil: Some(wgpu::DepthStencilState { - format: wgpu::TextureFormat::Depth32Float, - depth_write_enabled: true, - depth_compare: wgpu::CompareFunction::Less, - stencil: wgpu::StencilState::default(), - bias: wgpu::DepthBiasState::default(), - }), - multisample: wgpu::MultisampleState::default(), - fragment: None, - multiview: None, - cache: None, - }) - .into(), - } - } - - pub fn size(&self) -> wgpu::Extent3d { - self.texture.size() + }) } - fn create_bindgroup( + pub fn create_bindgroup( device: &wgpu::Device, bindgroup_layout: &wgpu::BindGroupLayout, - slab_buffer: &wgpu::Buffer, - desc_buffer: &wgpu::Buffer, + light_slab_buffer: &wgpu::Buffer, + shadow_map_depth_texture: &crate::texture::Texture, ) -> wgpu::BindGroup { device.create_bind_group(&wgpu::BindGroupDescriptor { label: Self::LABEL, @@ -178,75 +356,270 @@ impl ShadowMap { entries: &[ wgpu::BindGroupEntry { binding: 0, - resource: wgpu::BindingResource::Buffer(slab_buffer.as_entire_buffer_binding()), + resource: light_slab_buffer.as_entire_binding(), }, wgpu::BindGroupEntry { binding: 1, - resource: wgpu::BindingResource::Buffer(desc_buffer.as_entire_buffer_binding()), + resource: wgpu::BindingResource::TextureView(&shadow_map_depth_texture.view), + }, + wgpu::BindGroupEntry { + binding: 2, + resource: wgpu::BindingResource::Sampler(&shadow_map_depth_texture.sampler), }, ], }) } - fn get_bindgroup(&self) -> Arc { - let desc_buffer = self.desc.upkeep(); - let should_invalidate = - desc_buffer.is_new_this_upkeep() || self.stage_slab_buffer.is_invalid(); - self.bindgroup.get(should_invalidate, || { - Self::create_bindgroup( - self.desc.device(), - &self.bindgroup_layout, - &self.stage_slab_buffer, - &desc_buffer, - ) - }) + /// Returns the lighting bindgroup. + pub fn get_bindgroup(&self) -> wgpu::BindGroup { + let mut light_slab_buffer = self.light_slab_buffer.write().unwrap(); + // TODO: invalidate + let _should_invalidate = light_slab_buffer.update_if_invalid(); + + Self::create_bindgroup( + self.light_slab.device(), + &self.bindgroup_layout, + &light_slab_buffer, + &self.shadow_map_atlas.get_texture(), + ) } - pub fn update<'a>(&self, renderlets: impl IntoIterator>) { - let device = &self.desc.device(); - let queue = &self.desc.queue(); - let bindgroup = self.get_bindgroup(); - let view = self - .texture - .create_view(&wgpu::TextureViewDescriptor::default()); - let mut encoder = - device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: Self::LABEL }); - { - let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + /// Create a new [`Lighting`] manager. + pub fn new( + runtime: impl AsRef, + stage_slab_buffer: &SlabBuffer, + ) -> Self { + let runtime = runtime.as_ref(); + let light_slab = + SlabAllocator::new_with_label(runtime, wgpu::BufferUsages::empty(), Some("light-slab")); + let lighting_descriptor = light_slab.new_value(LightingDescriptor::default()); + let light_slab_buffer = light_slab.commit(); + let bindgroup_layout = Self::create_bindgroup_layout(&runtime.device); + + let shadow_map_update_vertex = + crate::linkage::shadow_mapping_vertex::linkage(&runtime.device); + let shadow_map_update_bindgroup_layout: Arc<_> = runtime + .device + .create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + label: ShadowMap::LABEL, + entries: &[ + wgpu::BindGroupLayoutEntry { + binding: 0, + visibility: wgpu::ShaderStages::VERTEX, + ty: wgpu::BindingType::Buffer { + ty: wgpu::BufferBindingType::Storage { read_only: true }, + has_dynamic_offset: false, + min_binding_size: None, + }, + count: None, + }, + wgpu::BindGroupLayoutEntry { + binding: 1, + visibility: wgpu::ShaderStages::VERTEX, + ty: wgpu::BindingType::Buffer { + ty: wgpu::BufferBindingType::Storage { read_only: true }, + has_dynamic_offset: false, + min_binding_size: None, + }, + count: None, + }, + ], + }) + .into(); + let shadow_map_update_layout = + runtime + .device + .create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + label: ShadowMap::LABEL, + bind_group_layouts: &[&shadow_map_update_bindgroup_layout], + push_constant_ranges: &[], + }); + let shadow_map_update_pipeline = runtime + .device + .create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: Self::LABEL, - color_attachments: &[], - depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachment { - view: &view, - depth_ops: Some(wgpu::Operations { - load: wgpu::LoadOp::Clear(1.0), - store: wgpu::StoreOp::Store, - }), - stencil_ops: None, + layout: Some(&shadow_map_update_layout), + vertex: wgpu::VertexState { + module: &shadow_map_update_vertex.module, + entry_point: Some(shadow_map_update_vertex.entry_point), + compilation_options: wgpu::PipelineCompilationOptions::default(), + buffers: &[], + }, + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, + front_face: wgpu::FrontFace::Ccw, + cull_mode: Some(wgpu::Face::Front), + unclipped_depth: false, + polygon_mode: wgpu::PolygonMode::Fill, + conservative: false, + }, + depth_stencil: Some(wgpu::DepthStencilState { + format: wgpu::TextureFormat::Depth32Float, + depth_write_enabled: true, + depth_compare: wgpu::CompareFunction::Less, + stencil: wgpu::StencilState::default(), + bias: wgpu::DepthBiasState::default(), }), - ..Default::default() - }); - render_pass.set_pipeline(&self.pipeline); - render_pass.set_bind_group(0, Some(bindgroup.as_ref()), &[]); - for rlet in renderlets { - let id = rlet.id(); - let rlet = rlet.get(); - let vertex_range = 0..rlet.get_vertex_count(); - let instance_range = id.inner()..id.inner() + 1; - render_pass.draw(vertex_range, instance_range); - } + multisample: wgpu::MultisampleState::default(), + fragment: None, + multiview: None, + cache: None, + }) + .into(); + Self { + shadow_map_atlas: Self::create_shadow_map_atlas( + &light_slab, + // TODO: make the shadow map atlas size configurable + wgpu::Extent3d { + width: 1024, + height: 1024, + depth_or_array_layers: 4, + }, + ), + analytical_lights: Default::default(), + analytical_lights_array: Arc::new(Mutex::new(light_slab.new_array([]))), + light_slab, + light_slab_buffer: Arc::new(RwLock::new(light_slab_buffer)), + lighting_descriptor, + stage_slab_buffer: Arc::new(RwLock::new(stage_slab_buffer.clone())), + bindgroup_layout: bindgroup_layout.into(), + shadow_map_update_pipeline, + shadow_map_update_bindgroup_layout, + shadow_map_update_blitter: AtlasBlitter::new( + &runtime.device, + wgpu::TextureFormat::R32Float, + wgpu::FilterMode::Nearest, + ), } - queue.submit(Some(encoder.finish())); + } + + pub fn slab(&self) -> &SlabAllocator { + &self.light_slab + } + + fn add_light_bundle(&self, bundle: &AnalyticalLightBundle) { + { + // Update the array of light ids + // UNWRAP: POP + let mut analytical_lights_array_guard = self.analytical_lights_array.lock().unwrap(); + let mut analytical_light_ids_vec = analytical_lights_array_guard.get_vec(); + analytical_light_ids_vec.push(bundle.light.id()); + *analytical_lights_array_guard = self.light_slab.new_array(analytical_light_ids_vec); + } + { + // Update our list of weakly ref'd light bundles + self.analytical_lights + .lock() + .unwrap() + .push(AnalyticalLightBundle::::from_hybrid(bundle)); + } + } + + /// Create a new [`AnalyticalLightBundle`] for the given [`DirectionalLightDescriptor`]. + pub fn new_directional_light( + &self, + directional_light: DirectionalLightDescriptor, + nested_transform: Option, + ) -> AnalyticalLightBundle { + let transform = nested_transform.unwrap_or_else(|| NestedTransform::new(&self.light_slab)); + let light_inner = self.light_slab.new_value(directional_light); + let light = self.light_slab.new_value({ + let mut light: super::Light = light_inner.id().into(); + light.transform_id = transform.global_transform_id(); + light + }); + let light_details = LightDetails::Directional(light_inner); + let bundle = AnalyticalLightBundle { + light, + light_details, + transform, + }; + + self.add_light_bundle(&bundle); + + bundle + } + + /// Enable shadow mapping for the given [`AnalyticalLightBundle`], creating + /// a new [`ShadowMap`]. + pub fn new_shadow_map( + &self, + analytical_light_bundle: &AnalyticalLightBundle, + size: UVec2, + camera: &Camera, + ) -> Result { + let stage_slab_buffer = self.stage_slab_buffer.read().unwrap(); + let is_point_light = + analytical_light_bundle.light_details.style() == super::LightStyle::Point; + let count = if is_point_light { 6 } else { 1 }; + let atlas = &self.shadow_map_atlas; + let image = AtlasImage::new(size, crate::atlas::AtlasImageFormat::R32FLOAT); + // UNWRAP: safe because we know there's one in here + let atlas_textures = atlas.add_images(vec![ℑ count])?; + // Regardless of light type, we only create one depth texture. + let update_texture = + crate::texture::Texture::create_depth_texture(atlas.device(), size.x, size.y, 1); + let atlas_textures_array = self + .light_slab + .new_array(atlas_textures.iter().map(|t| t.id())); + let blitting_op = self.shadow_map_update_blitter.new_blitting_operation(atlas); + let light_space_transforms = self + .light_slab + .new_array(analytical_light_bundle.light_space_transforms(camera.frustum())); + let shadowmap_descriptor = self.light_slab.new_value(ShadowMapDescriptor { + light_space_transforms_array: light_space_transforms.array(), + atlas_textures_array: atlas_textures_array.array(), + bias_min: 0.005, + bias_max: 0.05, + }); + // Set the descriptor in the light, so the shader knows to use it + analytical_light_bundle.light.modify(|light| { + light.shadow_map_desc_id = shadowmap_descriptor.id(); + }); + let light_slab_buffer = self.light_slab.commit(); + let update_bindgroup = ManagedBindGroup::from(ShadowMap::create_update_bindgroup( + self.light_slab.device(), + &self.shadow_map_update_bindgroup_layout, + stage_slab_buffer.deref(), + &light_slab_buffer, + )); + + Ok(ShadowMap { + stage_slab_buffer_creation_time: Arc::new(stage_slab_buffer.creation_time().into()), + light_slab_buffer_creation_time: Arc::new(light_slab_buffer.creation_time().into()), + shadowmap_descriptor, + light_space_transforms, + update_bindgroup, + atlas_textures, + atlas_textures_array, + update_texture, + blitting_op, + }) + } + + pub fn upkeep(&self) { + self.lighting_descriptor.set(LightingDescriptor { + analytical_lights_array: self.analytical_lights_array.lock().unwrap().array(), + shadow_map_atlas_descriptor_id: self.shadow_map_atlas.descriptor_id(), + update_shadow_map_id: Id::NONE, + update_shadow_map_texture_index: 0, + }); + self.light_slab.commit(); } } #[cfg(test)] mod test { - use glam::{Mat4, Vec3, Vec4, Vec4Swizzles}; + use crabslab::Slab; + use glam::{Mat4, Vec2, Vec3, Vec4}; + use image::Luma; use crate::{ camera::Camera, - light::{LightStyle, ShadowMappingVertexInfo}, - prelude::Transform, + light::{ShadowCalculation, ShadowMappingVertexInfo}, + math::{ConstTexture, CpuTexture2dArray, IsVector}, + pbr::PbrConfig, stage::RenderletPbrVertexInfo, texture::DepthTexture, }; @@ -258,8 +631,15 @@ mod test { let w = 800.0; let h = 800.0; let ctx = crate::Context::headless(w as u32, h as u32); - let mut stage = ctx.new_stage().with_lighting(false); + let mut stage = ctx.new_stage().with_lighting(true); + + // let hdr_path = + // std::path::PathBuf::from(std::env!("CARGO_WORKSPACE_DIR")).join("img/hdr/night.hdr"); + // let hdr_img = AtlasImage::from_hdr_path(hdr_path).unwrap(); + let camera = stage.new_value(Camera::default()); + // let skybox = Skybox::new(&ctx, hdr_img, camera.id()); + // stage.set_skybox(skybox); log::info!("camera_id: {:?}", camera.id()); let doc = stage .load_gltf_document_from_path( @@ -273,14 +653,6 @@ mod test { let mut c = gltf_camera.get_camera(); c.set_projection(crate::camera::perspective(w, h)); camera.set(c); - let gltf_light = doc.lights.first().unwrap(); - log::info!("light_id: {:?}", gltf_light.light.id()); - log::info!("light.index: {:?}", gltf_light.light.get().index); - log::info!( - "light.transform_id: {:?}", - gltf_light.light.get().transform_id - ); - stage.set_lights([gltf_light.light.id()]); let frame = ctx.get_next_frame().unwrap(); stage.render(&frame.view()); @@ -288,11 +660,12 @@ mod test { frame.present(); // Rendering the scene without shadows as a sanity check - img_diff::assert_img_eq("shadows/shadow_mapping_sanity_scene_before.png", img); + img_diff::save("shadows/shadow_mapping_sanity/scene_before.png", img); + let gltf_light = doc.lights.first().unwrap(); assert_eq!( gltf_light.light.get().transform_id, - gltf_light.node_transform.global_transform_id(), + gltf_light.transform.global_transform_id(), "light's global transform id is different from its transform_id" ); @@ -302,14 +675,15 @@ mod test { // 4. Extract the depth texture as a a sanity check // 5. Extract ComparisonInfo for each vertex let (light_projection, light_view) = { - let parent_light_transform = - Mat4::from(gltf_light.node_transform.get_global_transform()); + let parent_light_transform = Mat4::from(gltf_light.transform.get_global_transform()); let camera = camera.get(); - match &gltf_light.details { + match &gltf_light.light_details { LightDetails::Directional(d) => { let directional_light = d.get(); - let (projection, view) = directional_light - .shadow_mapping_projection_and_view(&parent_light_transform, &camera); + let (projection, view) = directional_light.shadow_mapping_projection_and_view( + &parent_light_transform, + camera.frustum(), + ); (projection, view) } _ => panic!("wasn't supposed to be anything but directional"), @@ -343,14 +717,13 @@ mod test { stage.render(&frame.view()); let img = frame.read_image().unwrap(); frame.present(); - - img_diff::assert_img_eq("shadows/shadow_mapping_sanity_light_pov.png", img); + img_diff::save("shadows/shadow_mapping_sanity/scene_light_pov.png", img); let mut depth_img = stage.get_depth_texture().read_image().unwrap(); // Normalize the value img_diff::normalize_gray_img(&mut depth_img); - img_diff::assert_img_eq( - "shadows/shadow_mapping_sanity_light_pov_depth.png", + img_diff::save( + "shadows/shadow_mapping_sanity/light_pov_depth.png", depth_img, ); @@ -389,19 +762,47 @@ mod test { frame.present(); } - let shadows = ShadowMap::new( + let shadows = stage + .lighting() + .new_shadow_map(gltf_light, UVec2::new(w as u32, h as u32), &camera.get()) + .unwrap(); + + crate::test::capture_gpu_frame( &ctx, - light_transform, - wgpu::Extent3d { - width: w as u32, - height: h as u32, - depth_or_array_layers: 1, - }, - &stage.get_buffer().unwrap(), + "shadows/shadow_mapping_sanity/shadow_map_update.gputrace", + || shadows.update(stage.lighting(), doc.renderlets_iter()), ); - shadows.update(doc.renderlets_iter()); - let slab = futures_lite::future::block_on(stage.read(..)).unwrap(); + let geometry_slab = futures_lite::future::block_on(stage.read(..)).unwrap(); + let light_slab = futures_lite::future::block_on(stage.lighting().slab().read(..)).unwrap(); + { + // Inspect the blitting vertex + #[derive(Default, Debug)] + struct AtlasVertexOutput { + out_uv: Vec2, + out_clip_pos: Vec4, + } + let mut output = vec![]; + for i in 0..6 { + let mut out = AtlasVertexOutput::default(); + crate::atlas::atlas_blit_vertex( + i, + shadows.blitting_op.desc.id(), + &light_slab, + &mut out.out_uv, + &mut out.out_clip_pos, + ); + output.push(out); + } + log::info!( + "clip_pos: {:#?}", + output + .into_iter() + .map(|out| out.out_clip_pos) + .collect::>() + ); + } + let mut shadow_vertex_info = vec![]; for hybrid in doc.renderlets_iter() { let renderlet = hybrid.get(); @@ -410,8 +811,8 @@ mod test { crate::light::shadow_mapping_vertex( hybrid.id(), vertex_index, - &slab, - &light_transform, + &geometry_slab, + &light_slab, &mut Default::default(), &mut info, ); @@ -419,53 +820,182 @@ mod test { } } - let depth_texture = DepthTexture::new(&ctx, shadows.texture.clone()); - let mut depth_img = depth_texture.read_image().unwrap(); + { + // Ensure the state of the "update texture", which receives the depth of the scene on update + let shadow_map_update_texture = + DepthTexture::try_new_from(&ctx, shadows.update_texture.clone()).unwrap(); + let mut shadow_map_update_img = shadow_map_update_texture.read_image().unwrap(); + img_diff::normalize_gray_img(&mut shadow_map_update_img); + img_diff::save( + "shadows/shadow_mapping_sanity/shadows_update_texture.png", + shadow_map_update_img, + ); + } + + let shadow_depth_buffer = stage.lighting().shadow_map_atlas.atlas_img_buffer(&ctx, 0); + let shadow_depth_img = shadow_depth_buffer + .into_image::>(ctx.get_device()) + .unwrap(); + let shadow_depth_img = shadow_depth_img.into_luma8(); + let mut depth_img = shadow_depth_img.clone(); img_diff::normalize_gray_img(&mut depth_img); - img_diff::assert_img_eq("shadows/shadow_mapping_sanity_depth.png", depth_img); + img_diff::save("shadows/shadow_mapping_sanity/depth.png", depth_img); assert_eq!(renderlet_vertex_info.len(), shadow_vertex_info.len()); - for (i, (pbr_info, shadow_info)) in renderlet_vertex_info + // Get the green sphere to use for testing what should be in shadow + let sphere_001 = doc + .nodes + .iter() + .find(|n| n.name.as_deref() == Some("Sphere.001")) + .unwrap(); + let mut found_vertex_output_for_sphere_001 = None; + + for (pbr_info, shadow_info) in renderlet_vertex_info .into_iter() .zip(shadow_vertex_info.into_iter()) - .enumerate() { - log::info!("{i}"); - let RenderletPbrVertexInfo { - renderlet_id, - vertex_index, - vertex, - transform, - model_matrix, - out_pos, - view_projection, - out_clip_pos, - .. - } = pbr_info; - let pbr_info = ShadowMappingVertexInfo { - renderlet_id, - vertex_index, - vertex, - transform, - model_matrix, - world_pos: out_pos, - view_projection, - clip_pos: out_clip_pos, - }; - pretty_assertions::assert_eq!(pbr_info, shadow_info, "vertex {i} is not equal"); + if found_vertex_output_for_sphere_001.is_none() { + let distance_to_sphere_origin = shadow_info + .world_pos + .distance(sphere_001.global_transform().translation); + if distance_to_sphere_origin < 0.1 { + // Save the point for further renders + log::info!("found it: distance={distance_to_sphere_origin} {shadow_info:#?}"); + found_vertex_output_for_sphere_001 = Some(pbr_info); + } + } + } + + let found_vertex_output_for_sphere_001 = found_vertex_output_for_sphere_001.unwrap(); + + fn luma_8_to_vec4(Luma([a]): &Luma) -> Vec4 { + Vec4::splat(*a as f32 / 255.0) + } + + let top_of_green_sphere_pos = { + let sphere_001 = doc + .nodes + .iter() + .find(|n| n.name.as_deref() == Some("Sphere.001")) + .unwrap(); + // Fragment position in world space + sphere_001.global_transform().translation + }; + + { + // Ensure the light slab has the correct light transform + let light_slab = + futures_lite::future::block_on(stage.lighting().slab().read(..)).unwrap(); + let light_space_transform = light_slab.read(shadows.light_space_transforms.get_id(0)); + + let dx = light_transform + .x_axis + .distance(light_space_transform.x_axis); + let dy = light_transform + .y_axis + .distance(light_space_transform.y_axis); + let dz = light_transform + .z_axis + .distance(light_space_transform.z_axis); + let dw = light_transform + .w_axis + .distance(light_space_transform.w_axis); + if [dx, dy, dz, dw].iter().any(|d| { + let log = d.log10(); + log::info!("log: {log}"); + log > -7.0 + }) { + pretty_assertions::assert_eq!( + light_transform, + light_space_transform, + "light space transforms are not equal" + ); + } + + let frag_pos_in_light_space = + light_space_transform.project_point3(top_of_green_sphere_pos); + log::info!("frag_pos_in_light_space: {frag_pos_in_light_space}"); + } + + { + // Run the fragment shader on that one point + let shadow_map = CpuTexture2dArray::from_images(Some(shadow_depth_img), luma_8_to_vec4); + let geometry_slab = futures_lite::future::block_on(stage.read(..)).unwrap(); + let light_slab = + futures_lite::future::block_on(stage.lighting().slab().read(..)).unwrap(); + let vertex_info = found_vertex_output_for_sphere_001; + { + // Check that this point actually _is in shadow_ + let light = gltf_light.light.get(); + let transform = light_slab.read(light.transform_id); + let transform = Mat4::from(transform); + let DirectionalLightDescriptor { direction, .. } = + light_slab.read(light.into_directional_id()); + let is_in_shadow = ShadowCalculation::new( + &light_slab, + light, + vertex_info.out_pos, + vertex_info.out_norm.alt_norm_or_zero(), + { + let direction = transform.transform_vector3(direction); + -direction.alt_norm_or_zero() + }, + ) + .run(&shadow_map, &()); + assert_eq!(1.0, is_in_shadow, "point should be in shadow"); + } + let mut output = Vec4::ZERO; + crate::pbr::fragment_impl( + &ConstTexture::new(Vec4::ONE), + &(), + &ConstTexture::new(Vec4::ONE), + &(), + &ConstTexture::new(Vec4::ONE), + &(), + &ConstTexture::new(Vec4::ONE), + &(), + &shadow_map, + &(), + &geometry_slab, + &light_slab, + vertex_info.renderlet_id, + vertex_info.out_color, + vertex_info.out_uv0, + vertex_info.out_uv1, + vertex_info.out_norm, + vertex_info.out_tangent, + vertex_info.out_bitangent, + vertex_info.out_pos, + &mut output, + ); + log::info!("color: {output}"); } + + let _ = stage.lighting().slab().commit(); + + // Now do the rendering *with the shadow map* to see if it works. + let frame = ctx.get_next_frame().unwrap(); + crate::test::capture_gpu_frame( + &ctx, + "shadows/shadow_mapping_sanity/render.gputrace", + || stage.render(&frame.view()), + ); + + let img = frame.read_image().unwrap(); + frame.present(); + img_diff::save("shadows/shadow_mapping_sanity/stage_render.png", img); } #[test] fn light_transform_depth_sanity() { let camera = Camera::default_perspective(800.0, 800.0); - let directional_light = DirectionalLight { + let directional_light = DirectionalLightDescriptor { direction: Vec3::new(1.0, 1.0, 0.0), ..Default::default() }; let (light_projection, light_view) = - directional_light.shadow_mapping_projection_and_view(&Mat4::IDENTITY, &camera); + directional_light.shadow_mapping_projection_and_view(&Mat4::IDENTITY, camera.frustum()); let light_camera = Camera::new(light_projection, light_view); log::info!("z_near: {}", light_camera.z_near()); log::info!("z_far: {}", light_camera.z_far()); @@ -474,291 +1004,4 @@ mod test { log::info!("far_plane: {}", light_camera.far_plane()); log::info!("position: {}", light_camera.position()); } - - fn assert_sanity_strings( - seen_directional_light: DirectionalLight, - seen_parent_light_transform: Mat4, - seen_camera: Camera, - seen_projection: Mat4, - seen_view: Mat4, - seen_view_projection: Mat4, - ) { - let directional_light = r#"DirectionalLight { - direction: Vec3( - 0.0, - 0.0, - -1.0, - ), - color: Vec4( - 1.0, - 1.0, - 1.0, - 1.0, - ), - intensity: 10.0, -}"#; - pretty_assertions::assert_str_eq!( - directional_light, - format!("{seen_directional_light:#?}") - ); - let parent_light_transform = r#"Mat4 { - x_axis: Vec4( - -0.5525446, - 0.7096175, - 0.4371941, - 0.0, - ), - y_axis: Vec4( - -0.12115364, - -0.587348, - 0.80021566, - 0.0, - ), - z_axis: Vec4( - 0.82463145, - 0.3891868, - 0.41050822, - 0.0, - ), - w_axis: Vec4( - 4.0762453, - 1.005454, - 5.903862, - 1.0, - ), -}"#; - pretty_assertions::assert_str_eq!( - parent_light_transform, - format!("{seen_parent_light_transform:#?}") - ); - let camera = r#"Camera { - projection: Mat4 { - x_axis: Vec4( - 2.4142134, - 0.0, - 0.0, - 0.0, - ), - y_axis: Vec4( - 0.0, - 2.4142134, - 0.0, - 0.0, - ), - z_axis: Vec4( - 0.0, - 0.0, - -1.001001, - -1.0, - ), - w_axis: Vec4( - 0.0, - 0.0, - -0.1001001, - 0.0, - ), - }, - view: Mat4 { - x_axis: Vec4( - 0.56048316, - -0.04112576, - 0.8271439, - -0.0, - ), - y_axis: Vec4( - 0.82782656, - 0.05640688, - -0.55814093, - 0.0, - ), - z_axis: Vec4( - -0.023702562, - 0.9975604, - 0.06566016, - -0.0, - ), - w_axis: Vec4( - 2.3725195, - -3.6266158, - -19.559895, - 1.0, - ), - }, - position: Vec3( - 14.69995, - -12.676652, - 4.9583097, - ), - frustum: Frustum { - planes: [ - Vec4( - -0.8271441, - 0.55814105, - -0.06566017, - 19.509872, - ), - Vec4( - 0.20128462, - 0.97840333, - -0.047025368, - 9.67717, - ), - Vec4( - -0.8343532, - -0.5512207, - -0.0032287433, - 5.2933264, - ), - Vec4( - -0.3545296, - 0.2657045, - 0.89649874, - 4.1346927, - ), - Vec4( - -0.27853903, - 0.16147813, - -0.9467527, - 10.835804, - ), - Vec4( - 0.8271441, - -0.55814105, - 0.06566017, - 80.44148, - ), - ], - points: [ - Vec3( - 14.646105, - -12.664715, - 4.976187, - ), - Vec3( - 14.6693325, - -12.630406, - 4.975204, - ), - Vec3( - 14.647809, - -12.667053, - 4.9348445, - ), - Vec3( - 14.671038, - -12.632747, - 4.9338613, - ), - Vec3( - -92.93541, - 11.184539, - 40.694893, - ), - Vec3( - -46.502815, - 79.76488, - 38.731274, - ), - Vec3( - -89.52838, - 6.511578, - -41.94686, - ), - Vec3( - -43.095795, - 75.09193, - -43.91048, - ), - ], - center: Vec3( - 14.658571, - -12.64873, - 4.9550242, - ), - }, -}"#; - pretty_assertions::assert_str_eq!(camera, format!("{seen_camera:#?}")); - let projection = r#"Mat4 { - x_axis: Vec4( - 0.032823686, - 0.0, - 0.0, - 0.0, - ), - y_axis: Vec4( - 0.0, - 0.032823686, - 0.0, - 0.0, - ), - z_axis: Vec4( - 0.0, - 0.0, - -0.016411843, - 0.0, - ), - w_axis: Vec4( - -0.0, - -0.0, - -0.0, - 1.0, - ), -}"#; - - pretty_assertions::assert_str_eq!(projection, format!("{seen_projection:#?}")); - let view = r#"Mat4 { - x_axis: Vec4( - -0.42680675, - -0.37124008, - 0.8246313, - 0.0, - ), - y_axis: Vec4( - 0.90434283, - -0.17520764, - 0.3891867, - 0.0, - ), - z_axis: Vec4( - 0.0, - 0.9118569, - 0.41050813, - 0.0, - ), - w_axis: Vec4( - -9.536743e-7, - 9.536743e-7, - -30.465805, - 1.0, - ), -}"#; - pretty_assertions::assert_str_eq!(view, format!("{seen_view:#?}")); - let view_projection = r#"Mat4 { - x_axis: Vec4( - -0.0140093705, - -0.012185467, - -0.013533719, - 0.0, - ), - y_axis: Vec4( - 0.029683866, - -0.0057509607, - -0.006387271, - 0.0, - ), - z_axis: Vec4( - 0.0, - 0.029930504, - -0.006737195, - 0.0, - ), - w_axis: Vec4( - -3.1303106e-8, - 3.1303106e-8, - 0.5, - 1.0, - ), -}"#; - pretty_assertions::assert_str_eq!(view_projection, format!("{seen_view_projection:#?}")); - } } diff --git a/crates/renderling/src/linkage.rs b/crates/renderling/src/linkage.rs index 93d22f8b..124a3497 100644 --- a/crates/renderling/src/linkage.rs +++ b/crates/renderling/src/linkage.rs @@ -2,10 +2,12 @@ //! //! # Warning! //! Please don't put anything in `crates/renderling/src/linkage/*`. -//! The files there are all auto-generated by the shader compilation machinery in `shaders/`. +//! The files there are all auto-generated by the shader compilation machinery. //! It is common to delete everything in that directory and regenerate. use std::sync::Arc; +pub mod atlas_blit_fragment; +pub mod atlas_blit_vertex; pub mod bloom_downsample_fragment; pub mod bloom_mix_fragment; pub mod bloom_upsample_fragment; @@ -50,6 +52,8 @@ pub struct ShaderLinkage { pub entry_point: &'static str, } +// TODO: move the bindgroup stuff out of linkage.rs + pub fn slab_bindgroup_layout(device: &wgpu::Device) -> wgpu::BindGroupLayout { let visibility = wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT | wgpu::ShaderStages::COMPUTE; diff --git a/crates/renderling/src/linkage/atlas_blit_fragment.rs b/crates/renderling/src/linkage/atlas_blit_fragment.rs new file mode 100644 index 00000000..f4ce010d --- /dev/null +++ b/crates/renderling/src/linkage/atlas_blit_fragment.rs @@ -0,0 +1,34 @@ +#![allow(dead_code)] +//! Automatically generated by Renderling's `build.rs`. +use crate::linkage::ShaderLinkage; +#[cfg(not(target_arch = "wasm32"))] +mod target { + pub const ENTRY_POINT: &str = "atlas::atlas_blit_fragment"; + pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> { + wgpu::include_spirv!("../../shaders/atlas-atlas_blit_fragment.spv") + } + pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage { + log::debug!("creating native linkage for {}", "atlas_blit_fragment"); + super::ShaderLinkage { + entry_point: ENTRY_POINT, + module: device.create_shader_module(descriptor()).into(), + } + } +} +#[cfg(target_arch = "wasm32")] +mod target { + pub const ENTRY_POINT: &str = "atlasatlas_blit_fragment"; + pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> { + wgpu::include_wgsl!("../../shaders/atlas-atlas_blit_fragment.wgsl") + } + pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage { + log::debug!("creating web linkage for {}", "atlas_blit_fragment"); + super::ShaderLinkage { + entry_point: ENTRY_POINT, + module: device.create_shader_module(descriptor()).into(), + } + } +} +pub fn linkage(device: &wgpu::Device) -> ShaderLinkage { + target::linkage(device) +} diff --git a/crates/renderling/src/linkage/atlas_blit_vertex.rs b/crates/renderling/src/linkage/atlas_blit_vertex.rs new file mode 100644 index 00000000..e3cfab71 --- /dev/null +++ b/crates/renderling/src/linkage/atlas_blit_vertex.rs @@ -0,0 +1,34 @@ +#![allow(dead_code)] +//! Automatically generated by Renderling's `build.rs`. +use crate::linkage::ShaderLinkage; +#[cfg(not(target_arch = "wasm32"))] +mod target { + pub const ENTRY_POINT: &str = "atlas::atlas_blit_vertex"; + pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> { + wgpu::include_spirv!("../../shaders/atlas-atlas_blit_vertex.spv") + } + pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage { + log::debug!("creating native linkage for {}", "atlas_blit_vertex"); + super::ShaderLinkage { + entry_point: ENTRY_POINT, + module: device.create_shader_module(descriptor()).into(), + } + } +} +#[cfg(target_arch = "wasm32")] +mod target { + pub const ENTRY_POINT: &str = "atlasatlas_blit_vertex"; + pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> { + wgpu::include_wgsl!("../../shaders/atlas-atlas_blit_vertex.wgsl") + } + pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage { + log::debug!("creating web linkage for {}", "atlas_blit_vertex"); + super::ShaderLinkage { + entry_point: ENTRY_POINT, + module: device.create_shader_module(descriptor()).into(), + } + } +} +pub fn linkage(device: &wgpu::Device) -> ShaderLinkage { + target::linkage(device) +} diff --git a/crates/renderling/src/math.rs b/crates/renderling/src/math.rs index 360a5da7..2a341ed6 100644 --- a/crates/renderling/src/math.rs +++ b/crates/renderling/src/math.rs @@ -9,13 +9,16 @@ use core::ops::Mul; use spirv_std::{ image::{Cubemap, Image2d, Image2dArray}, - Sampler, + Image, Sampler, }; pub use glam::*; pub use spirv_std::num_traits::{clamp, Float, Zero}; + pub trait IsSampler: Copy + Clone {} +impl IsSampler for () {} + impl IsSampler for Sampler {} pub trait Sample2d { @@ -32,6 +35,14 @@ impl Sample2d for Image2d { } } +impl Sample2d for Image!(2D, type=f32, sampled, depth) { + type Sampler = Sampler; + + fn sample_by_lod(&self, sampler: Self::Sampler, uv: glam::Vec2, lod: f32) -> glam::Vec4 { + self.sample_by_lod(sampler, uv, lod) + } +} + pub trait Sample2dArray { type Sampler: IsSampler; @@ -46,6 +57,14 @@ impl Sample2dArray for Image2dArray { } } +impl Sample2dArray for Image!(2D, type=f32, sampled, arrayed, depth) { + type Sampler = Sampler; + + fn sample_by_lod(&self, sampler: Self::Sampler, uv: glam::Vec3, lod: f32) -> glam::Vec4 { + self.sample_by_lod(sampler, uv, lod) + } +} + pub trait SampleCube { type Sampler: IsSampler; @@ -66,41 +85,109 @@ mod cpu { use super::*; - /// A CPU-side texture sampler. - /// - /// Provided primarily for testing purposes. - #[derive(Debug, Clone, Copy, Default)] - pub struct CpuSampler; + /// A CPU texture with no dimensions that always returns the same + /// value when sampled. + pub struct ConstTexture(Vec4); - impl IsSampler for CpuSampler {} + impl Sample2d for ConstTexture { + type Sampler = (); - #[derive(Debug, Default)] - pub struct CpuTexture2d { - pub image: image::DynamicImage, + fn sample_by_lod(&self, _sampler: Self::Sampler, _uv: glam::Vec2, _lod: f32) -> Vec4 { + self.0 + } } - impl Sample2d for CpuTexture2d { - type Sampler = CpuSampler; + impl Sample2dArray for ConstTexture { + type Sampler = (); - fn sample_by_lod(&self, _sampler: Self::Sampler, uv: glam::Vec2, _lod: f32) -> glam::Vec4 { + fn sample_by_lod(&self, _sampler: Self::Sampler, _uv: glam::Vec3, _lod: f32) -> glam::Vec4 { + self.0 + } + } + + impl SampleCube for ConstTexture { + type Sampler = (); + + fn sample_by_lod(&self, _sampler: Self::Sampler, _uv: Vec3, _lod: f32) -> glam::Vec4 { + self.0 + } + } + + impl ConstTexture { + pub fn new(value: Vec4) -> Self { + Self(value) + } + } + + #[derive(Debug)] + pub struct CpuTexture2d { + pub image: image::ImageBuffer, + convert_fn: fn(&P) -> Vec4, + } + + impl CpuTexture2d { + pub fn from_image( + image: image::ImageBuffer, + convert_fn: fn(&P) -> Vec4, + ) -> Self { + Self { image, convert_fn } + } + } + + impl Sample2d for CpuTexture2d + where + P: image::Pixel, + Container: std::ops::Deref, + { + type Sampler = (); + + fn sample_by_lod(&self, _sampler: Self::Sampler, uv: glam::Vec2, _lod: f32) -> Vec4 { // TODO: lerp the CPU texture sampling - let x = uv.x as u32; - if x >= self.image.width() { - return glam::Vec4::ZERO; - } + // TODO: use configurable wrap mode on CPU sampling + let px = uv.x.clamp(0.0, 1.0) * self.image.width() as f32; + let py = uv.y.clamp(0.0, 1.0) * self.image.height() as f32; + let p = self.image.get_pixel( + px.round().min(self.image.width() as f32) as u32, + py.round().min(self.image.height() as f32) as u32, + ); + (self.convert_fn)(p) + } + } - let y = uv.y as u32; - if y >= self.image.height() { - return glam::Vec4::ZERO; - } + pub struct CpuTexture2dArray { + pub images: Vec>, + convert_fn: fn(&P) -> Vec4, + } - let image::Rgba([r, g, b, a]) = self.image.get_pixel(uv.x as u32, uv.y as u32); - glam::Vec4::new( - r as f32 / 255.0, - g as f32 / 255.0, - b as f32 / 255.0, - a as f32 / 255.0, - ) + impl CpuTexture2dArray { + pub fn from_images( + images: impl IntoIterator>, + convert_fn: fn(&P) -> Vec4, + ) -> Self { + let images = images.into_iter().collect(); + Self { images, convert_fn } + } + } + + impl Sample2dArray for CpuTexture2dArray + where + P: image::Pixel, + Container: std::ops::Deref, + { + type Sampler = (); + + /// Panics if `uv.z` is greater than length of images. + fn sample_by_lod(&self, _sampler: Self::Sampler, uv: glam::Vec3, _lod: f32) -> Vec4 { + // TODO: lerp the CPU texture sampling + // TODO: use configurable wrap mode on CPU sampling + let img = &self.images[uv.z as usize]; + let px = uv.x.clamp(0.0, 1.0) * img.width() as f32; + let py = uv.y.clamp(0.0, 1.0) * img.height() as f32; + let p = img.get_pixel( + px.round().min(img.width() as f32) as u32, + py.round().min(img.height() as f32) as u32, + ); + (self.convert_fn)(p) } } @@ -113,7 +200,7 @@ mod cpu { } impl SampleCube for CpuCubemap { - type Sampler = CpuSampler; + type Sampler = (); fn sample_by_lod( &self, @@ -428,12 +515,20 @@ pub const CLIP_QUAD_CCW: [Vec3; 6] = { [bl, br, tr, tr, tl, bl] }; +pub const CLIP_SPACE_COORD_QUAD_CCW_TL: Vec4 = Vec4::new(-1.0, 1.0, 0.5, 1.0); +pub const CLIP_SPACE_COORD_QUAD_CCW_BL: Vec4 = Vec4::new(-1.0, -1.0, 0.5, 1.0); +pub const CLIP_SPACE_COORD_QUAD_CCW_TR: Vec4 = Vec4::new(1.0, 1.0, 0.5, 1.0); +pub const CLIP_SPACE_COORD_QUAD_CCW_BR: Vec4 = Vec4::new(1.0, -1.0, 0.5, 1.0); + pub const CLIP_SPACE_COORD_QUAD_CCW: [Vec4; 6] = { - let tl = Vec4::new(-1.0, 1.0, 0.5, 1.0); - let tr = Vec4::new(1.0, 1.0, 0.5, 1.0); - let bl = Vec4::new(-1.0, -1.0, 0.5, 1.0); - let br = Vec4::new(1.0, -1.0, 0.5, 1.0); - [bl, br, tr, tr, tl, bl] + [ + CLIP_SPACE_COORD_QUAD_CCW_BL, + CLIP_SPACE_COORD_QUAD_CCW_BR, + CLIP_SPACE_COORD_QUAD_CCW_TR, + CLIP_SPACE_COORD_QUAD_CCW_TR, + CLIP_SPACE_COORD_QUAD_CCW_TL, + CLIP_SPACE_COORD_QUAD_CCW_BL, + ] }; pub const UV_COORD_QUAD_CCW: [Vec2; 6] = { diff --git a/crates/renderling/src/pbr.rs b/crates/renderling/src/pbr.rs index 56f24136..1f265cf7 100644 --- a/crates/renderling/src/pbr.rs +++ b/crates/renderling/src/pbr.rs @@ -4,15 +4,18 @@ //! * //! * //! * -use crabslab::{Array, Id, Slab, SlabItem}; +use crabslab::{Id, Slab, SlabItem}; use glam::{Mat4, Vec2, Vec3, Vec4, Vec4Swizzles}; -#[cfg(target_arch = "spirv")] -use spirv_std::num_traits::Float; +#[allow(unused)] +use spirv_std::num_traits::{Float, Zero}; use crate::{ atlas::AtlasTexture, - light::{DirectionalLight, Light, LightStyle, PointLight, SpotLight}, + light::{ + DirectionalLightDescriptor, LightStyle, LightingDescriptor, PointLightDescriptor, + ShadowCalculation, SpotLightDescriptor, + }, math::{self, IsSampler, IsVector, Sample2d, Sample2dArray, SampleCube}, println as my_println, stage::Renderlet, @@ -237,7 +240,6 @@ pub struct PbrConfig { pub has_skinning: bool, pub perform_frustum_culling: bool, pub perform_occlusion_culling: bool, - pub light_array: Array>, } impl Default for PbrConfig { @@ -250,7 +252,6 @@ impl Default for PbrConfig { has_skinning: true, perform_frustum_culling: true, perform_occlusion_culling: false, - light_array: Default::default(), } } } @@ -292,7 +293,7 @@ pub fn texture_color, S: IsSampler>( /// PBR fragment shader capable of being run on CPU or GPU. #[allow(clippy::too_many_arguments)] -pub fn fragment_impl( +pub fn fragment_impl( atlas: &A, atlas_sampler: &S, irradiance: &C, @@ -301,7 +302,11 @@ pub fn fragment_impl( prefiltered_sampler: &S, brdf: &T, brdf_sampler: &S, + shadow_map: &DtA, + shadow_map_sampler: &S, + slab: &[u32], + lighting_slab: &[u32], renderlet_id: Id, @@ -317,10 +322,15 @@ pub fn fragment_impl( ) where A: Sample2dArray, T: Sample2d, + DtA: Sample2dArray, C: SampleCube, S: IsSampler, { let renderlet = slab.read_unchecked(renderlet_id); + // TODO: rename `PbrConfig` to `PbrShaderDescriptor` + let pbr_desc = slab.read_unchecked(renderlet.pbr_config_id); + crate::println!("pbr_desc_id: {:?}", renderlet.pbr_config_id); + crate::println!("pbr_desc: {pbr_desc:#?}"); let PbrConfig { atlas_size, resolution: _, @@ -329,11 +339,10 @@ pub fn fragment_impl( has_skinning: _, perform_frustum_culling: _, perform_occlusion_culling: _, - light_array, - } = slab.read_unchecked(renderlet.pbr_config_id); + } = pbr_desc; let material = get_material(renderlet.material_id, has_lighting, slab); - my_println!("material: {:?}", material); + crate::println!("material: {:#?}", material); let albedo_tex_uv = if material.albedo_tex_coord == 0 { in_uv0 @@ -533,6 +542,8 @@ pub fn fragment_impl( *output = if material.has_lighting { shade_fragment( + shadow_map, + shadow_map_sampler, camera.position(), n, in_pos, @@ -544,8 +555,7 @@ pub fn fragment_impl( irradiance, specular, brdf, - light_array, - slab, + lighting_slab, ) } else { crate::println!("no shading!"); @@ -554,7 +564,9 @@ pub fn fragment_impl( } #[allow(clippy::too_many_arguments)] -pub fn shade_fragment( +pub fn shade_fragment( + shadow_map: &T, + shadow_map_sampler: &S, // camera's position in world space camera_pos: Vec3, // normal of the fragment @@ -571,34 +583,41 @@ pub fn shade_fragment( prefiltered: Vec3, brdf: Vec2, - lights: Array>, - slab: &[u32], -) -> Vec4 { + light_slab: &[u32], +) -> Vec4 +where + S: IsSampler, + T: Sample2dArray, +{ let n = in_norm.alt_norm_or_zero(); let v = (camera_pos - in_pos).alt_norm_or_zero(); - my_println!("lights: {lights:?}"); + // There is always a `LightingDescriptor` stored at index `0` of the + // light slab. + let lighting_desc = light_slab.read_unchecked(Id::::new(0)); + let analytical_lights_array = lighting_desc.analytical_lights_array; + my_println!("lights: {analytical_lights_array:?}"); my_println!("n: {n:?}"); my_println!("v: {v:?}"); // reflectance let mut lo = Vec3::ZERO; - for i in 0..lights.len() { + for i in 0..analytical_lights_array.len() { // calculate per-light radiance - let light_id = slab.read(lights.at(i)); + let light_id = light_slab.read(analytical_lights_array.at(i)); if light_id.is_none() { break; } - let light = slab.read(light_id); - let transform = slab.read(light.transform_id); + let light = light_slab.read(light_id); + let transform = light_slab.read(light.transform_id); let transform = Mat4::from(transform); // determine the light ray and the radiance match light.light_type { LightStyle::Point => { - let PointLight { + let PointLightDescriptor { position, color, intensity, - } = slab.read(light.into_point_id()); + } = light_slab.read(light.into_point_id()); let position = transform.transform_point3(position); let frag_to_light = position - in_pos; let distance = frag_to_light.length(); @@ -611,14 +630,14 @@ pub fn shade_fragment( } LightStyle::Spot => { - let SpotLight { + let SpotLightDescriptor { position, direction, inner_cutoff, outer_cutoff, color, intensity, - } = slab.read(light.into_spot_id()); + } = light_slab.read(light.into_spot_id()); let position = transform.transform_point3(position); let frag_to_light = position - in_pos; let distance = frag_to_light.length(); @@ -635,18 +654,27 @@ pub fn shade_fragment( } LightStyle::Directional => { - let DirectionalLight { + let DirectionalLightDescriptor { direction, color, intensity, - } = slab.read(light.into_directional_id()); + } = light_slab.read(light.into_directional_id()); let direction = transform.transform_vector3(direction); let l = -direction.alt_norm_or_zero(); let attenuation = intensity; let radiance = outgoing_radiance(color, albedo, attenuation, v, l, n, metallic, roughness); my_println!("radiance: {radiance:?}"); - lo += radiance; + + let shadow = if light.shadow_map_desc_id.is_some() { + // Shadow is 1.0 when the fragment is in the shadow of this light, + // and 0.0 otherwise + ShadowCalculation::new(light_slab, light, in_pos, n, l) + .run(shadow_map, shadow_map_sampler) + } else { + 0.0 + }; + lo += radiance * (1.0 - shadow); } } } diff --git a/crates/renderling/src/skybox/cpu.rs b/crates/renderling/src/skybox/cpu.rs index ae73750f..098acb7c 100644 --- a/crates/renderling/src/skybox/cpu.rs +++ b/crates/renderling/src/skybox/cpu.rs @@ -202,10 +202,10 @@ impl Skybox { roughness: roughness.id(), }); - let buffer = slab.upkeep(); + let buffer = slab.commit(); let mut buffer_upkeep = || { - let possibly_new_buffer = slab.upkeep(); - debug_assert!(!possibly_new_buffer.is_new_this_upkeep()); + let possibly_new_buffer = slab.commit(); + debug_assert!(!possibly_new_buffer.is_new_this_commit()); }; let equirectangular_texture = Skybox::hdr_texture_from_atlas_image(runtime, hdr_img); diff --git a/crates/renderling/src/stage.rs b/crates/renderling/src/stage.rs index 3b112f13..0737fba2 100644 --- a/crates/renderling/src/stage.rs +++ b/crates/renderling/src/stage.rs @@ -8,7 +8,7 @@ use glam::UVec2; use glam::{Mat4, Vec2, Vec3, Vec4, Vec4Swizzles}; use spirv_std::{ image::{Cubemap, Image2d, Image2dArray}, - spirv, Sampler, + spirv, Image, Sampler, }; use crate::{ @@ -203,6 +203,8 @@ pub struct Renderlet { /// Bounding sphere of the entire renderlet, in local space. pub bounds: BoundingSphere, pub indices_array: Array, + // TODO: Move camera to PbrConfig or something higher up, + // because it doesn't change all that often. pub camera_id: Id, pub transform_id: Id, pub material_id: Id, @@ -291,7 +293,7 @@ impl Renderlet { #[cfg(test)] /// A helper struct that contains all outputs of the Renderlet's PBR vertex shader. #[derive(Default, Debug, Clone, Copy, PartialEq)] -pub(crate) struct RenderletPbrVertexInfo { +pub struct RenderletPbrVertexInfo { pub renderlet: Renderlet, pub renderlet_id: Id, pub vertex_index: u32, @@ -320,6 +322,7 @@ pub fn renderlet_vertex( #[spirv(storage_buffer, descriptor_set = 0, binding = 0)] slab: &[u32], #[spirv(flat)] out_renderlet: &mut Id, + // TODO: Think about placing all these out values in a G-Buffer out_color: &mut Vec4, out_uv0: &mut Vec2, out_uv1: &mut Vec2, @@ -403,7 +406,13 @@ pub fn renderlet_fragment( #[spirv(descriptor_set = 1, binding = 6)] brdf: &Image2d, #[spirv(descriptor_set = 1, binding = 7)] brdf_sampler: &Sampler, + #[spirv(storage_buffer, descriptor_set = 0, binding = 0)] slab: &[u32], + + #[spirv(storage_buffer, descriptor_set = 2, binding = 0)] light_slab: &[u32], + #[spirv(descriptor_set = 2, binding = 1)] shadow_map: &Image!(2D, type=f32, sampled, arrayed), + #[spirv(descriptor_set = 2, binding = 2)] shadow_map_sampler: &Sampler, + #[spirv(flat)] renderlet_id: Id, in_color: Vec4, in_uv0: Vec2, @@ -423,7 +432,10 @@ pub fn renderlet_fragment( prefiltered_sampler, brdf, brdf_sampler, + shadow_map, + shadow_map_sampler, slab, + light_slab, renderlet_id, in_color, in_uv0, diff --git a/crates/renderling/src/stage/cpu.rs b/crates/renderling/src/stage/cpu.rs index 69e137e1..327a2e59 100644 --- a/crates/renderling/src/stage/cpu.rs +++ b/crates/renderling/src/stage/cpu.rs @@ -18,7 +18,7 @@ use crate::{ camera::Camera, debug::DebugOverlay, draw::DrawCalls, - light::Light, + light::Lighting, pbr::{debug::DebugChannel, PbrConfig}, skybox::{Skybox, SkyboxRenderPipeline}, stage::Renderlet, @@ -76,9 +76,14 @@ fn create_stage_render_pipeline( let fragment_linkage = crate::linkage::renderlet_fragment::linkage(device); let stage_slab_buffers_layout = crate::linkage::slab_bindgroup_layout(device); let atlas_and_skybox_layout = crate::linkage::atlas_and_skybox_bindgroup_layout(device); + let light_bindgroup_layout = crate::light::Lighting::create_bindgroup_layout(device); let layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { label, - bind_group_layouts: &[&stage_slab_buffers_layout, &atlas_and_skybox_layout], + bind_group_layouts: &[ + &stage_slab_buffers_layout, + &atlas_and_skybox_layout, + &light_bindgroup_layout, + ], push_constant_ranges: &[], }); @@ -138,7 +143,6 @@ pub struct Stage { pub(crate) mngr: SlabAllocator, pub(crate) pbr_config: Hybrid, - pub(crate) lights: Arc>>>, pub(crate) stage_pipeline: Arc>, pub(crate) skybox_pipeline: Arc>>>, @@ -153,6 +157,7 @@ pub struct Stage { pub(crate) atlas: Atlas, pub(crate) bloom: Bloom, pub(crate) skybox: Arc>, + pub(crate) lighting: Lighting, pub(crate) tonemapping: Tonemapping, pub(crate) debug_overlay: DebugOverlay, pub(crate) background_color: Arc>, @@ -181,11 +186,11 @@ impl Deref for Stage { impl Stage { /// Create a new stage. pub fn new(ctx: &crate::Context) -> Self { - let runtime = ctx.as_ref(); + let runtime = ctx.runtime(); let device = &runtime.device; let resolution @ UVec2 { x: w, y: h } = ctx.get_size(); let atlas_size = *ctx.atlas_size.read().unwrap(); - let atlas = Atlas::new(ctx, atlas_size).unwrap(); + let mngr = SlabAllocator::new_with_label(runtime, wgpu::BufferUsages::empty(), Some("stage-slab")); let pbr_config = mngr.new_value(PbrConfig { @@ -193,8 +198,9 @@ impl Stage { resolution, ..Default::default() }); + + let atlas = Atlas::new(&mngr, atlas_size, None, Some("stage-atlas"), None); let multisample_count = 1; - let lights = mngr.new_array(vec![Id::::NONE; 16]); let hdr_texture = Arc::new(RwLock::new(Texture::create_hdr_texture( device, w, @@ -211,17 +217,20 @@ impl Stage { &bloom.get_mix_texture(), ); let stage_pipeline = create_stage_render_pipeline(device, multisample_count); - let stage_slab_buffer = mngr.upkeep(); + let stage_slab_buffer = mngr.commit(); + + let lighting = Lighting::new(runtime, &stage_slab_buffer); Self { draw_calls: Arc::new(RwLock::new(DrawCalls::new( ctx, true, - &mngr.upkeep(), + &mngr.commit(), &depth_texture, ))), + lighting, depth_texture: Arc::new(RwLock::new(depth_texture)), - buffers_bindgroup: ManagedBindGroup::new(crate::linkage::slab_bindgroup( + buffers_bindgroup: ManagedBindGroup::from(crate::linkage::slab_bindgroup( device, &stage_slab_buffer, &stage_pipeline.get_bind_group_layout(0), @@ -229,7 +238,6 @@ impl Stage { stage_slab_buffer: Arc::new(RwLock::new(stage_slab_buffer)), mngr, pbr_config, - lights: Arc::new(RwLock::new(lights)), stage_pipeline: Arc::new(RwLock::new(stage_pipeline)), atlas, skybox: Arc::new(RwLock::new(Skybox::empty(runtime))), @@ -418,17 +426,6 @@ impl Stage { self } - /// Set the lights to use for shading. - pub fn set_lights(&self, lights: impl IntoIterator>) { - log::trace!("setting lights"); - let lights = self.mngr.new_array(lights); - self.pbr_config.modify(|cfg| { - cfg.light_array = lights.array(); - }); - // UNWRAP: POP - *self.lights.write().unwrap() = lights; - } - pub fn get_size(&self) -> UVec2 { // UNWRAP: panic on purpose let hdr = self.hdr_texture.read().unwrap(); @@ -501,7 +498,7 @@ impl Stage { images: impl IntoIterator>, ) -> Result>, StageError> { let images = images.into_iter().map(|i| i.into()).collect::>(); - let frames = self.atlas.add_images(self, &images)?; + let frames = self.atlas.add_images(&images)?; // The textures bindgroup will have to be remade let _ = self.textures_bindgroup.lock().unwrap().take(); @@ -531,7 +528,7 @@ impl Stage { images: impl IntoIterator>, ) -> Result>, StageError> { let images = images.into_iter().map(|i| i.into()).collect::>(); - let frames = self.atlas.set_images(self, &images)?; + let frames = self.atlas.set_images(&images)?; // The textures bindgroup will have to be remade let _ = self.textures_bindgroup.lock().unwrap().take(); @@ -720,8 +717,8 @@ impl Stage { fn tick_internal(&self) { self.draw_calls.write().unwrap().upkeep(); - let stage_slab_buffer = self.mngr.upkeep(); - if stage_slab_buffer.is_new_this_upkeep() { + let stage_slab_buffer = self.mngr.commit(); + if stage_slab_buffer.is_new_this_commit() { // invalidate our bindgroups, etc // TODO: we shouldn't have to invalidate skybox and other bindgroups, // they can do this in their own `run` functions @@ -735,29 +732,35 @@ impl Stage { /// slab. pub fn tick(&self) { self.atlas.upkeep(self.runtime()); - let _ = self.tick_internal(); + self.tick_internal(); + } + + pub fn lighting(&self) -> &Lighting { + &self.lighting } pub fn render(&self, view: &wgpu::TextureView) { + log::info!("render_with"); self.tick_internal(); + log::info!("ticked"); + self.lighting.upkeep(); let mut draw_calls = self.draw_calls.write().unwrap(); let depth_texture = self.depth_texture.read().unwrap(); // UNWRAP: safe because we know the depth texture format will always match let maybe_indirect_buffer = draw_calls.pre_draw(&depth_texture).unwrap(); { + log::info!("rendering"); let label = Some("stage render"); - // UNWRAP: POP - let background_color = *self.background_color.read().unwrap(); - // UNWRAP: POP - let pipeline = self.stage_pipeline.read().unwrap(); - // UNWRAP: POP - let msaa_target = self.msaa_render_target.read().unwrap(); + log::info!("getting slab buffers bindgroup"); let slab_buffers_bindgroup = { + log::info!("getting write lock"); let mut stage_slab_buffer = self.stage_slab_buffer.write().unwrap(); - let should_invalidate_buffers_bindgroup = stage_slab_buffer.synchronize(); + log::info!("got write lock"); + let should_invalidate_buffers_bindgroup = stage_slab_buffer.update_if_invalid(); self.buffers_bindgroup .get(should_invalidate_buffers_bindgroup, || { + log::info!("renewing invalid stage slab buffers bindgroup"); crate::linkage::slab_bindgroup( self.device(), &stage_slab_buffer, @@ -767,8 +770,19 @@ impl Stage { }) }; + log::info!("getting stage slab buffer"); let stage_slab_buffer = self.stage_slab_buffer.read().unwrap(); let textures_bindgroup = self.get_textures_bindgroup(); + log::info!("got stage slab buffer and shadow map depth texture"); + + // UNWRAP: POP + let background_color = *self.background_color.read().unwrap(); + // UNWRAP: POP + let pipeline = self.stage_pipeline.read().unwrap(); + // UNWRAP: POP + let msaa_target = self.msaa_render_target.read().unwrap(); + + let light_bindgroup = self.lighting.get_bindgroup(); let has_skybox = self.has_skybox.load(Ordering::Relaxed); let may_skybox_pipeline_and_bindgroup = if has_skybox { Some(self.get_skybox_pipeline_and_bindgroup(&stage_slab_buffer)) @@ -826,6 +840,7 @@ impl Stage { render_pass.set_pipeline(&pipeline); render_pass.set_bind_group(0, Some(slab_buffers_bindgroup.as_ref()), &[]); render_pass.set_bind_group(1, Some(textures_bindgroup.as_ref()), &[]); + render_pass.set_bind_group(2, Some(&light_bindgroup), &[]); draw_calls.draw(&mut render_pass); if let Some((pipeline, bindgroup)) = may_skybox_pipeline_and_bindgroup.as_ref() { @@ -851,13 +866,13 @@ impl Stage { }); let bloom_mix_texture = self.bloom.get_mix_texture(); encoder.copy_texture_to_texture( - wgpu::ImageCopyTexture { + wgpu::TexelCopyTextureInfo { texture: &self.hdr_texture.read().unwrap().texture, mip_level: 0, origin: wgpu::Origin3d { x: 0, y: 0, z: 0 }, aspect: wgpu::TextureAspect::All, }, - wgpu::ImageCopyTexture { + wgpu::TexelCopyTextureInfo { texture: &bloom_mix_texture.texture, mip_level: 0, origin: wgpu::Origin3d { x: 0, y: 0, z: 0 }, @@ -894,8 +909,8 @@ impl Stage { /// /// Only available on CPU. #[derive(Clone)] -pub struct NestedTransform { - global_transform: Gpu, +pub struct NestedTransform { + global_transform: Ct::Container, local_transform: Arc>, children: Arc>>, parent: Arc>>, @@ -924,11 +939,22 @@ impl core::fmt::Debug for NestedTransform { } } +impl NestedTransform { + pub fn from_hybrid(hybrid: &NestedTransform) -> Self { + Self { + global_transform: WeakHybrid::from_hybrid(&hybrid.global_transform), + local_transform: hybrid.local_transform.clone(), + children: hybrid.children.clone(), + parent: hybrid.parent.clone(), + } + } +} + impl NestedTransform { pub fn new(mngr: &SlabAllocator) -> Self { let nested = NestedTransform { local_transform: Arc::new(RwLock::new(Transform::default())), - global_transform: mngr.new_value(Transform::default()).into_gpu_only(), + global_transform: mngr.new_value(Transform::default()), children: Default::default(), parent: Default::default(), }; @@ -936,6 +962,17 @@ impl NestedTransform { nested } + /// Moves the inner `Gpu` of the global transform to a different + /// slab. + /// + /// This is used by the GLTF parser to move light's node transforms to the + /// light slab after they are created, which keeping any geometry's node + /// transforms untouched. + pub(crate) fn move_gpu_to_slab(&mut self, slab: &SlabAllocator) { + self.global_transform = slab.new_value(Transform::default()); + self.mark_dirty(); + } + pub fn get_notifier_index(&self) -> usize { self.global_transform.notifier_index() } @@ -1012,11 +1049,12 @@ impl NestedTransform { #[cfg(test)] mod test { use craballoc::runtime::CpuRuntime; - use crabslab::{Array, Slab}; + use crabslab::{Array, Id, Slab}; use glam::{Mat4, Vec2, Vec3}; use crate::{ camera::Camera, + pbr::PbrConfig, stage::{cpu::SlabAllocator, NestedTransform, Renderlet, Vertex}, transform::Transform, Context, @@ -1157,4 +1195,17 @@ mod test { stage.add_renderlet(&r); assert_eq!(1, r.ref_count()); } + + #[test] + /// Tests that the PBR descriptor is written to slot 0 of the geometry buffer, + /// and that it contains what we think it contains. + fn stage_pbr_desc_sanity() { + let ctx = Context::headless(100, 100); + let stage = ctx.new_stage(); + stage.commit(); + + let slab = futures_lite::future::block_on(stage.read(..)).unwrap(); + let pbr_desc = slab.read_unchecked(Id::::new(0)); + pretty_assertions::assert_eq!(stage.pbr_config.get(), pbr_desc); + } } diff --git a/crates/renderling/src/stage/gltf_support.rs b/crates/renderling/src/stage/gltf_support.rs index 5dc7250e..93d77aa5 100644 --- a/crates/renderling/src/stage/gltf_support.rs +++ b/crates/renderling/src/stage/gltf_support.rs @@ -10,7 +10,10 @@ use snafu::{OptionExt, ResultExt, Snafu}; use crate::{ atlas::{AtlasError, AtlasImage, AtlasTexture, TextureAddressMode, TextureModes}, camera::Camera, - light::{DirectionalLight, Light, LightDetails, LightStyle, PointLight, SpotLight}, + light::{ + AnalyticalLightBundle, DirectionalLightDescriptor, Light, LightDetails, LightStyle, + PointLightDescriptor, SpotLightDescriptor, + }, pbr::Material, stage::{MorphTarget, NestedTransform, Renderlet, Skin, Stage, Vertex}, transform::Transform, @@ -638,15 +641,6 @@ impl GltfCamera { } } -#[derive(Debug)] -pub struct GltfLight { - pub details: LightDetails, - pub node_transform: NestedTransform, - pub light: Hybrid, -} - -impl GltfLight {} - /// A node in a GLTF document, ready to be 'drawn'. #[derive(Clone, Debug)] pub struct GltfNode { @@ -754,7 +748,7 @@ impl GltfSkin { } } -#[derive(Debug)] +/// A loaded GLTF document. pub struct GltfDocument { pub animations: Vec, pub cameras: Vec, @@ -762,7 +756,7 @@ pub struct GltfDocument { pub default_scene: Option, pub extensions: Option, pub textures: Vec>, - pub lights: Vec, + pub lights: Vec, pub meshes: Vec, pub nodes: Vec, pub materials: HybridArray, @@ -997,68 +991,67 @@ impl GltfDocument { let mut lights = vec![]; if let Some(gltf_lights) = document.lights() { for gltf_light in gltf_lights { - let color = Vec3::from(gltf_light.color()).extend(1.0); - let intensity = gltf_light.intensity(); - let (mut light, details): (Light, _) = match gltf_light.kind() { - gltf::khr_lights_punctual::Kind::Directional => { - let light = stage.new_value(DirectionalLight { - direction: Vec3::NEG_Z, - color, - // TODO: Set a unit for lighting. - // We don't yet use a unit for our lighting, and we should. - // https://www.realtimerendering.com/blog/physical-units-for-lights/ - // - // NOTE: - // glTF spec [1] says directional light is in lux, whereas spot and point are - // in candelas. I haven't really set a unit, it's implicit in the shader, but it seems we - // can roughly get candelas from lux by dividing by 683 [2]. - // 1. https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_lights_punctual/README.md - // 2. https://depts.washington.edu/mictech/optics/me557/Radiometry.pdf - intensity: intensity / 683.0, - }); - - (light.id().into(), LightDetails::Directional(light)) - } - gltf::khr_lights_punctual::Kind::Point => { - let light = stage.new_value(PointLight { - position: Vec3::ZERO, - color, - intensity, - }); - (light.id().into(), LightDetails::Point(light)) - } - gltf::khr_lights_punctual::Kind::Spot { - inner_cone_angle, - outer_cone_angle, - } => { - let light = stage.new_value(SpotLight { - position: Vec3::ZERO, - direction: Vec3::NEG_Z, - inner_cutoff: inner_cone_angle, - outer_cutoff: outer_cone_angle, - color, - intensity, - }); - (light.id().into(), LightDetails::Spot(light)) - } - }; let node_index = *light_index_to_node_index.get(&gltf_light.index()).context( MissingCameraSnafu { index: gltf_light.index(), }, )?; - let node_transform = node_transforms + + let mut node_transform = node_transforms .get(&node_index) .context(MissingNodeSnafu { index: node_index })? .clone(); - light.transform_id = node_transform.global_transform_id(); - - let light = stage.new_value(light); - lights.push(GltfLight { - details, - node_transform, - light, - }); + node_transform.move_gpu_to_slab(stage.lighting().slab()); + + let color = Vec3::from(gltf_light.color()).extend(1.0); + let intensity = gltf_light.intensity(); + let light_bundle = match gltf_light.kind() { + gltf::khr_lights_punctual::Kind::Directional => { + stage.lighting().new_directional_light( + DirectionalLightDescriptor { + direction: Vec3::NEG_Z, + color, + // TODO: Set a unit for lighting. + // We don't yet use a unit for our lighting, and we should. + // https://www.realtimerendering.com/blog/physical-units-for-lights/ + // + // NOTE: + // glTF spec [1] says directional light is in lux, whereas spot and point are + // in candelas. I haven't really set a unit, it's implicit in the shader, but it seems we + // can roughly get candelas from lux by dividing by 683 [2]. + // 1. https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_lights_punctual/README.md + // 2. https://depts.washington.edu/mictech/optics/me557/Radiometry.pdf + intensity: intensity / 683.0, + }, + Some(node_transform), + ) + } + gltf::khr_lights_punctual::Kind::Point => todo!(), + // { + // let light = stage.new_value(PointLightDescriptor { + // position: Vec3::ZERO, + // color, + // intensity, + // }); + // (light.id().into(), LightDetails::Point(light)) + // } + gltf::khr_lights_punctual::Kind::Spot { + inner_cone_angle, + outer_cone_angle, + } => todo!(), // { + // let light = stage.new_value(SpotLightDescriptor { + // position: Vec3::ZERO, + // direction: Vec3::NEG_Z, + // inner_cutoff: inner_cone_angle, + // outer_cutoff: outer_cone_angle, + // color, + // intensity, + // }); + // (light.id().into(), LightDetails::Spot(light)) + // } + }; + + lights.push(light_bundle); } } @@ -1382,8 +1375,6 @@ mod test { }); }); - stage.set_lights(doc.lights.iter().map(|gltf_light| gltf_light.light.id())); - let frame = ctx.get_next_frame().unwrap(); stage.render(&frame.view()); let img = frame.read_image().unwrap(); diff --git a/crates/renderling/src/texture.rs b/crates/renderling/src/texture.rs index 552886df..a4e04d17 100644 --- a/crates/renderling/src/texture.rs +++ b/crates/renderling/src/texture.rs @@ -1,5 +1,9 @@ //! Wrapper around [`wgpu::Texture`]. -use std::{ops::Deref, sync::Arc}; +use core::sync::atomic::AtomicUsize; +use std::{ + ops::Deref, + sync::{Arc, LazyLock}, +}; use craballoc::runtime::WgpuRuntime; use glam::UVec2; @@ -43,6 +47,8 @@ type Result = std::result::Result; pub fn wgpu_texture_format_channels_and_subpixel_bytes(format: wgpu::TextureFormat) -> (u32, u32) { match format { + wgpu::TextureFormat::Depth32Float => (1, 4), + wgpu::TextureFormat::R32Float => (1, 4), wgpu::TextureFormat::Rg16Float => (2, 2), wgpu::TextureFormat::Rgba16Float => (4, 2), wgpu::TextureFormat::Rgba32Float => (4, 4), @@ -51,15 +57,33 @@ pub fn wgpu_texture_format_channels_and_subpixel_bytes(format: wgpu::TextureForm } } +static NEXT_TEXTURE_ID: LazyLock> = LazyLock::new(|| Arc::new(0.into())); + +fn get_next_texture_id() -> usize { + NEXT_TEXTURE_ID.fetch_add(1, std::sync::atomic::Ordering::Relaxed) +} + /// A texture living on the GPU. #[derive(Debug, Clone)] pub struct Texture { pub texture: Arc, pub view: Arc, pub sampler: Arc, + id: usize, } impl Texture { + /// Returns the id of this texture. + /// + /// The id is a monotonically increasing count of all textures created. + /// + /// This can be used to determine if a texture has been + /// replaced by another, which can be used, for example, to invalidate + /// a [`wgpu::BindGroup`]. + pub fn id(&self) -> usize { + self.id + } + pub fn width(&self) -> u32 { self.texture.width() } @@ -110,13 +134,13 @@ impl Texture { let index = i * mip_levels as usize + mip_level; let texture = &face_textures[index].texture; encoder.copy_texture_to_texture( - wgpu::ImageCopyTexture { + wgpu::TexelCopyTextureInfo { texture, mip_level: 0, origin: wgpu::Origin3d::ZERO, aspect: wgpu::TextureAspect::All, }, - wgpu::ImageCopyTexture { + wgpu::TexelCopyTextureInfo { texture: &cubemap_texture, mip_level: mip_level as u32, origin: wgpu::Origin3d { @@ -157,6 +181,7 @@ impl Texture { texture: cubemap_texture.into(), view: view.into(), sampler: sampler.into(), + id: get_next_texture_id(), } } @@ -199,14 +224,14 @@ impl Texture { if !data.is_empty() { queue.write_texture( - wgpu::ImageCopyTexture { + wgpu::TexelCopyTextureInfo { texture: &texture, mip_level: 0, origin: wgpu::Origin3d::ZERO, aspect: wgpu::TextureAspect::All, }, data, - wgpu::ImageDataLayout { + wgpu::TexelCopyBufferLayout { offset: 0, bytes_per_row: Some(color_channels * color_channel_bytes * width), rows_per_image: None, @@ -232,6 +257,7 @@ impl Texture { texture: Arc::new(texture), view: Arc::new(view), sampler: Arc::new(sampler), + id: get_next_texture_id(), } } @@ -335,14 +361,14 @@ impl Texture { }); queue.write_texture( - wgpu::ImageCopyTexture { + wgpu::TexelCopyTextureInfo { texture: &texture, mip_level: 0, origin: wgpu::Origin3d::ZERO, aspect: wgpu::TextureAspect::All, }, img.as_bytes(), - wgpu::ImageDataLayout { + wgpu::TexelCopyBufferLayout { offset: 0, bytes_per_row: Some(channels * dimensions.0), rows_per_image: Some(dimensions.1), @@ -397,14 +423,14 @@ impl Texture { }); runtime.queue.write_texture( - wgpu::ImageCopyTexture { + wgpu::TexelCopyTextureInfo { texture: &texture, mip_level: 0, origin: wgpu::Origin3d::ZERO, aspect: wgpu::TextureAspect::All, }, img.deref(), - wgpu::ImageDataLayout { + wgpu::TexelCopyBufferLayout { offset: 0, bytes_per_row: Some(P::CHANNEL_COUNT as u32 * dimensions.0), rows_per_image: Some(dimensions.1), @@ -446,6 +472,7 @@ impl Texture { texture, view, sampler, + id: get_next_texture_id(), } } @@ -494,6 +521,7 @@ impl Texture { texture: Arc::new(texture), view: Arc::new(view), sampler: Arc::new(sampler), + id: get_next_texture_id(), } } @@ -562,9 +590,9 @@ impl Texture { // Copy the data from the surface texture to the buffer encoder.copy_texture_to_buffer( source, - wgpu::ImageCopyBuffer { + wgpu::TexelCopyBufferInfo { buffer: &buffer, - layout: wgpu::ImageDataLayout { + layout: wgpu::TexelCopyBufferLayout { offset: 0, bytes_per_row: Some(dimensions.padded_bytes_per_row as u32), rows_per_image: None, @@ -674,6 +702,7 @@ impl Texture { texture, view, sampler, + id: get_next_texture_id(), } } } @@ -720,6 +749,20 @@ impl DepthTexture { } } + pub fn try_new_from( + runtime: impl AsRef, + value: Texture, + ) -> Result { + if value.texture.format() != wgpu::TextureFormat::Depth32Float { + return UnsupportedFormatSnafu.fail(); + } + + Ok(Self { + runtime: runtime.as_ref().clone(), + texture: value.texture, + }) + } + /// Converts the depth texture into an image. /// /// Assumes the format is single channel 32bit. @@ -832,16 +875,25 @@ impl CopiedTextureBuffer { } /// Convert the post render buffer into an image. - pub fn into_image

(self, device: &wgpu::Device) -> Result + /// + /// `Sp` is the sub-pixel type. eg, `u8` or `f32` + /// + /// `P` is the pixel type. eg, `Rgba` or `Luma` + pub fn into_image( + self, + device: &wgpu::Device, + ) -> Result where - P: image::Pixel, - image::DynamicImage: From>>, + Sp: bytemuck::AnyBitPattern, + P: image::Pixel, + image::DynamicImage: From>>, { let pixels = self.pixels(device); - let img_buffer: image::ImageBuffer> = image::ImageBuffer::from_raw( + let coerced_pixels: &[Sp] = bytemuck::cast_slice(&pixels); + let img_buffer: image::ImageBuffer> = image::ImageBuffer::from_raw( self.dimensions.width as u32, self.dimensions.height as u32, - pixels, + coerced_pixels.to_vec(), ) .context(CouldNotConvertImageBufferSnafu)?; Ok(image::DynamicImage::from(img_buffer)) @@ -864,6 +916,8 @@ impl CopiedTextureBuffer { /// /// Ensures that the pixels are in the given color space by applying the /// correct transfer function if needed. + /// + /// Assumes the texture is in `Rgba8` format. pub fn into_rgba( self, device: &wgpu::Device, @@ -872,7 +926,7 @@ impl CopiedTextureBuffer { linear: bool, ) -> Result { let format = self.format; - let mut img_buffer = self.into_image::>(device)?.into_rgba8(); + let mut img_buffer = self.into_image::>(device)?.into_rgba8(); let linear_xfer = format.is_srgb() && linear; let opto_xfer = !format.is_srgb() && !linear; let should_xfer = linear_xfer || opto_xfer; @@ -907,7 +961,7 @@ impl CopiedTextureBuffer { /// linear transfer if the texture this buffer was copied from was sRGB. pub fn into_linear_rgba(self, device: &wgpu::Device) -> Result { let format = self.format; - let mut img_buffer = self.into_image::>(device)?.into_rgba8(); + let mut img_buffer = self.into_image::>(device)?.into_rgba8(); if format.is_srgb() { log::trace!( "converting by applying linear transfer fn to srgb pixels (sRGB -> linear)" @@ -930,7 +984,7 @@ impl CopiedTextureBuffer { /// linear transfer if the texture this buffer was copied from was sRGB. pub fn into_srgba(self, device: &wgpu::Device) -> Result { let format = self.format; - let mut img_buffer = self.into_image::>(device)?.into_rgba8(); + let mut img_buffer = self.into_image::>(device)?.into_rgba8(); if !format.is_srgb() { log::trace!( "converting by applying opto transfer fn to linear pixels (linear -> sRGB)" diff --git a/crates/renderling/src/tonemapping/cpu.rs b/crates/renderling/src/tonemapping/cpu.rs index 1e86612d..18e0f7fd 100644 --- a/crates/renderling/src/tonemapping/cpu.rs +++ b/crates/renderling/src/tonemapping/cpu.rs @@ -108,7 +108,7 @@ impl Tonemapping { let config = slab.new_value(TonemapConstants::default()); let label = Some("tonemapping"); - let slab_buffer = slab.upkeep(); + let slab_buffer = slab.commit(); let bindgroup = Arc::new(RwLock::new(create_bindgroup( &runtime.device, label, @@ -189,7 +189,7 @@ impl Tonemapping { pub fn render(&self, device: &wgpu::Device, queue: &wgpu::Queue, view: &wgpu::TextureView) { let label = Some("tonemapping render"); - assert!(!self.slab.upkeep().is_new_this_upkeep()); + assert!(!self.slab.commit().is_new_this_commit()); // UNWRAP: not safe but we want to panic let bindgroup = self.bindgroup.read().unwrap(); diff --git a/crates/renderling/src/tutorial.rs b/crates/renderling/src/tutorial.rs index 01ca31df..6de7a35f 100644 --- a/crates/renderling/src/tutorial.rs +++ b/crates/renderling/src/tutorial.rs @@ -107,7 +107,10 @@ pub fn tutorial_slabbed_renderlet( #[cfg(test)] mod test { - use craballoc::prelude::{SlabAllocator, WgpuRuntime}; + use craballoc::{ + prelude::{SlabAllocator, WgpuRuntime}, + slab::SlabBuffer, + }; use crate::{ camera::Camera, @@ -211,7 +214,11 @@ mod test { let WgpuRuntime { device, queue } = ctx.as_ref(); // Create our geometry on the slab. - let slab = SlabAllocator::new(&ctx, wgpu::BufferUsages::empty()); + let slab = SlabAllocator::new_with_label( + &ctx, + wgpu::BufferUsages::empty(), + Some("isosceles-triangle-no-instance"), + ); let initial_vertices = [ Vertex { position: Vec3::new(0.5, -0.5, 0.0), @@ -299,7 +306,7 @@ mod test { cache: None, }); - let slab_buffer = slab.upkeep(); + let slab_buffer: SlabBuffer = slab.commit(); let bindgroup = device.create_bind_group(&wgpu::BindGroupDescriptor { label, layout: &bindgroup_layout, @@ -369,7 +376,11 @@ mod test { let WgpuRuntime { device, queue } = ctx.as_ref(); // Create our geometry on the slab. - let slab = SlabAllocator::new(&ctx, wgpu::BufferUsages::empty()); + let slab: SlabAllocator = SlabAllocator::new_with_label( + &ctx, + wgpu::BufferUsages::empty(), + Some("slabbed-isosceles-triangle"), + ); let geometry = vec![ Vertex { position: Vec3::new(0.5, -0.5, 0.0), @@ -471,7 +482,7 @@ mod test { cache: None, }); - let slab_buffer = slab.upkeep(); + let slab_buffer: SlabBuffer = slab.commit(); let bindgroup = device.create_bind_group(&wgpu::BindGroupDescriptor { label, layout: &bindgroup_layout, @@ -528,7 +539,11 @@ mod test { // Create our geometry on the slab. // Don't worry too much about capacity, it can grow. - let slab = SlabAllocator::new(&ctx, wgpu::BufferUsages::empty()); + let slab: SlabAllocator = SlabAllocator::new_with_label( + &ctx, + wgpu::BufferUsages::empty(), + Some("slabbed-renderlet"), + ); let geometry = slab.new_array([ Vertex { position: Vec3::new(0.5, -0.5, 0.0), @@ -642,7 +657,7 @@ mod test { cache: None, }); - let slab_buffer = slab.upkeep(); + let slab_buffer: SlabBuffer = slab.commit(); let bindgroup = device.create_bind_group(&wgpu::BindGroupDescriptor { label, layout: &bindgroup_layout, diff --git a/gltf/shadow_mapping_sanity.bin b/gltf/shadow_mapping_sanity.bin index 3983f234e8be53f34f8a5b870feaa93e9895ba03..292c849c547c2e747b386a80a8dc974e62a16c70 100644 GIT binary patch delta 38305 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 b;W&oT1<7{R&5q6L8Q&BU diff --git a/gltf/shadow_mapping_sanity.gltf b/gltf/shadow_mapping_sanity.gltf index 90b293be..2c888fc8 100644 --- a/gltf/shadow_mapping_sanity.gltf +++ b/gltf/shadow_mapping_sanity.gltf @@ -4,6 +4,7 @@ "version":"2.0" }, "extensionsUsed":[ + "KHR_materials_emissive_strength", "KHR_lights_punctual" ], "extensionsRequired":[ @@ -34,7 +35,10 @@ 1, 2, 3, - 4 + 4, + 5, + 6, + 7 ] } ], @@ -45,7 +49,7 @@ "translation":[ 0, 0, - 1.5244084596633911 + 0.8984647393226624 ] }, { @@ -94,6 +98,55 @@ 0.7535718679428101, 1.7896754741668701 ] + }, + { + "mesh":3, + "name":"Sphere.001", + "translation":[ + -3.5589241981506348, + -1.1574621200561523, + 1.4128384590148926 + ] + }, + { + "mesh":4, + "name":"Cylinder", + "rotation":[ + -0.14098228514194489, + 0.5328636765480042, + 0.2134113311767578, + 0.8066200613975525 + ], + "scale":[ + 0.2753068208694458, + 0.2753068506717682, + 0.2753068208694458 + ], + "translation":[ + 4.076245307922363, + 1.0054539442062378, + 5.903861999511719 + ] + }, + { + "mesh":5, + "name":"Cylinder.001", + "rotation":[ + -0.14098228514194489, + 0.5328636765480042, + 0.2134113311767578, + 0.8066200613975525 + ], + "scale":[ + 0.2753068208694458, + 0.2753068506717682, + 0.2753068208694458 + ], + "translation":[ + -6.663036346435547, + -4.068678855895996, + 0.5199804306030273 + ] } ], "cameras":[ @@ -144,6 +197,42 @@ "metallicFactor":0.6710526347160339, "roughnessFactor":0.21052631735801697 } + }, + { + "doubleSided":true, + "name":"Material.002", + "pbrMetallicRoughness":{ + "baseColorFactor":[ + 0.13696487247943878, + 0.8001965880393982, + 0.11292669177055359, + 1 + ], + "metallicFactor":0, + "roughnessFactor":0.5 + } + }, + { + "doubleSided":true, + "emissiveFactor":[ + 0, + 0.31788796186447144, + 1 + ], + "extensions":{ + "KHR_materials_emissive_strength":{ + "emissiveStrength":10 + } + }, + "name":"LightCone", + "pbrMetallicRoughness":{ + "baseColorFactor":[ + 0, + 0, + 0, + 1 + ] + } } ], "meshes":[ @@ -188,6 +277,48 @@ "material":2 } ] + }, + { + "name":"Sphere.001", + "primitives":[ + { + "attributes":{ + "POSITION":12, + "NORMAL":13, + "TEXCOORD_0":14 + }, + "indices":15, + "material":3 + } + ] + }, + { + "name":"Cylinder", + "primitives":[ + { + "attributes":{ + "POSITION":16, + "NORMAL":17, + "TEXCOORD_0":18 + }, + "indices":19, + "material":4 + } + ] + }, + { + "name":"Cylinder.001", + "primitives":[ + { + "attributes":{ + "POSITION":20, + "NORMAL":21, + "TEXCOORD_0":22 + }, + "indices":19, + "material":4 + } + ] } ], "accessors":[ @@ -228,7 +359,7 @@ { "bufferView":4, "componentType":5126, - "count":4, + "count":24, "max":[ 23.336652755737305, 23.336652755737305, @@ -237,26 +368,26 @@ "min":[ -23.336652755737305, -23.336652755737305, - 0 + -0.2270890176296234 ], "type":"VEC3" }, { "bufferView":5, "componentType":5126, - "count":4, + "count":24, "type":"VEC3" }, { "bufferView":6, "componentType":5126, - "count":4, + "count":24, "type":"VEC2" }, { "bufferView":7, "componentType":5123, - "count":6, + "count":36, "type":"SCALAR" }, { @@ -292,6 +423,102 @@ "componentType":5123, "count":2880, "type":"SCALAR" + }, + { + "bufferView":12, + "componentType":5126, + "count":1984, + "max":[ + 0.9999997019767761, + 1, + -0.09411358833312988 + ], + "min":[ + -0.9999990463256836, + -0.9999993443489075, + -2.09411358833313 + ], + "type":"VEC3" + }, + { + "bufferView":13, + "componentType":5126, + "count":1984, + "type":"VEC3" + }, + { + "bufferView":14, + "componentType":5126, + "count":1984, + "type":"VEC2" + }, + { + "bufferView":15, + "componentType":5123, + "count":2880, + "type":"SCALAR" + }, + { + "bufferView":16, + "componentType":5126, + "count":192, + "max":[ + 1, + 1, + 1 + ], + "min":[ + -1, + -1, + -1 + ], + "type":"VEC3" + }, + { + "bufferView":17, + "componentType":5126, + "count":192, + "type":"VEC3" + }, + { + "bufferView":18, + "componentType":5126, + "count":192, + "type":"VEC2" + }, + { + "bufferView":19, + "componentType":5123, + "count":372, + "type":"SCALAR" + }, + { + "bufferView":20, + "componentType":5126, + "count":192, + "max":[ + 1, + 1, + 1 + ], + "min":[ + -1, + -1, + -1 + ], + "type":"VEC3" + }, + { + "bufferView":21, + "componentType":5126, + "count":192, + "type":"VEC3" + }, + { + "bufferView":22, + "componentType":5126, + "count":192, + "type":"VEC2" } ], "bufferViews":[ @@ -321,56 +548,122 @@ }, { "buffer":0, - "byteLength":48, + "byteLength":288, "byteOffset":840, "target":34962 }, { "buffer":0, - "byteLength":48, - "byteOffset":888, + "byteLength":288, + "byteOffset":1128, + "target":34962 + }, + { + "buffer":0, + "byteLength":192, + "byteOffset":1416, "target":34962 }, { "buffer":0, - "byteLength":32, - "byteOffset":936, + "byteLength":72, + "byteOffset":1608, + "target":34963 + }, + { + "buffer":0, + "byteLength":23808, + "byteOffset":1680, "target":34962 }, { "buffer":0, - "byteLength":12, - "byteOffset":968, + "byteLength":23808, + "byteOffset":25488, + "target":34962 + }, + { + "buffer":0, + "byteLength":15872, + "byteOffset":49296, + "target":34962 + }, + { + "buffer":0, + "byteLength":5760, + "byteOffset":65168, "target":34963 }, { "buffer":0, "byteLength":23808, - "byteOffset":980, + "byteOffset":70928, "target":34962 }, { "buffer":0, "byteLength":23808, - "byteOffset":24788, + "byteOffset":94736, "target":34962 }, { "buffer":0, "byteLength":15872, - "byteOffset":48596, + "byteOffset":118544, "target":34962 }, { "buffer":0, "byteLength":5760, - "byteOffset":64468, + "byteOffset":134416, + "target":34963 + }, + { + "buffer":0, + "byteLength":2304, + "byteOffset":140176, + "target":34962 + }, + { + "buffer":0, + "byteLength":2304, + "byteOffset":142480, + "target":34962 + }, + { + "buffer":0, + "byteLength":1536, + "byteOffset":144784, + "target":34962 + }, + { + "buffer":0, + "byteLength":744, + "byteOffset":146320, "target":34963 + }, + { + "buffer":0, + "byteLength":2304, + "byteOffset":147064, + "target":34962 + }, + { + "buffer":0, + "byteLength":2304, + "byteOffset":149368, + "target":34962 + }, + { + "buffer":0, + "byteLength":1536, + "byteOffset":151672, + "target":34962 } ], "buffers":[ { - "byteLength":70228, + "byteLength":153208, "uri":"shadow_mapping_sanity.bin" } ] diff --git a/gltf/shadow_mapping_sanity_spot.blend b/gltf/shadow_mapping_sanity_spot.blend index 8b77261d377cfca0b996529969399701a4f20c08..f634208750b13cbe97281bb325458dff97404b8d 100644 GIT binary patch delta 106574 zcmafc34Bx4@_+74fEEe_NTEOr7ugCF2~eQW0%5OEum~cnguN(B*ehFuqLfWq0$fyt zxM4xSVu7F{1Q$dFtvvOi4>2w%J`wxgQ-8Rg|I9fv*&e=s_=J;l?#y?-GiT0n?@ew` zoau1wkxnJaw&eA5HFLq=Z4F8@ZnIeu3#^Cl`>sWWvt~kq&y$i`;YlgCmikqB*ndKk z4L*O4JNewXbK%I{o=x@lj59jLHh<_({{8#KV~;!{7R{U~ZqMv0y4I{IO0&9( zZ|2VupG=z|-knz<&J?W>C(P~Q*r7vG@1>Vs5+_fd6lczy5pTc!w(s_V_W|RvzDvDY zmHG?Od=XQ8^UXH}nn%+wzx=W|e*CyNa^#43;e{8(bI&~|o_XdOv1`{Z@d!}ZvSo{S z@WBVgk_8LIl#wIFp!BvtCs8}o()suh%l|ad-sYb zpL|kM+qP|+SigR~ShHr0SiXF@@OV7(T~JUU#*G>!26ycux+gn?vzpC!YDnYkl1}Z! z#nHpWn>m@{<<9NI-WH9;6U`e5KfJLFbZRT!?A=XVymOfNX4O)0<&kaT^8RPV2fyDY}qm~efo59@4femapT5`VZ(-rJMX+x3?4jK^y}A8^zPYHWZLUOXl=gd zhqcb$)V`H?cW`fUvRj7O*RrW7ZjdAj?TKP(-30NVBS~y-R977B&`P}7r3w5CHIn&60v#nW*OhY!a^~7 z_G~c|vhl9F?h+FwOb~f_d1CbF(PGGuA)4KXI6nivJ|e0VRj*AzwdYl#DGn~T?bbrGRyIo#1mrFB~6iFTw=o9tgsC!@NgNjvhTK%FD~efddD`v(G*&{C>Z9^wCE}X=$nK zg`%P&v2fu+F>BT=>CME66UESBL&bpH{-SH2&LX2%d(o~}Ytb^Rxwxf!bI~T}7Lnew zwMg&YT4eNSFS=xP7FoTre3RES-a6lA&Fbv*JwLo-_NG?N#gSXvi0w`4i#fGxh_Q*) zMDJ==(F4ZFfa*3e7~bP+Ru>OJhdtNU5a$Qwh<`4dFFt?DU%Dj?#(*D&r`;DEoKS@M z&tu@#S6>zE9ggnkzQSRO9^#nTwd-+Vnx?=$yZ`?C1$xPOh90`zZrNAEhYy!IhIy8q zoh>qZb`?#!G!zbJ9nrv98{Y#(gU+=@a%LUjfHyTlnH2t_Zp`v%UZqV5svp2SGE)KW9McfYwJGE8~h=)ydw(6pb73K{ndqRA2 z;5{3X;Ng^d;xyoWHg%i`J-HiW0&{{dYp|!(pFsUygc;1U1kSS@C7j4GQaG8NI(14; zXfM9_qQDV}lNydnjuvM36HlnoiL=MXjT^<z44PGBLBL$lzN}tNaVXsoALi$Z zPxn0P>(nZ_+EY(IE5`ad=Qc=7ZQ~NX2D-(4-fiNM98^r{RZ*SLl4Q^!x4sa2Ik%ICAWW zOdni=IUp|_(hm8aU)0W5ImDKY@!!|FnOIprNeqG*ce7#aqvDSX9@M)*IT;eVxM5xK zX5Sv-L*Eu(qoM86l3NZEsU7bUt+EQltpk^fo+IuTYd1d&Gw(U^u5U_i51hT^68sLV zADGP;^XQq3$2;x@cv;374YT<0;lnca7it9fv zwm8A;*|SG`$XU~llgjC%vu790uKBRCpx z7RKJdH?EpEx8N*{o2K2ncgyu=%a&4c^26`N`73|O_d8$xE)Ko+iP*Ypuh_6bjS`rp ziv&&vIBjp;x>ZIQcU}0#NSBqB$?XIVIZOe3BLO6YlN~OAI0+*00b^W|X*{M!B9l<; zNWu1cs%vmcFF#U_z2e(5ym$8FuvfxfSl`Gl?ntaIy2{K~z0gUHh{&kGrEOO21hE_T zQ}1jn_B9&OqHVoqy+wVapJ?4{zG&NLvFLvL!y^06?P9>BJ!0tey<)_yGEunhdEev_ zkzT-gi02}73Z29G2z!Bhf_KT-6TBYcyu@P!1BAP0>=~T(%a6Sh?g8!zEZ_R#SMmG{ zN9BA5@=n>M2!sxV6Jw=>(^NjDY+xuld)4h{84V#^9O&f@bFs%%!fz!U4YGS4zXu~C83@i;hQXS$g z40e9=j+vrq#$7VuowuzOorkUy{U+>!Q12FbGs{H&?B~R&IS0k)IS0h9r(Y`F(k^@= zzz$*5c|DDuk$4>NZV^+CR|YO|y~WSLH{KTKAjhMl%%9&ldrk%sdzE_G*JxzFzK{AJ z5tw;AnKbNCSFWKAvv7Td;9(leT}f;paV^cCo>#gh*>_;1Gy6c_p5pC6y~R^4Q^h@X z66Kx(_g#?~@@K2)3sXh`>^C;Trupm!h~FJ)UF$UIF4CNnM6)h#h+eVinzvr`pSW8L zyxULFJ0!*}tPqoy92K)xREV>0y;HiSHJlG5_?&GLeD>aUpSz9C=SolTUF`^axX!j- z7)_2Um)s_IF&|zQ=RW^ACR*n{`;Rz(-goycci_a7ot4*3W*2TMk})u_$#8V7BT{QH?!x0@%6-R$d)YCu@A=cd`C}&el6s{0yq#>mO|JU&-V^6PxFpVB{+Bo(0#D!n zuyo6~9{UdNlVbr>AQ`+%?p9Y|_e-zk{u8`I56Mg1dQF@&&L>(o_8qv>S#)arXz}Tk zvEuE4Ibuh%Mq)Pfe=dxl&f)O`Zc;Avf~^ytWR$=jy(Iq*(IB;}sFTt~)P{FbBlWJG zk}2vn?<*WF2TNz$_qz`q-U$vrB8J0gx*bN-_(c_BBILrf6)z=;nX68Sg4HL)=0{#B z-SSJZMUMd=oB+W&l z+xr%Xzm2?2yx66K*Z^DNsgSC-1LZ8~LS)X(g_Us%^w!R_WKqzetEk^J;tIM`JEg0r z+q9=>k}*c4b-r748HQ=SK@4_3DTYjWN{n4_SWH-SM9g{Ml$iTKP|RH$OcHbMKPB$* zo)l|JUM}78M~A2PJuUi->Lrpp+hK{X3*7_V(iu(*psSF6vmTAbg4OfI+wZ)M+w}wE zoJDU=ogl8ST_wJ_XNnw=`_o&92OHX@M*l0Zgr?ey5bP@HM zsGgAYp*PrtrniolBNInu*Wnw1{*xki>eDjqCN4fAJP(}~3yWXFcam7J?lm$0!P8>Z z=2s4H(cs*7v8^f2GP9P<5QE0|7p_q`;?5a&h@$nY#VaSF$6EUiOmG&xGkucyVO^29 zR#Yf1O&%j&>(d=J;)Zw-mcM27YKciOE8hXL?qukWdG=ajJIuZ>ck3v|cjzv8%Pf+d zyNEhXvSbFe>NQui?Y&4YdpTovh!F+*L@|dk>0*>s}RGp12_XStZ0L zU)&IfU->FYJh0=OShC@Dv32)pMQXCM=t991MT&@hw|c3#jF+Qs>nC1=izhE;W{3lD z&i5Sj{BgJj^cIZE&mkN3E?g`cK$6x)LKLY6Mt{+$?Qnr(?AF0+gbP+JoOegfIV2Ml zdv*KX55)(UeikR+`c6Fa!sR5f{Nc0E)vt;JFT9~hO>q|e{hnzNQbg=~xN2}^!EAAH z+(_~Mh{59AkiO#Gq5Z{&qw~a<^Ja?caE0VT*N!?|E1Nj>t$oS$;{pcK*6}`i0A4)9&}-a?GYPV#)ebxH44Cnz}?Q`ee?G zSVqVS-q#;oEv^Bxt8nUnW#K*InsI=?{tP`oDc zCPFg7_%jed67ntEfKbI@*o3_yI&~YYlB#hgECvHai*7SShyKe&kC7#Er!jQ;Gvdy9 zEoAIm|Jr_a+Gd3%~4&SOX(ep$T!227@% zeVguCX@%>WzFPObUvy>J0-yji*2hudU||WAu1i`GdQ9iN_uiAVg2B^b{^B*Febyv# z>wx7VYvdLfZjXy$Gxo|k0M`V}@Oz7ni9OGrf>ULAn(Ui3qIIc1$+v0Fky?1}f!lKE zywWXGdlHePZ77N5#|ykBb@0o)Pm_ zKPT324~PSYgTBc#lPlcwk~Axv0r=+6pPPLZW2-WOjC;5cD7*0+os<15)6{p(4MqR7(tF`2M-7Ndpv9DhPGI z*mUO|zUGTs`@EMO75U3IY1!Yy*tou7t+>9C-uRi`Kgg2(iEu&xHjEzW>+})?VC6xr zJ?Q>`@31b#0l9!I`horxj{=>?y7^qsH}*aLehr^<3G~70g_`f*4>a&yS>>n>GJsK0 z*ZYmu;=!9zQej#v*4}Zuuldv6d|to9=Radqc<-N~)!g`?_#P>2T7{_K;V62eaih7Y$%p<;l8Sxuf>91{A>-%j>W9uSNe11+- z->)Cn_myv`SuvvIZteD-a7)OQP+jzg?RS6JYV&&le2#z5HB!a*VCXxD$2Sm*ufUZr zmcp92e6jeZ=srAF@muLZ&1amo-P;$gF%O1!9^4oi*)vOwhWB`QPwAB3~RLtAaOY^x8B={;f*?lD|Q+<_hgW%~@Unr2`vmb8d%iodeb8k0%RV9Yc z`B;k2S!nn9iygku&a=K?2&RvC?uX4ZL=RF5R9t8tGrutkf zV1{}<)n|v(jNxaR`kc!g6`tKL@a~gTpXW-F&-p`5-|D5!d?g3%zN)GmU;ayu3b#KY zp>FSf1I5OtUJ}z5uNA#|yL``olLl@8-3_4lU>#qd^EE3%WyM;f6cd4>wBiNFaJWS&!|Z8dERU2 zYZ7V*L8#+v=BvIvUz5T2IiF1N8K0*6@>fBy0`+_c4+dJ^x8>>o!ex9cXDloBiRapF z{g+Wud8kxtlha33y!YK-s+_*`f5J6nxUcW^o)y7zzt(!dh;ic0&wu+%h2lL&MK9mT zFFI6|zi?Q)1#YP1j=EbE`;Ut^KKms`>&?%96+=c&@Xg=S&FB1AN=4<7U0Q=d!|xOi zJaR~!{6t*|Shwd`MbWXJv|9a!42K|Y7f@Cd9dDScC$HabYH5zjzANWz7K_EW|Lwk5 zmiJjb|L9o_u1D|R-giee?NX-US)nBUqO^h*z6$!ir(4_>OL66!x@oVjHPqKz&GhQp zz|krCIeDbes!Fb(jcXsfqplSZ;!8xw*VzrtEqMIm$y_ZEtghK?iA-*rIiqAWRH3jM1; zEH&?~X8LPsj;4QtvFkP2qQ#QXWxPZxo-^F6TU|@;P+Vu2YM?Uf*<20Xxte)Hw&!*W zmr}u&U-vc*BbnTFdK(uStQfQB3K|&LZ*)Hc%CHkwiv^FDtX5s+4^6O|o+K?*L6pEJ z2RnLESF#~++zcjZ4U1luq!|<2WsphE7#$lZFhj2oWAs>#@!h1yc&sHF#Ok?6ksvGj zsm_2A#aN;&$9f^sb3=*FrxBt&k}szzQW)XCMx#fj&5WH&O5?3v3Am zu}|G$1rlHj<%LRtEiomjP`({3kN_*VmXiVj`N={EEl3|ofEBz;l>%ErL8OGyH>=PG z5?}=$fNY7oNrv5-VokQf2sNE{&Ea5dCLu*UJ2XcTkKQjinQ0W?EcB8Mv2s(%a#)H6 z7R!^6@|eEK$8ht04i>mVO#O>MaB)4Yg|%SAAoE0XJwwl{XP&92Icp5BmuZ2w`9zA=JU_2q zgq5Td^&blIOM?kQ&RI2^aFZpW@p3t*rDRUqZiQAX%@*J2T}xf{k_ztrL(WQ9ZNFPh zcVn%UEup~?%{0=qOk4WrFtxi{=*dliC89EGbPwz3jhWX#+f`>c@QXyw{JDYFwE>%b z__xL=oB}1rB)im=m{c}RnJuUeX3Ll8t*w2)s<*Y?%}PccHW@_!KrPvdK}t>5n$+|U z0w8?3N;|jGMFVqYGDOPafM_~&8L67c;tA-xCu^2=ZqO2s&`X8|Ki3R@vLvJ|*UhRz zeRNW;TM;Tt07516fKW0Jf)*$1BoD2e06|#L!5OS8CbPoss(dYsyW-KR4boO1B*&`q3QxE%_Et5JC$sxVSd#} zGi-RwtQxB&n_CuJlgxH0T0PBgW~XQ!F?9E&XwK@=q{H;5Xhvd~PHAUHSE7P+D5D^7 zYG%Z?ghrH8yZ_Ny<`k6SoVq$j#WKAn#L`(rv6Lxw{0m4aoM{rsk8U!Urn9D=U?w%u z5)xg@m1Dc*fl^n3nb$NYqG}0*7Dr0%dtA4`lECPXK@Q@m1}nN*aErFhX1LDjJ6dXv zRBS>5ECN#Ug{r2rrM4;6*gt&HPp{ zQ_4?LU}q~3@b*&zSSkVe2?Sc0JzHxlY-lJ7Fhq8-RPypu1h8a)0>n}Y$WIcmaa(Og zqJK?%YMg5esp0>GI)zHh1l1{6nkDI&8lEKT1QMZ6$p3e2C-^(Vv`5OavfU!#IaU>Ak40Zw%YvV~= z>wuAXlOjQ7IZfeM;#kc}z|HN&a5PAaQ}WiEFky%|CTK~GSNB8lRDSOW@pzZwL8WJ* ziU*cv@K&5P=5stqgjg6eVp#;cL7$Lz90>z7O@9Xnhc})>k`p+*K+&MGe6r$zrCI3& z4uuOjFGz$qI3J4TAm>k3k0ap+RTYV<4e=~ey8w$56bUM;Rx1`*nxQVhBE66!K_c8A zXJT2{Z_%pPP|9%}3{a%r*c8tpBNI3rAr4f!iWCf%W>qF|D453_NJMf-vHcWF!PDU{ zDS)0?)lGBQaPcuKH*4L^KHasw8GhOcxW}ojaS3gq-G4kJr&8B8bqX5V0ecI34{f4@ zHTcvegqvw^53N-ye!@A4j~HWA9W~5g4=pv7TUf$P5(?u{J*_DMJ5^j{>7Pi8< zfSTq`kg#EkJngjNhe~M5;6&k5Cr^P&TA0D)i<1HS%Pijp=UODd3MEUF0s~h zkSCZVzzX&(rNEXD85Il+mlMwyNq`mn23a5=M2;xH*<1$_V1-~0rNEY$lI+wf^nnCe zq4GC1O4t%REft)oKmx4b|3N9RCFG8jlmb#B0akFIRtjv%ARqkbv{~l>%D| z`+x%iuMBh`0amcn1j?4!2OMlFTS9hXjy;)tB)|$G;?9=1r=@}idpa&k zJg2iIq#~V0N|;Mlpro#DFg8xzD1res@#;nnF9>{f!}XY2AT0Fa&>P%moKA8P*rDa5 zhPJCkkW1GVRkv(|l?hJCGtJ-vYhnXx<+FUF6psEr)p{UsqMv5hQn8NvV?K`BSVy#g z>k;jUW|M#}T~D@xY~c7nY(t{~&tR>#mQBRj5%;6Y5q6Lr2#1w(3dedz z%&0$QiWLsmdN=KLUS3}}xZI@(x}PP2JLUjCYGi(v-9W$?p`FlD@ndw1Lwi)+02MQM zpVl}~FJF61OXYTk2tJ|YP+wkTF)ItT+X5vMY)&ne53;cTDJ6^`QNs4kw$55pI>xfz zXOt{rz`4A(3(m*`NnhYf`T?t7pykvZLBjy$ckHFwq44_o2h zhKysWtA%->4qP~yI9F?zO>T1-aQle!2#1H~6%GeZ)Zuw1I2Xh4ilW4&<(R7bUyca_ zwX!3j0B|jsC&K_AW5V#Fsv}Uq<&j~aCe}u583s^|&5aaDcWXl6$U;apo1~yZ0|0^0 zA{iRu`#(a{u?B`1H_~{Kt`(<7^fZhy;0Xs)!*nf!Vcd#_F_o56il*!Bm{3qFI}-}R z(Ttz0Edq&!a*#qjCLXU+JU}l1gBjC;ni#_WI>iH_@M3B7IOc;a>^-A|5hP03JqZUr zA7o+oStX1h0T{?&oSRq#y+gjJdTb3y*rdNQ?kF3vfrB^2ob!No(Po@e2WZ@4b;oy_ z5hz=$ZMWJmesN#O(-!PpK^=TjI`^3UUic0_=n5DV5D^i7C0m7D#{<463swc3LU~8v~^{g~}(% z0<|L*bXqFNojD1x1uxavlApqA$j-sA#woa-P!`w{M@jW2ZskdUEjS4vYzdGhCA1*V zkm4-({mKGcVoGR9?fprBEqJCW1-4{F_q6Od5?}@AETzDf&{>&FVM-*x3Lct<*b-Zi z=_)Od04vzDh!O#Xm=ao0C(lZN6?md!OBha>t*C&xWCaWAWP!2Kcv!^WOi#|HNs@N~ z{!+CI;30znM1|<2kN|Q{#B+tJzpF)n%l!9M-To2J^Y%wz3rnrMbU6P8N2AUaupYhi zp*GeLjm{M$U~nkh;RV@%{V`l`(5MOL3h$c16xi47eq8IG!!EE(!4h(b*8|FLj<1_s zl=&{t8Y(X-<6PQ5R`se+*d@=?;1ad6OL&yd8l+(UyU+t5LuU;LMrRGoh#4A%iXk)S z?ByKej>XO}<<_hGiekj2^D;61k{N~`1%}kh4DBJHptfH4F*@E=pQ}0o(bkKbSi2Ii zQ3X}wSN5o_7mBG}DFV>ei+TR9tyf>b=17Di18X;?8%K=u*Wj_iC8m7-K}g5)>xw0p z&Tmw`@>)z}sFi)Qe+yJ^9K=m2evFCCKUE!p0+r9>KB$VCSR1irWDv!F7!y;PlN%uv z4tOfC5jpL+q@Am#zIXJ?QSCXK+?~kHCi~94&c23d%(~IX&@u2a_x_;o9p2(Hx`ax*v4!5X|p za07zrhizUee!`^TBYvu*h8a4I+lx4f5Y^o%5!?b2+`<^f-NXweK*$;1OCoUefdx3GkpBv8{VKnZSP2|r1o zrs+osZefWKNw`tsB1&)zOBmcwC}Dpcc~A>Wa8IJ9nF|s&Y*Ck}<%id`v<}qEyrQ{M zRj)&y$(KR>VxTYbx+Mv)g7XVX4+6ptl*<(=cp6(9wpYhlKL1BmXG7f0GT=_!;E_OB z;fhiS8zKXK$*Adn8F1fF@@xo!<$5Uz;iXyK!y-FtWbUv1^0Djfi1CufpNx5 zgdIqLEf|-T0$U1^1*zbCOOKC{@xu|C8^-~Z=XYdSNd#-^CE->+|B+g zM*feKJlo;Clk)OfGYPN_uKTYJk z!Ur#_iJeBg#fa)!4v<6u|IOeI{QBnGFvmM>>ifxDmj9}jCy(GIFtiUgK-9{MSjq2j zRPH+Gyn|OHu^zn+qBhnM%?zH?n+1-Y({^Y!iR%0WJOqUuPw6S9_g(Gxq58$(8cZga4}W%~A>6x4pv9D!>y^(?rOjEdg(HAgimX?{LaZ*XiiT#d1zUxCmC zElJDa2yw(hpQ?y)Bss?1;W7OP*DD=n&Iek0YGsll%VmBwRj;b4$Y+{zpH8hDF=q|n zQTYLG8t`Luud(Z+b?P+Y}?VM+#dr*Aomm8O(3sh zm$a2y4m-#WTgYJ!gh6A+%_XG_I&L2S6t2c~p{sFJy6Y$!{>JQT`E*DQYGtx6I~WHQ;t&a?$9Je!$#i8URUi>9FKFGqMWF?Fskxg|#U6SL2EF5g4 zgb@U;?vCi969iWSK zSUvU~USr3|;&r-i=Jo4ZTPs{>59?3cND4IC}z66RUO}EfG4%@AM`hi%-L6-ZE`xCd~*k9bwyrj8# zIMRw0l1m)im^7~mn1|dMDtuh}(^cKuo;$U2ISfu}<)F)>a7*s)qnGu&HJhwLaFeYd zXToi{w7?QwhnWRY19qF92iKzUR6(9uG4tp(RIVwsIvF@|z;H+JT5#gn#Fy|cN461>h^+Ckuh9*T9WCH~bY(r*n z`s+w$%1i}?HFM-q?Wt0i-Tb|w?ziFZX-t13{Za=%by8@m+Df=+Xn0O+lxK!Ukba3% zV?2Igw7GdEMQ?7^@~tK=w5DrewVL&nCZCyva5Ex*;(}kKj{Ix}+c7Oz&X}U=%s>jm zf1*LG9?P+woAelu^(^vt0ug)eA`)apKh+tK6-5L5fk8x(IjYD##r@39y25s#5S0kU_nLK~xvDNq`l+RA)=>Xa%{Wk5ee0tt_x5q=E@;U{vIJ z6$!8fcUPiBKu9I5;K5Tp5@3aLs_~@QRuT*iyLT!U`n73U;cqC4-#yqkcN{952ELK6J=BxJyk zPg)kf#R7HrC0TC`joEbI3vFD;W@W!62dlR=&l0d-aM2pp8x1?DXP$1zq zH{X)mJnhyfn5VhHRlb%#w#`#0%n z*57B%HLF_dP0Xn+^)4+6cDy8i+lEYb|1Jc&ITg%tX)!yWt=6d2WjG4wtDwmZB}NYu z3cvi-Ejm+Nw-1D0IK6>z_;NtKAw{th!1gBhzNl_qUv6udn8S69YD2TAmEItsxAn{F z_%=^3)tgLzEouPVEQ~0rY^eF!VD+u>vk&|tw<=c~{3^?{bve~qa;hCatm2&9l29-4C4*O~vxs8)sad@-`gv(7 z346kUKQ4s8$mD{QEY03?wCv2Qo=C)la41M%4DNqTfwL=DpLfqS-M8v_t;=dez|Z`t z!2eC)SmGN@1)K24y3bv&sk?FFV0b9qR&4 zm1RUM_4zAHAbmsT@z|qmnVGnMP;kt!>@#Gd4F)DnSTt{+cwFa5OMTLa`a~f-)9Io>Z(%uSjvUpQTB4IMR^1~ zeIxUg*aK{usaXE4pqOI8H41kV^Qm0DbCcpp5h_i{Q#E;**K@(sldAfEo_?!OwzJMIMJ4`PuSDU57UXLM{a z_aGvdj@6r*t;XoiCb?fKcpPv}>U?|_0mNnA7=ZsU4xZo`-l8dZHd|PZ@Sl$X;weNN zk$;U1$>6&H`J-55Mq=a;Ba_9l3PNsT{_QTv+On@+3C|R-$HF%o3-A|X;TewMgF2n* zl9`LgC@v83FC)kg$0GlX$REcdGZG{FtqPef?tBfAp)Vcgs&SAi313Ix$Hv0HI}YIg z5ev_74DYomcs6_X48r#tk2xL{l3QYt_l^hTOR>m|#K^|Gl!WBKjkkz+vU%$Sy?c|h zmm|cl(P*Y2w0Z)-Uyg-mIEJ^pr{LM_*g~O(P*d}(HoCK2;pxcPKu@S#{E49Z4a zA1Jrj_|-L{&5jOwbJI-MI}R)$r*IJ5_*Kn-2WXG^h4d!!U*!4%oJ3VBRQKO#W^8$N zT`UilU>^SWC&_0Ss5`^%c6tszro!G8e#%nTPS496yFOMQNxFv|L|gSHy7& z5`NI^x3oql=x|5YrdW7{gB@|Q6}X$80dPCwS_eHV?6(u1Ta#I~IaY`Jizyi&DoWh1 z7fT^YV5X0~xtHVl`NTHQb*l4Mb8t%$f{7 z95-XtSd7(N|4?cOXF6x-Q_Rv%;D7lHJtHIikyu@pWnJTv(nU=4znR&`t@k&_PSFk1 z?*@RKkH!M90s~k+RR9RA0G3V%0OwQyxHugE5_ZJ`umS^w2mpZ7SXZ_t!=%g!E}Z;p`K!5Uj!w?#~qjLSv`9wPxn$)AV5(Sx?0( zvLGwEzEFw?XjTr^)6BU&^&T*3m^b=^|CK$#c-hmj7_7q>#+M2MvDI`kuvgS{Qrt_= z%ShQ9i@`dKVfjj7AhyCt&5puwX9Gs@v#}Vg!x$mLKx~EaV-$vVNyT$)4!CrqEEbAY z87g>1(Loam>Re6~9eZz}Q?Nf4gLN3g|FyzEY=!Z3?+AwGQFIde0G*4^#X_+vLwUbZ zP-sFyt?UzlGL1=kqWM-IeLzO;!B`+xWFYrd1%w6^(CEGqAXxKc(jM;%oQ@xgg<@5P za(%0y(1aNprr%@4GanqGmvlHAtHn~RW%-4?1anC4V28J3 z6F!N5V7E7^K@K|C>@kAZ6ytNHFtmtQJeL zmiKq1g=nV#4lwgxtO5(L0$$9QyC5)!yqcLiM(JA`ydSHDQgU+x@QTdb(RxYC3lS-J zgr|jX2k^K5@^7OXXzJU4X;=p_3m@m(22zi|3zz}-qTs89HasZ5DwxD-xgS2Sn`N{0 zZRXl9tbOr!pX1sTE~qK*FyJkgu>j3?AVRQ1K~w5Zg!$_|`iSm+sIwg3p

UBwwt* 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≉17K6wP`!jpI&y2qkim7JZNw9FP`#kY>lZAid*- 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 z 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%0DjZycYF)9jwli&>xDLPo#gm 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 z zhR}%V)-o01LZ!?bwRSVV51#hW_;$=l37Zw{kS%v#I@wy$nn6-ypVfstaK_CrQK655 zt%tqaVse))5|sRr_!PXzy;Lh`e{q`N=unPkb_7ZYWkm}HoTDQ?r64lv<-ZWo#YY(iOAGORq0jM7HG`ZcO*w!q9~ zmcX!Y!SYrmBnH#3O`|CKl3$;~OTQ+wk_Vd39w?XYm<;1OLUNj=9XWhol`HQ_*KG%7 zj$)UmTVBO?<=@;Tf*K3-phCikFn!rV3glKvLSpUGeVKwyA3V>_yy995MZ_rGw$r#r zFCDVf90<98v|Y_Y{d+`Na8?t=6IQ>4?9Dr)NW&r4L=PS%0i#8RN|Vk!h{5ZWF5i;%(HN6$?UrQOmazf_g3}el; zAbARdWH<@K*c_dqQ8EdFeD=su=px;r4tZv})`91aUt!De-MdYRYbIKf4@oDpc!uCD zLJ^lerS@(UhpF1+XzQnhW_xp;DI+xI0t26%&-};g~?Kw5Eq28nW{d#h)$AfMZqh=TkuNZyx`5YilNZ~ib%{HF@K5}nY!(VNiX7(InEL?&7{I~O-04h>x5*Ls1xROsS}W@R3|8_ zSvf4{iKtTCW9jcWC_2$%f;Y+))zE~otLrjiw@sTA!A`Kn2stB@qU7a7+F?g{BTUY> zjr8cc2qvC~okkO(V6L=1j5Sc|CCQrv!*(NMmukq5WHvh_|wHcs!B^kKv9x9eDHdq6^Enu5R09(dIDSs(me8y42i5cM$ zLOHQ*yjEylh+nys<3+(m8HvQ53YBq5Y+uGAuJX@$Cv=xtIM3Br%Xk;^m2slFh-AA` z0kWM&eK>aU-R0=nEA5i z&xn=bv*^yO*EgPXip?*QJp}(ZD2(mA~>G{dckS37-eDtLpibum3>8|gw0P%aVF*n%`zrp zj?l#%-y+b5b)4hY<8w|t(KMtK^77i4MjqeBoQX>P=elxK5GhZW8S;yVugq`e)Kpo+ zNMu*=$X*BH$=MhUUBadns0`#ThM8hvis)K~F(rbJ?$fEgM zKkZ@&^au9&z!s5CJ(Pj^Q+HZDR|fp_7vf3gS%whDWi!nV*m$+|R!dXXpppqZCq zmsixtT5THhNQz8BJ5vJS$Wc%Uz^9?X)*(gI>Eo|A>)3k-+0>ZiJJ08vh78dXUC( zm|X(;Qzkt2cMqZoIKwFt$fWXPcT_aFSSG-e(h2*n>jmk4na#m9#E}1J0Y~znTQ-Ea zQH9H1DOl&ypQGHg`4>}k%UAIFH{LkQV0i&ktk_cJD>qTl$>8Z-FM>R2!09ER>8Db- z){-ImP&|>5LitS|<61|)ylifgo#RYLKzyAtl6b+|lV`=ftF(c1G}Mw%3u&E~l0K$V zELvAH7#dTzGqLT3To+workXt0&efYXY~66dny%Grx31aJwSLW(HI^Ofg;7h+9#=5e zsF9F<-G$+l$*57MfcP|6LRo1%VSrUwRu}jB)YTgoRc$ONB_N8PpW4cg`u|BIj?!42 zso1D#pjDdJMQdD^)O3B3hdAeG2-5_k8$F433cK9nc)EA6dtY}d(HdJexI@qSaxf!F zCKW0!8@3F)4->73*N~`H>P*Y3u(sQ)sJ^b{QQ1gWx+Vtn`yvzx;!BP=hPnaMq@!G4 z__`a(JZKW3*d}jUOY*xWKo&{F0mE)F{pd7nRPXj89Z6c+)}DdWR^~y*ahkjeitYI; zt3zTSS9`eYl>(6My;@Ej5Ito9qt4fRwtZMw;8w-7$Lye^Zj$*gSkGzQ?sJ%+`5a(+ zFp|m*5cWf?Be|6|>m07N#C4GwldzvsN{PEQaHcpU`?o2mF#SQ6+4*Frtxh7MZdOdnXRUy-r!;{&&$kWQ+W!6?r7hOjgeYcH7wbi`Q zul23X`!OB=QJ~2^5dGb}ZPDaK?%B%&6Mi6L5|G-gM={UT-QwhQT}P%h4_T>Jl9jry zrqm#rE)q^dS~wu_wRvCgS~WbYfyIgD2&jh_&1Pt|j;x?ZkE)+ZYpR@Qp$MA>!+jGn zZeTM7hMQ0Fxu5*wi;t)Upy_ei=~BZG0rz*da$%KJ54ALnGD4f)4a1&eZLi-RpX&}< z{CeLcQ?r-L>kMJ$u@scG&&paZrp4d2nqq10Cg zgrvY6HTfpshPi3UBMf>g9P9{ONe+Dtvy-W<;0==1z{ZQl2{>Dg$SeK zcj*yudJ-S6xa?&w#BvK1q2hy*l_5s>Djf4>CYmYSD-nlBvb8j_hhsHgHsWitZehT81k-PitlpkM6D%1o ztO2Cgo%+fVHC8i{X+3s^k>qU0wSsJ0@x6?1m}J*867V}$$9#jJ6)W8Ze}GVmPC0Z8 zo!Inc5%}(&?xX}zvQ`o=X~cfp>WeRrweQ>JWdST(np`m5%bpF*n~C%hnt_#2r!Y_` zpQDv$LWaqKxHA?}R8>AWSO3PcgoXII- z?P}O)ufD|-FPD?Smdu|`G!FC0cuKqISQSH08x1)r}y!6p4M^aI1PA!usTa8Z?_na*-Hn0*;V;ygAqHMua?}Vv>5?4 zo|6h039`Y;j)cAg1nU8YDz%WdFth@%H?1K%9VRS9lBvMTI z@-U@CY-igclUjWev*LM-cUDZE`9=EZP(_tfhMV*SB|~6Ga$vNFM`MQEhvKu%j!5Yy z3RRpyu%)jXs7GM~GOvF=D)%CjmCmRUD{h;Woz)Ny#iTh@z89rb{^}vfl+9Lr*4t#S z%A?|Bf2}H3XnZ){w_kH8jA1}UQ%>QANDf)b>6I$A8K=^SPwdxTU<<*%{1gTiH`Qg( z%Q2jXcpI%aEu58lwNYRt#8gP5gAOo)ujQxAkoVzK4`=9E@thmc`g2YobHSIVkAZrK zvr5{3{UXw_(SW5bT%~Y{jECvmCTinGS&`V}ELVK*5cw|4+EL6fEEu`lg`!ZBq^TkE zq`It;f`MA=IXZ8s{=g2omEoAYswH$GyJBS7pmB+5QnAR(!RYsN+%|G&>>xMS30c52 zayq-jPGO?4^rDm{uT7q>4#Oz9J(I*TsXDEE-QUw}^BmLom(hO#9X^DVT!vVL2pf_tpuCe1mur*ey1x z?3t9CHM0QvNLPOyQ4w*C&&m|Ws3X;8g zT{J_wCV6Ze{Wc@K`!OO3}+3Q^X*V z_OB$zQ>J1WgHw#;l(G%|JPRmNnk+2J_~I3I$`4w=?C}&Hv;0OCvMUNPYH+u_)$H=f&AV z?=hOPku9Xp5(yggas!<>LfHejt8^#tcqQZ1c8%h>O@m}FCzCxaficpowxg0fUa0sb zG&C(cURK9MF1%r?%V0@SWHjz(Z>S9h95^(KSo^F;BFK4+k3wZ)BOdnoI|m(Q z^n4r9l{+PzGM9CdH1Ij4O3v+_mV9g|eB+0E7I-vkITS*#KBN9U!rF0O^zcGb&&26E zT%){em@>OgB$g#GTgZNF%x+)EjEn7IgbW@>*2$vfO?~(;efLu)tk_lbX4p11y_(@f zKZ3cZI8OF%PzpjKz1cn!rN(9zmiZ#kGPoM+$m3?iD~axSY>WSvM;)7ny&{NJM4 z0m@^E$}n}-8pe`>(U$?1*mcZC zy+%}_Ocu+*DqwdFCiB)62<38g(YEF9F_XkI!*CU(@7eB};Dsc2-C<;$j5XC0P2;%5 zK~&FmN8Nssi5N`7Tod2*-DQ3XbA^;Tr5+li(M)19m2F^FW>2cat&&W zbeHHAqG@Go`)2NC-{f_EHp9KyFmk)}5iFa-xxqP^cM^p%>px>7dKN!~RWBum%KOu5 zCvv8k<6py+=mpZtTy)_X??qyb_2xvTS!G8eE~vOqQ$5T_jB)t^p%7`INjhS5E!D9h zKD4pln7fQn=qfK;jz(4^Hdeq<7@M)~<_tQfqwgO5>49{Oa{e73&>!9Y+ONrgh3FrE zvo&A$2()2rk3C!EqnE6%XgZXK416XiW9a0I2L;a4_Uvp%+!z{l-6Xm)n<|BbP;j=O zB)+j3?_|{tDj2&KZ7WE()Mt@KQxBf9uL$G_F({_wz!@dS`cX@JitQWvsEOIC(RX(@7S8m42g`e05;NB!FOEY>meUHgq6kZj@EgK0&;HisTG7y8Cdsm4E8J&V;cL^>Ag zEM-NAyRvHu&u@eix~4(A{dR_NhPO+ri3nDV_DJ?{b7LI=v*hl!(u&w@8N^uG)}B(0 zxxfrNa-NMOseElrMz8z$wk@{?kelpF8Q^RoZ#}xs(7Qgi{uF#+B%$}p5C@W zp|cQc&>Psm%9$0gff~(BjoGBZS;)2aSbb*HP6Qh?XC|7DJLf2?km}pQj4j}CZe}sS zFZFG7+i|H8n>iaeKW7;oBG&BmvoTv-C_+G2bari#G2a3rv?W8HAyy--mg$mq^i*Qi z&9L1LEP-xGdi5!4$~9~o9$?qqBm&t^_G?)qmbe3Uq_0=r(BVSH4MPaTN}gD=^`^xf zdfMT@Mut0BQQMjEMSob=u}!#^$=xwBh!#DEO=(vnpx-`lX=l2j>*;_%w6Y6w+URO& z;RMs^j}KdPf6U9CP>PYdtJCGPOs3GrP3L(Cb3%Lf1n-0k`2}ScHrt!PQb0B>6`@ta z5)TgR)}zuIdN!QfArmn;ut~=Iz}2>D*Xe0raCfY63oOc3Y1HiCBpoyI2r=G9-Bd?+ z=O7|V57n$3JvXYt+c5OB!SQyQRuB1z5vGenC&$q~Pm&E}0q5Zx(a#9mIqWTKOI3~4 z3meczDwLSqRHQtlYg_GM{o3}VGay&jI&CoaXYGZ?!jb~|E|j9a_26T`uyaLH|Y2ROFXKk?n$8aDBB(DM!E-A8x2nw^Ql@U zOvxgy1v9dLqnXyskgFLb=tQUKOr;FgnngwT*LQ9wEcYi*A%Rb;R$0JsLSj?M{Gyq@zB6wy*J><@6f00MXYAccz`%mM^ zP{+=WzObGxnJ23d;!ZbDMJ6L-?ecrNlPWM2cj3L!n6FlEDi8_q4_5)CQhj6!Y2?qjM;=-Fad z)1q-j>_&0Uup?z`Cz8flIHufoS*0qar=a2SnNiyZhTFTRipBV*QN&R2UaMsh*#_4+ z3+d!S>!cVJVk}*c8EwR1ZEwp+@ATtEy^GP!KxR3z&8*G4i?OUV(xNINJEY!QL{N3x zd5SoCcNWfjku9nik?B+?WW{egM^H@~D@OOF(>V*DH%e5ekiv+| zmPm$ut!(1mn)b#q+a@#-TX_2Iq)t1Kg|p!~3iefJBiozSa<&TF?XN{=^=sY5D20_c zzOE15r3pB(Rx^Zel--l0kTNroNAuOaK_?SLkDXK#;-Q*G(wN6wgFY9^_t5u^8<22v zB?gC|2Y0n2J8I{0WIVLV4EVqBpeodBCIVTOfND+ zQ7()EGY_S`JYw|stm|mohwyX%-Lbg>2Qw;pzq;0Gxr32dS`i zc95@OjlhgF7OgnjDJp{u1gP%k*n^Lq*M?#VX9dNDh*(5+A%OOOtU^`fui z(qg>N*OZRxY#Jt+se=!7aOK^oUW80YQVc9*wN{TOOBmbB3_T8~+8OVJiy2r9BQ3MA zYPNCQbwgaRFe_+w@rQ1im2LSPI?iS(yL7_857VL9#!xJ_oYoE`IwJddD!MrHiS-7D zt0Na4ZLt>vCgX7DmcDW3vB%rW)|U}eODT+pWq56z9PylrZsF?*>^qNDM6*fBE3foUV0bind^ zZ=dFhCt}I+od8R3&b0H8-#Ubn1+O_1UtkFeftI$VTL(95U!LIxNH!0?xf-7lupI$_ z>}^d<&j^4AFl~2f{muxoZk~b5s_E+~FWGtDR7rIO4>Qu{NRuPR4}4K5)wNnOY0eSw z0eO_wvg?yl){kPFrYzUod$e+4;``MzYcW3?&(&GA%4ObL%-KcXTkJ#EARe>-A8If& z=DpWoX6$kew1iy!YI)nCdc1y|*`?NxS1!-Rfrn`1jKJ9?%!p9Vy4Cg++vX10l6p~Q z7gINo?XbSDCGh&ao8bBm>oX5h}m({aV}dXopz~&yeBJWRulxT z=w>*rJ#?(j0Uq%%^AV};GE)Wjk|XkMZ38n#b5_9}e9d}b*kYYln4I?(5Bd0^tJuO; z)}!kOms7Cw96IjSfl)4LbWwUQkvc{Or}yZqxyfqbq4QhE`48%>2;=vXV+%%fO<(6; z;w)=(ZuDNGWDkt=zW{Ag1H9af-%P%OBeaj2Y4&wsx%tIb9-V zr|@k%W?~9{bJ{+O+<-f6nnTNG9A0ps*II3Tnw`|G`kBuwt>$gp9@@9`?UF{0t_jy* zAOy)hH);|O3Dd%$Azt<;qH(ZH)GqN%3D03v-)b!3A~RLO84W05?BG|zsPZL*9U4m* zKbnr-Voc zxe`*R$P%Ix``SIoIZH?rx6j777=C^Cz?hAT#d0ZOWT}}JenV4A+p>MVv5rwFRt(En z>=;Kpjme7Y#ATXbhp2nFnBGJzOpIv6TLPC>nOIjIK9NhYjgij;WOai!n7Z|@a#wOy zFbD%&N?>PU^i@holYEU24An(uCmV)yZ#lF499l|gq^_?{LyYopf+)w9g_nWdGmyyh z_Lrh<-Zirm4HN9IGrl`8Tvtlt3) ziEi3Wo>xk-qi?XcgwWFQZLV*u6tGE0#lcxUtcrB@T{62aoz$TPb($cD?HO^=)T^7_ zqxJQA88eE-jzGd>Q&i`@467>pS+#`bX30}@9@RC<+91yyE#O=ov(RG}GcuR6VsD3^kQSaQP{_n|AfyO4D_~vA>RCuXf6YQi8Q07# zObk6MvUqFPY?&35Q9$U0|OTX*k=8 zGES$A@;PBSwf1v*={D!q{UbZiA5Tu3aqbhJ)`voi^F6KY9jzlnJ)M0zP&3O^A8~KH zcupZVm+^dQt&LAOns*&G|9u#?A`couSyqwQ3MIkvD3%XLXbFfd)DV2$l0%UqBPK^U zgdPdSnZBlB+pH_sj1j^7*=WEInn>BOOf$Qh;5TW%Sw6|5{0ZyaJDsBELk_;xE$64O z7QRgBLrxf5)c|&?_5MGFuj}R+Vdl|wKq1g&aIwJcBP1OeNO9XI$C3H)$R`HtV4U3T z-Fx_~h5|T2@pNK!vUys-X~jE(4ntnRQ%w^NwV54}=}_|IS#}_5;Uh$PSCu1mW-bJf zmBQG6^{Fm7p_jJBJ9^{!o$Lw1~8JHVODa2xdTUDMfD za`S1&$UGU9&oFU2$o#ed@&u94D>%t}Q6L)Q@q%q}G;o_tCHs!ZJ?{19VGw(&4ID_!frm~@AVO;mQR(}SEvVW4IONY%ZJIpmV>>y_z#^P??A6Z6;sXft9y5v_kZhok{*&u4^}@#cDv>EZDa^ zmX#Sdb-G(l-#6iL>V|1V4jIgnNA`g@0>xXaXDQ<>G;4AFV86*o?0>Nh)_^RVIwMn# zz+(iT_oZ@>-RU-^JV=(1Ee{ps*%e1L&5(LMkr+~?FxIU(wjvqg&PUcQpQFG3PGZ)r6%NIg-vfuAK(9&n3YdN&&tE`h4g8< zz_ZEhc=E?c>Or-Xg>a5qQplh#SW>Tmv1k;B=cdaA1M`hZ*j^cmIu9l zuCdQ-K{=Vs8dboR22AAH&B6O3+A!?9iFasxa0Bzo9P^bui;;D%0Ksr6U(vemv2_EN z4wd)4Hf~mDV>3Q%c97(WSu4`en~>3j@Xn)bkG2I&S%*DC)H-ywcwo@ohjhHVs47w;8bzUvIN9HoU zDAylzCbfVtwKGjUi|LWfY2rDTE7=uk&dF+vFy(C%YUFRGwsObi>f077`92e9oX#15 zF*T~~SIp_jl3%@wFy|Q80=EpT8fio{0$DVlf38~}Uo3@f`yzJTs28|y)R#)~d2sSY z8L3rmdqj40d7Lh(4xp%*`LlvSnNZB^hV*r1c;10xO~db!Gi2eQ>b#5!%R;rwOIC$e zSm2IiQnpmatP4|TlsuG>r|syU*0*M}y!`H9y0d#X>lZao*My5$)1O=3CXyyn03X7f z+|}obb~Y0V&Zs%+8LXe~W%g!tZ1b3ov9^DjMxv(9@-~_#(>59(qcqaND^KXvQagkk z>>tvc!uH#cT81*Ni|U|E8Ypb3>{_OpkJMsH7ap1d4NPW=^PP>_sKCy$`KRMhj~f zQakDA`!>Vf1A{J1S4O7XN(3{H`}mQbuw!7fk7uyxf$-kL99dh~#r+#4idfOK7A}D6LwB zW-3&qPUc7 z%84X)E2rY|1~L}p9VU2e(FZEb#oSL8&9Z5!xSRDg3X1{%su?|&wcW7mq}f$Q=~=mj z@wPhO5hD4~gX+QV=^UR{%B%pJ<{4IXVPrjH99fZ?7*?9KN`%7Ix!7+d=n}#SNuT)6 z0+#o9h)V1gDX-TQ&oLsbvB^SOh!NZULz~U81Dk{bBB{2r<^*qg$_n{W#mB8ESWAnafU^C12NOE`L)*1@jb?TeUJuq|H%Q z(_|&ZBCSbZ3P7#_)zUs`hen=d4({F5oos>!mBE2Co1e*VZM8|5Fd_xBu_&+Qrj@N^ zcq_YBlCG32{~I#z%50*=e2uG=A>>`l2K0Bi|253%yD`o+arzX$_GH($D|=if)^=H& z9Z-XFRnF|%BJ@L2aMc#adrWsHBICZS>4gk@6&tU$p-uP#B5k`f(6&vAV$HzkvZ)J@ zRnG`?p;MiJ`jVD95k12?{{5ktxFNw(e;RbgT12+jOo2<}S!w}ho(Wenx#u&YB`Z84U$0&$iaey2RdUl6)o+2lehJ#VT^R0#|cb)p&O}P`R?Q zG#qF;NZh7|+ro*|>GrTO%%9&}8$App@%pK2)8S3wB1*WeN}b7nJ^yROT^Oz*$BxQ8 z@?U)X)yE&ew~EqkqTQpRxpE`@(Mbhcr z!fmvvqjHcIPw^YVos@V>XsX;^nP0gY%uR%kRxZM|zH$TM8mHz;Q&>tHD6cw?7A_>u z^|V_576TgTj@rW7PIF&Lxc_USZ${~@tCWw$Tt$DVFIN%aD#}?{?WkNsk1eECOZmId z`s)BCT|}#xQ3hA=dj+#?%6|11YwhMvapcozINsgzE2iekC^<6w7|nV7y^XqD1zb&O zO<*)e^C){2!*M({(^?7@tt^GqJT1Nov1;UY5u-UpuUt*f-9o+e_WEa=M9Cb9=a|Ni$$2Bi2Ny+P5CpjaJ4rlzV_M{qF#-9=tqT;k-J$W^e`%)V>!k7yyRYzLP4}GG3a+hYw ze0r)`Jsp~A>S6z{7&UTGP5bHRX8yO)Cnpl~cwk=GIj5s?(VVF{4=1FFm{n`nLjG#) zYSn8*D&eMvtHRO-GOOLxa7)A84L95WgZ#Y(Xkr!IQoF%wwTcp!lCDM{cGTA6TgCrc zZIw!69xe_yP>S-b0yV3JD2~Qj82?{(soo1?j65X8RWADPA!@5!$?vqfLLbx!@xPj1 z`mcPOsgpvKLTzp0SAO;8?H1=Y>+wMCcbZ>wYA17wf3$l(G-oCM=hMo?)beIpd~<^W z^=~2Tfa>tO6JH0vH<5B`PV+JSl(djirkFoUeS^)$W_r&5UrBBq#5rKOEM_d0)>Pw# z;b6lJ4b99p)m5e5I4^`7D_)xR2(9Xy43HN7TR{R ztq#^7Yf6+^W!}xYQXAN%@Xrs6n>w0S5_*lL?X0j?E{zJdD za7+;S5;R8qT(C{y*l+}K55s*pa0DP)dL(cZa5SLRa13xPe~;t;9E(3M#t%j#j^VH8 z)0E+BVXmb;!Fr~NJe$a~i9DOg=>+PgaznTe{~OF*4fn<0%wN^yez@+B>jA)t_=H&i zoJ5=l0t?Au5x*w`r;z4B#CtIC5b}B`DdzzTfRl)~*y2{h!-%^CI2Cv}aUTIZk`f*T zETxpWzyd&JoJRS}NT)Q*iFZ07bBT8b_%r!k0jwnES%j$`kET|dFJ}Xf0UisSLoFM? zKaLoyXu)dIsHYYHC*f|P_N~;ujr41*jy1}wg|)ysK)lcf;PJq@w0$Ef+ex>H^qXlh zb0C~Ys}G~qTWEDB`D`W6ZIr5dH&>z5B>srEGJbX zv7Q8Uk>(8=7^Lfc=;=)Vly%PIR6z$<}Q0apXB23`Za7I+=-df*Mf8!6)&@@&Ta zCg9D$TY$F$*8*&jA$a?KUn;=;g5v>iFkJce+HE9FRZ{S zc=gF$%-G{ti3iJL7{0skH^8PpF{KwiJ!ad;r3;YkD(_moN z(f8+4{<-9LF8Q4ks+EnQp~7md_`18N; zyB1C*{=)%}vyD{M@Cf2O5_lA_w6dM{?Fgq4SL0ZN3aY$iq*)G}4xB-}Gl3PA^R2v< zhMNmbn+r`-x(k@~4+v+`w$sSt(ZoF)_hW#^;uZ}#hy2y|k0b4>%7u*Eh4j;f^ppDM zg0PynEr9pa+|XKi0&(E8!L6Ym*H)ew){(XqXe1wR|C6ZuTz33a_s#4bo5^=`oHI`d z8<;bXuXKfTD^Cg=iFYc{Zuxk<5JQB`!11)BgWuEmJ&$nF=`H+rRxTnx2hHoPmDOPz zd1xMQC;k#}JFJW}59fxRq&pwD0Jso%0`NrONq~=aHFVK07m>c3-v`orJ+TdYDQg$) z?X7e(4&9X9OaWNI_T+Vcze%2|t3o_5h2ho7&NVyB`>+>|*?P5r3EE zbuoGDwR}Ptl| zra#81{{($EiF+TgpY<_iZK#H6%DR-kcrtPKGK;E4zxu*cDrYgC^TJcX-vw>Etg?qy z+Z-;hoC)-)$$kTmZ*7T0fhx=Kxm% z&jp?bJRf)g&`0v6ws%!+-^Vuf68*F3P_ixQqPWP2BfX z)W?I=ZIF0_#M2%>gntPC5dHy9^uzdv@ejv*PGRIm!h1=(5w7KZl>dI<1Az935AypV z>iA*mdL!@={LC2g(EQgrsD+PK#=vRrRl~;!|2Xi8$~bYxDQDcu`DA5+c{zc90)L_d zA$+Pb$$FUxH&s@IPm|X{_zQ3s@K@k( zwCnG{KY+V|e}elLY5&b$`X7Gpp}zkG{s)9AG60}jof{hXtpRgzHv)5kCj5&i?=akl z14jV!z#R!31sq-FKMafjqrfHL#`qoQcLJEiy^r7hz!WeITnaoH{8RXSDsUNaIsPkvrvXm~ zo&h`){ImFdHt-zWSMvK@exCJ&$lz+wZwT_^##z57m&{jjF!E<`a;TkA^sPd{{V3`U#_dZ zh*NpK54@w=9NtO(2Y`10*8}ec-a|R!DQ@8RSX;-w_lussm++&&y^lQK4}1Xs2Z0X( zAFjR_S$zl}sa_R6T73z$kaG}ue4M%a3E-2!BJ$8V=TqQss=gH3{!;4sQtEkG_;mGU z;WO2jhtF1D5k5z_=!oj^dE9@1Hi+N*LiLsGGb_RuDd%SJUjn`id#;dH) zzYhKzz%9Txfp1l>4yR^);PQ-bTN-F4;ok+m2Yeqm2;2(%0Qe#BBjCrtPbmARz-@rq z@-uKh2Yvzk68IJHYv4D)?Z9t=-vPe|?g0J({1NyQa3}ERs?H!Q!e6Sd4tLSMzcMa= zqyPS1eHHuaYmiC2HvEHlcLVT_qo9Hfaf>7Exdr=7XmK=UJP6XyrkiP$wftX!~?#Ry1fki z%Yjz_uLNGza0U0TM}${5T*nLu;WZ8Ku-}uB0?h#y04KqHHW&>G;k6C#Lelvz@b3bz zvv@j(hwwV`e?4tFk@frr+;0RVN4SP^-qfHxkU!ymOT+b~yq-L+Cyy23t;D+){M$(T zc0l8%GwT6x&!0`@OuM! zz1Q+XhQ;su30E2Skn{5@?`38wJ@W$G2MGIM%;!V=ei+bs=SIRm0(=zsSi}3+cT^YE zPjz`e^IUnhmdJIqqv4K1g~`r+M&ktMi8nIQ9y|eHfg} zg(TY%?fq`$M#dcClmxL>5)&jB|#e3H4D>W-|B zurE{BuK?wKR(YRd4J+;ni-%kEo}%wkdP+u`Keif{_> zAmG6@(bDgPht!@H9$NcuSWFt1{j0tqJdC{WqJB%jp9(yjvL8X2j|3itTW7VU;7aqN5bY3w+pxkca7VCZu;zS`lpBX?xL)rhFilY zE4RV}+!}iEYyN7V@2l+yyK6rn&sx}1`(fw@1_-|x*jsB3gGvhw*M5X#>>zu7I$!)C zjDWX%Y>d?JA&df-SRGb`F@DFb&Oe6ky3EDtG-o@~P6GRY{lFA)r-93Dzx_$LwDwcm zqn}KD;0D4|i1Sq7GT?IHirQ`AX~cPY?Pt)N!^1ObhlghZ&jOweJg4?^Zc~2F9RE3U z{1@TM+ArD1*M{fT#Gn2uJdd_LpL||GnUb@=kbcrScoDxZ2Cf2LLb&+em-72E;N?KN zk9$S!*Ws0GhV@4eIM9Ta;@CC~GBB1^FX6pYX;LE^Qzf-v+(|d>8m0^%0%n)_BZ1G77!0By7D{VE4Y8puj+OOaC7ZX?BOB&finIG z{0X>|a+iTXc~--X~70Vm@=h2IAO z4+b6rTuv7Vv1`Z2X$zkKy;Rz&XIYX-^y4a}>3{O$*)$X9ZLX?`yS zo(xD9@D$QN6}Sxl<-ird(}1VXd3JaPzt04o1w0#g4*6UOJQsK#@ONsiAMn2sxCY#tfH%+iJ9Jj_ z{2$>hb40&>9o|a%Yl-tVe%}rp0ImbxL44gUucv*wS9>Qoo#)=g@AbgDN%J0lZvfs) z+(biH(8uosM9<&P?-$t5Kfvz?iGO|NZuX*7eqQeN7N-1szDlO~cHAE#-+x#B$-4e0 zwBeu72JIJ4b3aV@jfCqC;v=O0DDW}h<5m~Zlz)X!%=tI_)4xgkZ_>Uee3CSuBD|Sf zY~54dM10-Xewtscna|Lc&jO#L?>;~09@3`0p0fq`FA{HA<-hQn{|h(c{t|hef?M~v ziN8|3x6)^l^)IGw;)T8p?km7ofv;Kp{);RD(Jf_veU4gNsVo50zHboci@+_^)z25z zN+UPv3jp0qya^uo8(COG<#1$|-z2`5SqtByUiHdEqEBraD&HpjJ2CxoZsQN5%FefzsA5Hzv1|9=E7C4hW zI)^eJM?C4h%?DNy|0}gC!s^BoSVuGSOL@T`(ch~`tFuot8YJ^(#VwcJLcTwx9;+y; z7On`bjrXPBRrlsf8)0jJwZJ-HePeUws8W7jFY)%0X>1^lXw(Aga1!mWp}nFrgw7R@ zZ@gcfx}(zZPbm`!&oT4G@i(4Ew2UKfELHb zq|X9hKt6qOo=E1olkqwq+y%gexSv27lD}-i|3u(P_`CSM2sju3ndFS#EWWnGs2KF{Cs<=+n$(2Fk4FSX8 zYpk^@?)ju!goaUhjuy*=XCaS#UYug`bAv5}NcE3yZFiBaWm-(FW z{?yvoN4xd|UeAZtSrd6%oHnHOpVq`;TA?}SdKpvXbzRlx$~5ggtMOqo*67T>be`l= z>L>jIt=lK#ehTo^#wC^cGx~TYy%HVLdY7zNbW7vj3jKYct=DIV%NkFOYw6JR?sC%I z&YHS{-=_gjxBjSxXIQ_(bJC6)T4heVH23qoigfc?mJZ&OJf34~{Sp6wz}_Zv^h4zpo+An}9b1Z=nru1;o=`OZeM>x0C(=zt;ip0M4%+ zUHM1#QI&T#F0C9N$LB8%E5f_#_KW5gd@p&to3!r%ZovOue%}YYACP|F2PpG{ji*5$ zmd%e-8g%=&sUzo_2_Cd;xI&M|@8RUu-;wIzNW;m5=V|{2uP%)yIKf1>IAA^H?9c zqpO6Q$@3ms_$9{U%jESH;HzE^v?R&MmRG(;`CkVQhg11R;}63v_=n+j_EOF_8Ru`2 z{@a9q2mB(+b$Ofk(N&f2Hm;`Zm%-crIed@s?*n(Ur%Q&mfPMHN>24+c55WJB-yZ=# z2Bb^22(8ElU;%Iv+K)eJY$H`0{x<7d@h}IfYv2jifLjAjdh77heXJy2as{I!Iw zjq%r2ZflgrB>KU`xenU!bAEr(xPg6Z1MxNxZ$12z(xW#F{EB>j4g7{W-A@1f7WeNO zA5R`fgx@!wTe+igW91Lv|JZn0czD)lM}=E zmPuwZlgxx9K#%}QV6mV9g1fuBI|TQ|T^3ka+}&AxfyEbhS=`;-J@9{S_e{tN`+ny; zKMqf-yX2O1byaoMt(p?*OUzfuc@1xnEn_kHt`mLEx7@$O{yltvkMIdTBj=MU`3hEI zyv=piFW*fY^Sq=*v9dOZK~*P@#*({Yv7(1$4OYCtYAvtYtfk3k1M%A9->B^h>yNVB9@WWS)W_TnSCwKDN~ z!lQ?Up8!Z<#EXB-FbGGU=#-?yOa(t6FE#O}fwYhg(nADfupUz~8u7|nfPAA#dcVCV z;b_`svdX-8RqA0?@?MoRNWWQC&5YbE?zppJMnX2oPMnR@YP{>!@Lvu8)zuux$Vt77 zvew{TuYr9H>_rDa=IbP{=x7m6$|08_gZTulCN9iF5l@U-3wgB&SBr4w9D($w$(iNU zAp}hOIx4TO62=aN5I3g1S)Q`4~Fxb?GA!dg=;Nw`whT54&`GS=E^S%UArM$I1Z^XA}WY$@; z-;XE`Yv1v5xnAEjam-qdO>gK1AU<%e*0UCD+9P5Xq0m!VnC;i`_?cRTES`Biy@dp zt&Mr_7^@I&ILO#*1ol6{NEij9;b#~FW8oJV2jgLawFzy>8)YJKiSGR*%*ikXBAJnp z{bEv=rXpL~yJ?uyVFt{ES@@fcj5#nD=2;u5^GVYJYcu3B{veJ;uo#xWQdnjc&F{av zwJ_|KmJ?ZnfiR`Y7D?H);?jBcuH+TA2k3se>Yuq@x|0C_DACWI-5yVZq z*m-0yr--aQ)*s#BO_{#D-zh1f!;DAJs{DuSZ|=R^d6so%GmJc&!0F3Pw;ar!mjKStI^&vGJWV?#IWlETa@005k#=Of^%2ejqB`mt~xGT2Fs%o3YGnz(vrjZ_V{Gc(3qoW{Vu}xK*5|4`M zWt&cX)A2VQe~ciho8I_Y%@|D56QRwZkC}n{4BU-5Ld9xhSGve2yxk^icg#27-+}zI zTt~RW`r2mlE}6Q$ez-Zog=~L_XPd>Yj=oBOP28E?Ku!?Ex0&OqW|V9Kt`lMx42d8y z;bne03D-#>1d>5=NCBb9mHC!1uEV)bi83K>7ZQgrxb53;FaVwO*8 zNgr)k+_6p?WTb_3kRD{6G6FLLWQ0tRnQ*mvMp;O&)TgYN%~a30MaD3EM`M=_vO^At zf}Dh73%imV8F?Tt*ZCknNLd!Zt{`TV*G#n#WnP#vD`K0i7PY-&?~*6&adlzLy=cYA zdvPcMC2g0KQcxPoKw0E`)7zM%mcvhZsDR9h#AoW!m^w6-Z1RoGIw$s3pep{VL3Pqp z18Rckbkrg*qTf-Q`-+rt9n8A6xoSPzJhi@UzS_XHKy7G~@%civk!_LM*tS@0Vq2m% zB|XiM*Bt--l%;&nE}{=`C@qMqCHAebmpa%Q`7&oJ-?7oQIn)f^@S_cUXz(i`yzATnA*MKgBz=O6^D-ogkE*N34h_osH`?NM_E2 zKfl3xNMl=z4BC9Jb+|EJ#GmZl>5AFS_M7oO%6oH&y3Y&?ekI)-+~xwK{&mN157PA` z^dvu_%3Q;~7xpE%_vk|{)nqplV@~Wt*@Y$jbQ43Kgp)C!?9O7%lyB@ll%cd0rfhmp z!t`^?>W|-0c5X?!TTvw43-zhfBJ!);rT=c${)$_VP)Pd2Hevfg4oPtmuK`XYK-q60dYT$uHa zXM>DUFq*W6lct|-TbZ}rO8T~vK68vK^N?eVGL$tJowHv=4*N4O!;qKV+krmPHtNz= z`nJ2uI2-%Mahm|5MDEVaVn?&*o5O*>;dp z@h{(y5|_-6nQccT^>(HzJG?shb=?S3goRc;@V58n(16+$k|74X5LGETkS5RHJEE*9sCCCVFPT0 z-(eGMM*bF9N*&os9NR$V5w~O44_&k!n18@d+bdEbalBM^+1@Iap z-OqQFxc}GlH0LY#B5ylk_mTF+%!5ez*RmX-50>!kAHhAEd>p{fK{y15;RyCi=~E}# z4!X;W^>FfV4Ey770zV^+w4--~y?pmee{<4yhQVMb=U*%2~?x9Qo;Nya)1pj;pGX*AsmINuK{y&)cRc z7i=??i?%z;CE9_JmXqpb!d!u?gujM)-F8a7VLR=P8y#ZoZozH119#ybe(%Erc*y-D zcuZM5fe7u4`qXxo_X>Ss?4Q$*&G$No9pg55X*4mj#Muh*D|;I&URT%5c^Ec=lI@u-tvxLR6h{sN5XuknR-bo@4gWr12ZxVYm(8~3 zYV7lpc}8Eu?b{lMA2OXF^YSiCe~5=NMF0d6*G%=AyM5#g0(aQ>_(_0!LJ(ccsrq&I zv!o7Smk1I=5=aX2jUCB5Anl~Im(o^#Qg681j+<(T5zj66z1emz)o#0G$~SV9k_kgj|Gd)Nf6@h&Q$Vhq1`<;n&W#&E$Wc9fpoAyZDvq5$^ z#`Da9yL|sFcGm?-Q$AXend$>I%t*&WHOl9aniK!IAUEV8OkR-pH6LaU-q8G*1)v}l zg2EteU=hrsP>gWJp#=SyQSJZwJbuI^k-N-kMMgY7?#w z>8a~;SE+~m`rJ3*z9D8KqnX>-qFThf|? zcSD|q)K95b?U2>p=S6HkA*V5ldq>Pjc14@ArOq)XMRsTC;v+kyB~Heggztu5$)Bh1 zsHeWBe__rNzddjlKlNz~>Ve4q5&u1buT^)wWj+(Xz5mm%$bYT&@pB`WpAeF=j>$-dH`+%DbqoigCRLArJ19Zi!Faii8YU<7VUwD<1z3Oz*fFcReai&4~_(MH-NpC8=)tyy2=zUx05 ze&l_Yw0(>nhb<;fiC3PJq%)EhEWjvp)`5v*Ec^oFU_4A9O%q`fOh%TBC8uCN6?Tx; zU_+jay`=s89NT_wXKeM7v4}aQL(h*oE&A2+Z95HFkGKyv+OHUQK0SLtSW_k*8KX_| z^6UrsLi(BGCC)|6jmUU-CNgG$xB8X#_KP|jw>dD^N72l2Q>apq{{E%@Rh?(NZ!$)( zDD&Mi7GN#}S(6^d*f3I+a-k2^RMf{j@3*I%H2H>NjIL>_B4;z`8q*KTBGS3oN9HVK z{zA&xLQ5p;v1ybgK3;sWFfJvIWj+>dIsEG5t;zhgd3FKkMfmtCE0GaQm{s_Dh}$Dr z&Gi}|U0aKcb)}jh-v~Lp8>s7jG;ISiHX=*blSQ6<8~jdOo4A&7 z-)6#Y@$u1eq51c1e8$=}<=2k5wqb6Ek|aKwXVO%a(*#7m*>3K@&mXu;d$<#GmyfUJ z8C%LYPuhX@_>p({n@mO7ZIrtoaf+MyF7NRXJqHWx_v|AhefwxP_ZxY1GF>Ba`e`!X zE&eO3j@!4eW%xFls>jpJ?;Z(fwiP1#FmgTm z9W9Nqq09x#`Dt=uLfo{7KhaT9#YT$pDgIvQr06aFonS?5{9Bbp)N9{ioiI=&u@Q(`jb^=_$MaKl)kn43fI* z@;5m{_}2TT^CCJm5?_e>T@im~dHsLUd#mo9>>u?}^wWmGH(i|MnmP9O$Ts!0L8&{ZsS{`5 zES&QR|3{sWzUi;JlVNe{Qp&%SwR~g#T_0zocd9skJoP@Vo}=hE{t)NAG{@V&^1S{_ zPe}TtZ+b$hHFLZu&-4FEmoZJ8dMf>)yfe&y5wEm8-}LU%#;HrJyW;l0^~WZn`!2dL znsT20{(?_B<9S@<`Vz=@%4N(eKIv(3J?BAARId8GQLgz!(3b@(*L^0q&%TrMl05n* zto;x|^jdDvhMBq`qBoO4d#44cH+?c{w`g;36W<-4x3v4IK=y+LsG>6xp;h9v7Z>^L z&lun?e(u42c;J&+d+0Mnc?6G<{e<*Ag=e@u_sOEY!2KomuY9u7$7Iz);M@KxzL9Wy z18)g)4*BmGi|te+wFI0b69VSkzd7!BkDm`dG8ZR%nx)SC^Gvai$od2_wvzKV%(KN5 znI`;g}-x^8Lh`L%TRLZqoM zby;R_^HSb@FQ7%(b88tOqmdSilF44g7)NF1K8wAmkrz3ulrK&#tGxm9 zuAaGEIisSOyR76{OTDMhB!Af;JK<&gk;5%F3Nt6f$F3H70lDlol-&3;%Ogt5V=u1d zwHMa%;U_=w7O*t(I@cZlp@nkv@JaKpbYs$EsK+jJZ^<3 z6SIz#!;SA}dwIhwVy|H2ErpRc_I%kZVjraxvsc3Gi&+`7IA#^hyO>om2Vhn+pD$_1 zX|1jWDkZR&=U9Vsld%(LiP&pmrzj=twHR}mdU&#?SCVH_3Q9vHCnU)nRT+2`b}O1*+QX(uT?00&6eaSBDx<(_YVz=b4|Ec^-5Bp~$QM zA8rkd=Pi2dwd@Twf6`x@`d0^vFy~wsvmS^(SbfX}#3l2V4KW*W-tV=j zMOry4kTmpk+sS!Gy$t_~(i^)^YHRu@^nHkd!jXDy>iB@vfjOdDvwzsE`V;>#ymgoC#4CYwm$aDCG@SXyrL1LsT4c!_^CaX=ChQcL3R0HSFsEbR zkCU|Ixy|5S#v)Q5+u%Nvds*|GMVTfyPTFD(gEY;7xrB@4=HXA)9p+;$z+Rs3 zLarCVVpsx8VHqs9ccngZHVHCTaK92(!D?7z??!&mQ%1%*dv~LZ&Z<4I<9sR7u-^Wo zVHd;6UK%HRZLs&&Hro5pm-aNiqkc!mCfE#HU@L5c?XUy>fSs@lb`!@Qh|v0ycL^_N zPVwDEJo|9pk9hzN8u{r*yyB-n@1GghA>0n*Ps;0veE@m-y9^00WigPtDsJX;iO>eQ z?`3UT+y}?XJZe`dXH_{yxJctfGBd8D#C06@(~ca&JYmQk8Y|~d?2g)p#md=6eLsoa zDL8E(9_vr$p*UxZd-l=cX3km3DQ9MTeHOcOhU}4i7f9TUos6`gb3tA$$j!yLLDo?Y z@cb^qCHpAtGU2Y^@2Y*Y@%*lF9mHvAa`xhN{M;~Pj&axdv4)?U$h&3##i&2GxxNE; zk#i68K0JVj+&_ZH@C2U1Gy6DqcusD&k2mu20{PNL9k5T}IVj3a?q5PE*RL>T9Q)cn zk@7Kh0>pj^73~dfZ|#$i!3-6$WuErEeKPW8tw^q?7-@cQpK6$Ue5M(0GEQBhO?T&K z26mjsMS4HlXA;Lu`q-KDv5cLNABJBv?})==FLtxJmwjvKaS$%XK8Gu*f5FNZ!t9~4 zd?h`++Jv3WcyX?gXNCZZ=9tIxQqlWU72Tn7W|hn>&nGQnw*Y^po5iuvu=8>(!el(< zSd2+;=~!ZzHpf!K-0!svlcfm9a!hH9el<+HV}&7WtB)qxC!;Il{I8U4Bbo_4Exg48}_FJBvl)a3fn3b;4ZzN0{V}8*cZT{}T4rzu4VIjwfBD zhB^{MJ88Aw!T#po7??SHYqPn&W_OX0Yyg*xtOVdOD6&in&VyTC$Orkc zFMwGP3OVFk6Mb~-ia=59is8RFW(g?Cbt#Z_h0@%YfwGR*S~={})5n(Qz5-N)N>CZ9 zKvmqUVODp%(Xtxl!f!2*)|zmZ_-bL+hB{Ce>fyIOG=PTCh_r+gXJf9LKvQT2&7lRf zgjUcRqM;46g?7*$IzUJ01f8J^bcJrv9eTizj=Sh=qeD(wWeu(ucDvD#9A!V~8x3a|{a}@H8EWg_zzg@wMyF-3!Aeb|Q zf|YGtZ->&{@4);6*)q?!(_!jK?c!d}s@hGt$UOQUO!;k#y_owz=GFIOicZ!6%vqQR zF=t~Q!W4atg~;>laXCz0j)45;hI#&+rW_?NRp?KTVSgM>z@Kmu=1}IRa6irUDeBc{ zID_1?a1J}s&peO2v;nP{SG$0nFXlz;F2QB;G?Y@lf_W9L@vdHXyw`3}-ZyEBZee%Z zq3L%Vx_%d#_Z;Ju`-FP{58)Bd=rQIKhs+6l(TdvYs81b={>%}rK6hC3T%2y|gbV&xm>XpM= zPr_~(87IsB!`H_1l(VO7x_rks0oj#1l5(g-J(Ka~8;1{aO}Dh<=`Fm2G^!o@DCNDQ zr;-wPIluJ-d1Jkg_!vX-tUtkLhn&hvJ>Xhp?d=O;zXBV>6c!Tk@2B&NKIGZY$g`YD z?$P^@H9$#^<|}Wv6F*M3ANJ=MI$!e4WF6b32XYdu?(3sld~LcH<~@sD_vVl|dACKz z0Zc3Rk`5bjoAH}^1T3o=Wn%X=%gy2IuglqVqSxe$-;bo%57P-Q@P~L10D%w$@gV{7 zLy?paIihVfn5~jgj|pt@{mqB*J>Z+P{Nv@A!mclFzWuPpw%ON+4_NzSC6|k#B?WiawRE8>06{>;s zU7midI`=gQQx=;`5Lj!0Cji50!fu_(5nnMd{39X+7eP#S0?Zz9e3uV-mv~6z#I2~eRK~vTPL30*Vm=@^YzuoaKdqa+z0pu>H}erZ?G~LhWMUP zhx)!#hQV;+9^so@{RvZk6Jj}ipy+za8CY_j|48B)MLuL5b2O&ZV|kuGb3F#e!Y?4d zw=|CQj)w`Pm5xf8h$(e)5_Xee3infeJ$+)ZGR@baPbcgQnCTm&&+--hw)pyN;+z9> zNqc?HcAMv$fHoxo?|A~=bMsq%K5j|WgtQR}u}^5&uVxe~;{?%T5dEkHvePSTqi*L6T_+81poF%i$ z*Hgy9?3DKOsb)Nlbn(QsU9|RMepfS!t93wa1ai`VK@Ru z;TRl;6YwXTgi~-D&cInX2j}4eT!c$-8Lq%pxCYnZ2G9GZZwT$V`TTE@@7r((?!rB| zkG}_)58)ArPVi&QC-4-W!E<;4FOfG>O@?*_=N1v}HN1hhxVtW;`xQrkF{VfS>}282BJ=0puTT0@=gDRyg&|74I*58NB{{T z7!pBZkaLWa_=V{;4LQbIyPlLV`zUjBE}A_n+$V$NkOD$UtBgO=(T0U_AI^PBkTFLp z?tg&PkOn&qR7eYw=XAuG9=8Y(y`l`jJN4^o=?byAw)-rVmer3LY~^m8b!h_^LqkoPAVvkmEMi(NEvRpMlO zCnwyuBR+YS?J+w*N9cs#7^Sb$*{`qC1%}gybR}#z?BnqaS+yf=oY#je=B1S$e&dxN z{nGJnm}?`lKGPF99vzKHH9cuHI~Pi_n9Nw3>Mtf}b|@5km<(jO*c;Bj6_($$eYgrqfQ&fWQ70hy1ohe`S!BBeYCB4=EqB4~XHU|8MtF23h`gpY?C|k(7~yH{W-e zD;w&UO_r9GG1!fTUqI%z<$FZdpT?2?0;JiOJdgLwPM;{{W5z!Lw~6?-kk&~&-^s|D z;+KOw^jD_(Md>MUk@U;&e#m|=(RC}rwX8B~AnhPCK*}`aOh@Jn%$b<8FlWOYuIFOT zBaZp702aa`>=xs;1am1YgXQomtbmoU$}gwB+Ao(hXUZD>NL*_%*TEp(KRJK+H~g)K z4X_b@hfT2AFSij+%ApbM;}-0;!Zz3rJCN}QtS2u!x!(o5VUJ%P>KpZh?}WY7r+uVx zKOBIAetGrA{2Id{zexQsb!VL;qkhCMlYZ1MvwqAki+ZsUH3>$`9d*zu;{=NUclOQS#ZORGQf zORqo1&l7lx|7ZAl4lm#(yn@&82HwIu{7By3!w1+0AK?>xh8XiU=spf+{mHES&mxo!lFp$Rm_Z!>5P zEubZ|!oD?mjOJR-cWUD-O8-C`PducaYsRejDX$l&9L@1od)%b_UvUOc?$~jz%pFNT zR8Q^Te4%u726KM4oYx^^s}g!AWXSlaGhvNyQ^L#M(aR3mFIrOX;>@deb;^F70(v)R zn7+=EOz)12dpw06&f@xyxb=iy&>Q+dUuPbrAM*MmdjNh1QcngsW$sDNn9r{d#?KJv z4P__{bAB8140k5cM>u7Eg*|%C;>t*8B4rdZM#In4jWImelGdX7SZ6W)7iTGBd_KQ-l@uCgl13;O=^;DP!(_se8gjo=ymeyxG%jk1R z<6LK1eV&n?a@4hQ^w;I+ugmH4o#pifMqQV=mJ0O!6>zIyxGi*+(-+~EnRiy61t#1aC@&}>=atg0_1Jo!ua4a6Mtsp~4f^XE+}Gf~Ch@SZ6j|#* z-j@xS8{v1@gxhA!EwGhmQ5MaaZO+=Hzc%4(8}j5kbUXe?6=hTh`#OgG4$>v#)wH<$ z;jD|BrtHLS7wm>TAo-5u*J5;jEoLt=_Q5N5cqW1nkg_(*vz)%4ay`JaKIm+y^9f-5 z?&=|A9EKxsl(5HOsv(#8L#`wFwV5TveS-4%)2I{tJ{{&MXFbM9jY$)I1M<$0zq4?T zdVAhkS-;>ct%ve!Iw6ouk>7P~s9(h2rP#RWFOV(O1A!u@o(4mX@l zNJp@86K=t6xC3`V(sR$*RKHK1d*E!QKSb^$p5bF>W7621_O&_bXihphDo^nH6!&NF z9Jw#xCD;8pDc=SmAm2XGYD?m4u5Vy0{R%&?@x$(A+6;DHI9up%ovj&LMB}FoW#5Ky zZ3rj&gYt_y=DPel%Hut4&j)8aqkZ|v{U`VgG0yhXdG`F{{uMmuEr`w!8`e2*tb_5* zmV|GJxH=f$bTp){Nt!wuW2TF&HLEU(|C?T<=F$`$Ec}$Y7vxhrF_!2=T04Fsx`0aQJjVMU)T75SF4Cjtl?2v)EmI|$-K0`5g0C?RPN z2GP+>gneRHCq0Qv=8w#=Z&H`Eg_G0}mz){K93kP7ySnNrAe4CfFivj4xyoU{2=XCjWL_{)sUM9wbM!S1{#-6@mqlu59Xh4f@4jgiEW&DDdp zpa*U}a5KwE_Q8kp>qQpKWc0x` zNfSCV#ye08Keh2A-(hvQP7ZaUo@Y?1r)z@V3wpamTWp-(hdBEZr@X5&x3iaFGrOdy3zK-Z;x6C5 z=+NP>KggaDvmFvYlc}So9|=FeC3aI7E|_u$;(rj#qb`WM$Qg`0Gah;0JaJ7Wjiwwq zb4up@h8VJ@(bk#vkBxVPeG14MW~7PQWXST!m`)!peoZ}kkN@HLm-Bk$T%&BrI8PqU zeQ$pcKf_%f-}LZhJw$XiM;K|D=`N4I%Zpnc-Sh;;xJq;yF?#Nf{oI~(7yi6d;Jbg=`olxJ{(IP@6)dR;wpvC!1sPfeHLl^o*V1H z)V&C8He;pl`H}vbId0zf2`~{Rf#@g4x*30of}ymwd{ZoAbDzkJ|#*JY>)3Juu^sK*wsKYk}_n zpK%pa77gE!Nk#mgsA-zkt8->N3h^IqkCag=Uy_n7_eg#t-XVzv_ue?*{HS0-HdU z--&M%ru_EkW}aPB>f09Xx4P`gHqx;jcEBI76TiD~lQSh{j$EGEZtTX;mhQoRJ^k|m znP=d7pKAs0&9C}?S4ZUlehy+6Z2ZnM=caO9%d(PmuA-eRL@Y zzxOOmzb?vbBX#Z=c{)y9CrJBLeU1Jn;ZMRTIPF@ipK+DZ&%!y^I=%rYW72W~F2W_( zZp=-VV$hGl5%0YfJkhynb94TWkv%Pps_$SDH z3eVs`1HqoZax1U4#Kv{l-Pw*LHkSTrg7yNz&#eegE zyepe@`K=3SyEuHBbU75we+%u<7M}GMp0#`n7uI-TDRt&1q%Gmv%YUo;IWQLW-=-(| z?sJg$M%MG?JW}(Wv=Uy>R-3@JELMe}3S^-sLav&{oQL zJ9(Ggy*o(X4x`WX$A2oa84pvw>67y-h0gD$Cs+ya=ahKl20?tn$TLWQnGk~gchVn! zzb-qOlS)Lm#QwYZPWrw-sV_1o;>lwYf6mE*R(9FrB;(&q+GXOEcT(CpInOr)cNqtX ze!1w5OL-^5E;;E+L3xA{uZ(4-KFT`qDx==*=Dqx0I`;gB+g`>tqQABeKl>=leU#;1 zJ(p_gb-uza%zr&59&YQKQ(Dhbi|bbe;LVVCi0ybL{B~oW>$#Az8}A~`0eal`7U5Q zfLnIR0Z|}*b56`$kQ>Zz2D9#|>QVB0l=zPt@yA1E9^#bx6VC6xuxiUYCFSB!@?tON zYJ}4g=CvHv^Z6gu^J7;43i{iWLjHr5)I7VwJewj=)ObEJ?ht)5^X!gd*cFEokN`cC zl9;9NTbgv00nsBWi&+lho^@89`wCDIDnVta0-_%v`UF+Et_Ibi2GoRFP#fw%U8v`O zjJ*C;uIwj}-@$9cnV7QYqdsYAL+9LpbTtIodmN)4(;NAZ(vspX^;6D}XpB4yZTLRM zmFciEbTR#RkLrHznwq#0qFLksL%LMv#EyZpvfH1=(vE%#Ag@>@sf zAo$-^@*3su+3)AsPv;qrlXu$e_Jr#I9ibE9Wu2ij*Il41bc62D1Ac^_&e;SD1IK6Fo9>+{}6&`TACGq)j6ow3%a&JJw(J z753JA(CYeyd-GdG%Es)Q#$mUfwncPU*}1^jOZH*14o>)C))RbtI+XFGeFAaF8uCQ^ zPlCzVO~FpqD5r8i4W`2km&O{GY zvalC03wncD+rc+JV15t(OSR0}D(qLo0p@7syJHRZYq@X9vsp)4Wj**e z%=OrBz<#6AN0@6wzx)45zFCWjjr%0uGbefPPa5xi7-`sy+ZOW6>6-c~t|i`3MaB)R z)o{Jd{}f|wet(ZRb|C)`%$=|ccEcXn3;S@ZPW|7{^Yg=1o5ttUit#;gCP+lh9r;_ zLLeC=hZOjivpd82C12xv4ZAQ17x-o0DB?~T?~0xZet^`F2GT-0NDmQ^0Wv}+$P8H^ zD?~yz$PPIminQfKb}r)0O?vZiofq;!ekcG1p%BPfoQ3gMgzKVE42nYuC<&#YG?am| zP!7sN1*iy>pfXf}s!$E&Hv+38vj*4E$_;7?=U8$b7VoD1jBCkzEvO9)6O=lbQqFZD z6zV~JXaEhN5j2J-&=i_Mb7%oAp%t`-XlMg%<6YC+#k--m=eh%Qgig>Ixkae;5D*VGs<4Autq%!EhJ>Kfy>C1*73-7z1PB7Z?ZQVFFBqNiZ3v zz*Lw9(_se8gjp~f=D=K-2lHV8EQCd{7?!|NSO&}CS6BfnVHK=~HLw=e!Edl0Ho!*s z9X7#c*aBN&8*GOi@CWRKU9cPWz+Tt~`{4i_ghOx`)}yO-1oJ2ygX3@l{)Cfo3S{o@ zH0BvN3+JF4W1sVw7vLgXg3E9PuEI6A4maQ?+=AP12kyc>xDOBDAv}V|@C2U1Gk6X! z;3d3**YF13!aH~mAK)W=g3r|97|bv56_fzJ6F~zS9>oG);0;!=fe+Zh0lwe|PH;gZ z>bgH>JP3e52!i;K01`qlB!a|{1d>7sB!lFT0zx4S!XYK3f*&9?q=B@M4$?yeWPps2 z2{J<#$O@5=4YETHh=QDu3vxpq$P4)(KNJWk$o>i14z9aX9=&N>Lb*?;+%o!^{a&}- z<{iEp@6ayaaktB&?{!@-6mU~73`L+Q6ocYW0!l(DC=F$xER=)tPys4JC8!KlNJrIx zTY9yC+j@0=D7!|$UE0;V#CO+-uV#R(0oy@%aB!>$%-mbAX&m(sl<1mruVHumyO zR3{)w zkhZ3n;l{6|KSAyjLv9!{d!Yl}EWj+kaDH*b4*d3Qtb239wSbn;D!}~B8yTa&;}_dK zF!7v1d z!Y~*PBj6_(38P>%MDpwJ{4y_P@g}w`ehzqx-COM58g^rNR!^Pp^p&Ky2Gj%@M~)@@ zFE9?q!vvTJlVCDTfvGSJro#-F3A11}%presDXV!f9~Qtu?4^%dgxg}Sm%vh32Fu}B z{H(xjC9Hzgum;vr?&~mrgY{f*fQ|4w_nRPqvCL+|Zz23v*aq9V-$CB~fSs@lcEcXn z3;SR{9Dsvx2o4kG2w{)HF|LnOS5Cm6T%W}56mgv<-ZNaEg>!HoF5rGK;F*32x6541 zyv7yGt8fkX>u>{Z!Y#NBcaU`#?h)ob{$?=0^Z@&Z@CY8m6L^Z-Gk6X!;3d2w+-t(U z!F&tv;63&q@c$7$!DonpFYpz={IHIqf(ANR0{I=FK*n)k<=%$*9GwIoOgoEF4oqK6 zKXBsi0{_6FN<7Q}2*f@J;zI&R2*HpDxruR4LinT*0?8mbq<~P|!|)dlqOX$@GZp-R zeQHR9pR|w;8R@Z)fDDikG6g=@GY7uZvjo1hcz$=f%jr517AyB)ekGy-#__S6;{$c#ihpoJXmx zd@=U!)M1tEnGY*R8I}k6o~;o0Rj(LWMz4f2b_VV%BeM!rg=$b8YCuh>1+}40;AXWh{_6#* zmimF3#SBl`;MNctL1SnFP2nfL$(ms{hZZ1nIW3956|@Ff2Z+XO18t!l$ZyZJC%qk@ zBVjsW*BQD%SLlXacjysVg3=XzN#-xOx3U({6SEiL^3ukL4p<7>R_Swk6Rr>R#ZB7h zeq8s50Wc5-!BQIY!I(o}C~}6ua2NqU!AKYdqv2;517qPA7zg8F0`+$y;U@)3pDAixKDwp_?ZUNxt;+tVHV7WIWQOI!F*T%3tc?CFUy3 z)tGAnEfz20UK{98)?sJlSE;N17U*Tk``!7;Z_jHz>E8hJD8tKq#9iP!dLwdvr|eq8 z6+>5y{eyuul+DPjhuTgw)6?c4lTKN)Ccmd@Ma!<&|ijcevLvle2-ovG?b=Z>IXi-kaeM(oUccVRu?&JW-Ohr1SW@02g66SE@= zJb!30H9IHeG{wu`k}!6zPsV++&PqQ?UA;tlRaMja`B61Xm%>s34a4_g47p&MP9!Z7-+d27)05`$6o@= zoxp^Yp`k}-xf>X4xfd9$+^3CwfZR;<8xMItkKi%(PvB|bSmjw@BFl4RzJQn5y@J>9 z2HplHw!DM)@PYe}v_+qg^%=&iNh~peNiAQ9|7&0f@dsNnLI{Z74F@MEYEZDHnj*R~ zFBA@aQ}m!0iX|wS#Ve?y?j7`8u?BHoK6TI*M4twx-WA^y`0YZjI^pKP-WUA92`=3H zAsz%kAOt~tWF-hnZb=xF!V(OLfI+Z zHQ`dnrfrCln7W!6yToogzG=u;4$2_PkRjhFYgs#5%NTO4F@`krl*Y1zHT;~&tze`x zz>;lrz36YNJl!-AF-ry2Q&Y#jhvpf3qI)9yIZN|ng=L^D zl!FPpyX7&jQueZ5D)aaixUUG6pfXf}s_wFs-^#4UeRZfwTUJ9%s6|>HddYk^&z^Wh z=a#(}%!$i9x$G?#{apEt6}wV9C;@74()Q6u6OR8%-JmF?9&+kK11uUsBan0W8)Mgm za*_7JY}+$Yu9+y0Oh&mj4a#h>v!f^ke~9ibC+#;ptTx6R&VoP8#^2P?(O7cEQ#|M>U+0P#n7!vFvP diff --git a/test_img/shadows/shadow_mapping_sanity_depth.png b/test_img/shadows/shadow_mapping_sanity_depth.png new file mode 100644 index 0000000000000000000000000000000000000000..7955d5e1fb065ddab4808c66794474b147cdeddb GIT binary patch literal 20196 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 S_sDf_|M~hg8zRiZ|tc1 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 Sk@%JY2s~Z=T-G@yGywn?)zy#y literal 0 HcmV?d00001 diff --git a/test_img/shadows/shadow_mapping_sanity_light_pov_depth.png b/test_img/shadows/shadow_mapping_sanity_light_pov_depth.png new file mode 100644 index 0000000000000000000000000000000000000000..7955d5e1fb065ddab4808c66794474b147cdeddb GIT binary patch literal 20196 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 S_oA=LYkh-2 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%0A7J_KL{YK`Z5Jsp_~ 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