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 00000000..c8443401 Binary files /dev/null and b/crates/renderling/shaders/atlas-atlas_blit_fragment.spv differ 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 00000000..45409ff2 Binary files /dev/null and b/crates/renderling/shaders/atlas-atlas_blit_vertex.spv differ 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 7eee219c..c581fd34 100644 Binary files a/crates/renderling/shaders/bloom-bloom_downsample_fragment.spv and b/crates/renderling/shaders/bloom-bloom_downsample_fragment.spv differ 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 f15f4459..125e4e3a 100644 Binary files a/crates/renderling/shaders/bloom-bloom_mix_fragment.spv and b/crates/renderling/shaders/bloom-bloom_mix_fragment.spv differ 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 64a6fd88..01e78d0a 100644 Binary files a/crates/renderling/shaders/bloom-bloom_upsample_fragment.spv and b/crates/renderling/shaders/bloom-bloom_upsample_fragment.spv differ diff --git a/crates/renderling/shaders/bloom-bloom_upsample_fragment.wgsl b/crates/renderling/shaders/bloom-bloom_upsample_fragment.wgsl index 65f9b7f2..62429c53 100644 --- a/crates/renderling/shaders/bloom-bloom_upsample_fragment.wgsl +++ b/crates/renderling/shaders/bloom-bloom_upsample_fragment.wgsl @@ -1,9 +1,9 @@ -struct type_8 { +struct type_3 { member: array, } @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 34d11cda..be801ad5 100644 Binary files a/crates/renderling/shaders/bloom-bloom_vertex.spv and b/crates/renderling/shaders/bloom-bloom_vertex.spv differ 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 50662b7c..758e616b 100644 Binary files a/crates/renderling/shaders/convolution-brdf_lut_convolution_fragment.spv and b/crates/renderling/shaders/convolution-brdf_lut_convolution_fragment.spv differ 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 80ed1bc4..9a7dd942 100644 Binary files a/crates/renderling/shaders/convolution-brdf_lut_convolution_vertex.spv and b/crates/renderling/shaders/convolution-brdf_lut_convolution_vertex.spv differ 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 9920cd37..e8d8857c 100644 Binary files a/crates/renderling/shaders/convolution-generate_mipmap_vertex.spv and b/crates/renderling/shaders/convolution-generate_mipmap_vertex.spv differ 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 07b728ce..5ded01d2 100644 Binary files a/crates/renderling/shaders/convolution-prefilter_environment_cubemap_fragment.spv and b/crates/renderling/shaders/convolution-prefilter_environment_cubemap_fragment.spv differ 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 0ddafcc5..a8e990ab 100644 Binary files a/crates/renderling/shaders/convolution-prefilter_environment_cubemap_vertex.spv and b/crates/renderling/shaders/convolution-prefilter_environment_cubemap_vertex.spv differ diff --git a/crates/renderling/shaders/convolution-prefilter_environment_cubemap_vertex.wgsl b/crates/renderling/shaders/convolution-prefilter_environment_cubemap_vertex.wgsl index e4159c3c..7eca03a4 100644 --- a/crates/renderling/shaders/convolution-prefilter_environment_cubemap_vertex.wgsl +++ b/crates/renderling/shaders/convolution-prefilter_environment_cubemap_vertex.wgsl @@ -1,30 +1,30 @@ -struct type_10 { +struct type_3 { member: array, } -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 f5540eb6..9ca50a31 100644 Binary files a/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid.spv and b/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid.spv differ 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 26d47eaf..817ee7b5 100644 Binary files a/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid_multisampled.spv and b/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid_multisampled.spv differ diff --git a/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid_multisampled.wgsl b/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid_multisampled.wgsl index 62888d80..4dd56bb0 100644 --- a/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid_multisampled.wgsl +++ b/crates/renderling/shaders/cull-compute_copy_depth_to_pyramid_multisampled.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_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 0aefddba..e86d76ad 100644 Binary files a/crates/renderling/shaders/cull-compute_culling.spv and b/crates/renderling/shaders/cull-compute_culling.spv differ 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 adc86d7e..25e11dd2 100644 Binary files a/crates/renderling/shaders/cull-compute_downsample_depth_pyramid.spv and b/crates/renderling/shaders/cull-compute_downsample_depth_pyramid.spv differ diff --git a/crates/renderling/shaders/cull-compute_downsample_depth_pyramid.wgsl b/crates/renderling/shaders/cull-compute_downsample_depth_pyramid.wgsl index b3f04f94..a01e9fa6 100644 --- a/crates/renderling/shaders/cull-compute_downsample_depth_pyramid.wgsl +++ b/crates/renderling/shaders/cull-compute_downsample_depth_pyramid.wgsl @@ -1,4 +1,4 @@ -struct type_4 { +struct type_2 { member: array, } @@ -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 2694044d..c0c77211 100644 Binary files a/crates/renderling/shaders/debug-debug_overlay_fragment.spv and b/crates/renderling/shaders/debug-debug_overlay_fragment.spv differ 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 6e631c96..dd32e914 100644 Binary files a/crates/renderling/shaders/debug-debug_overlay_vertex.spv and b/crates/renderling/shaders/debug-debug_overlay_vertex.spv differ diff --git a/crates/renderling/shaders/ibl-diffuse_irradiance-di_convolution_fragment.spv b/crates/renderling/shaders/ibl-diffuse_irradiance-di_convolution_fragment.spv index f3d4b5e0..6d3d9ac0 100644 Binary files a/crates/renderling/shaders/ibl-diffuse_irradiance-di_convolution_fragment.spv and b/crates/renderling/shaders/ibl-diffuse_irradiance-di_convolution_fragment.spv differ diff --git a/crates/renderling/shaders/light-shadow_mapping_vertex.spv b/crates/renderling/shaders/light-shadow_mapping_vertex.spv index d92f9857..a30dc66a 100644 Binary files a/crates/renderling/shaders/light-shadow_mapping_vertex.spv and b/crates/renderling/shaders/light-shadow_mapping_vertex.spv differ 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 e72ba1d5..d3c61bab 100644 Binary files a/crates/renderling/shaders/skybox-skybox_cubemap_fragment.spv and b/crates/renderling/shaders/skybox-skybox_cubemap_fragment.spv differ diff --git a/crates/renderling/shaders/skybox-skybox_cubemap_vertex.spv b/crates/renderling/shaders/skybox-skybox_cubemap_vertex.spv index 63fd1c68..f4a16170 100644 Binary files a/crates/renderling/shaders/skybox-skybox_cubemap_vertex.spv and b/crates/renderling/shaders/skybox-skybox_cubemap_vertex.spv differ diff --git a/crates/renderling/shaders/skybox-skybox_cubemap_vertex.wgsl b/crates/renderling/shaders/skybox-skybox_cubemap_vertex.wgsl index 136ffa67..77dbca5d 100644 --- a/crates/renderling/shaders/skybox-skybox_cubemap_vertex.wgsl +++ b/crates/renderling/shaders/skybox-skybox_cubemap_vertex.wgsl @@ -1,30 +1,30 @@ -struct type_10 { +struct type_3 { member: array, } -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 a039280d..6c0cb4bd 100644 Binary files a/crates/renderling/shaders/skybox-skybox_equirectangular_fragment.spv and b/crates/renderling/shaders/skybox-skybox_equirectangular_fragment.spv differ diff --git a/crates/renderling/shaders/skybox-skybox_vertex.spv b/crates/renderling/shaders/skybox-skybox_vertex.spv index 79eca6ab..8316eb73 100644 Binary files a/crates/renderling/shaders/skybox-skybox_vertex.spv and b/crates/renderling/shaders/skybox-skybox_vertex.spv differ diff --git a/crates/renderling/shaders/skybox-skybox_vertex.wgsl b/crates/renderling/shaders/skybox-skybox_vertex.wgsl index ba7250f2..68bc35c7 100644 --- a/crates/renderling/shaders/skybox-skybox_vertex.wgsl +++ b/crates/renderling/shaders/skybox-skybox_vertex.wgsl @@ -1,30 +1,30 @@ -struct type_10 { +struct type_3 { member: array, } -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 d93264f7..365b45da 100644 Binary files a/crates/renderling/shaders/stage-renderlet_fragment.spv and b/crates/renderling/shaders/stage-renderlet_fragment.spv differ diff --git a/crates/renderling/shaders/stage-renderlet_fragment.wgsl b/crates/renderling/shaders/stage-renderlet_fragment.wgsl index 9c9233a6..e6b24493 100644 --- a/crates/renderling/shaders/stage-renderlet_fragment.wgsl +++ b/crates/renderling/shaders/stage-renderlet_fragment.wgsl @@ -1,39 +1,54 @@ -struct type_11 { +struct type_3 { member: array, } -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 4a04d5b0..1dd9bd6b 100644 Binary files a/crates/renderling/shaders/stage-renderlet_vertex.spv and b/crates/renderling/shaders/stage-renderlet_vertex.spv differ 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 98edd89b..c982db1f 100644 Binary files a/crates/renderling/shaders/tonemapping-tonemapping_fragment.spv and b/crates/renderling/shaders/tonemapping-tonemapping_fragment.spv differ diff --git a/crates/renderling/shaders/tonemapping-tonemapping_fragment.wgsl b/crates/renderling/shaders/tonemapping-tonemapping_fragment.wgsl index 7012bf25..18d497dd 100644 --- a/crates/renderling/shaders/tonemapping-tonemapping_fragment.wgsl +++ b/crates/renderling/shaders/tonemapping-tonemapping_fragment.wgsl @@ -1,4 +1,4 @@ -struct type_7 { +struct type_2 { member: array, } @@ -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 7ad18552..2dd7a0e9 100644 Binary files a/crates/renderling/shaders/tonemapping-tonemapping_vertex.spv and b/crates/renderling/shaders/tonemapping-tonemapping_vertex.spv differ diff --git a/crates/renderling/shaders/tonemapping-tonemapping_vertex.wgsl b/crates/renderling/shaders/tonemapping-tonemapping_vertex.wgsl index a6309c0c..488c2164 100644 --- a/crates/renderling/shaders/tonemapping-tonemapping_vertex.wgsl +++ b/crates/renderling/shaders/tonemapping-tonemapping_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 _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 a8e40545..0abe2554 100644 Binary files a/crates/renderling/shaders/tutorial-tutorial_implicit_isosceles_vertex.spv and b/crates/renderling/shaders/tutorial-tutorial_implicit_isosceles_vertex.spv differ diff --git a/crates/renderling/shaders/tutorial-tutorial_slabbed_renderlet.spv b/crates/renderling/shaders/tutorial-tutorial_slabbed_renderlet.spv index 64375a26..09782bb6 100644 Binary files a/crates/renderling/shaders/tutorial-tutorial_slabbed_renderlet.spv and b/crates/renderling/shaders/tutorial-tutorial_slabbed_renderlet.spv differ diff --git a/crates/renderling/shaders/tutorial-tutorial_slabbed_renderlet.wgsl b/crates/renderling/shaders/tutorial-tutorial_slabbed_renderlet.wgsl index 38dbdbcb..1ec01068 100644 --- a/crates/renderling/shaders/tutorial-tutorial_slabbed_renderlet.wgsl +++ b/crates/renderling/shaders/tutorial-tutorial_slabbed_renderlet.wgsl @@ -1,30 +1,30 @@ -struct type_11 { +struct type_3 { member: array, } -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 416d8c9a..4878b810 100644 Binary files a/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices.spv and b/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices.spv differ 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 af229f3a..d7addc79 100644 Binary files a/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices_no_instance.spv and b/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices_no_instance.spv differ diff --git a/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices_no_instance.wgsl b/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices_no_instance.wgsl index 49acbdde..15d5239d 100644 --- a/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices_no_instance.wgsl +++ b/crates/renderling/shaders/tutorial-tutorial_slabbed_vertices_no_instance.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; @@ -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 3983f234..292c849c 100644 Binary files a/gltf/shadow_mapping_sanity.bin and b/gltf/shadow_mapping_sanity.bin differ 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 8b77261d..f6342087 100644 Binary files a/gltf/shadow_mapping_sanity_spot.blend and b/gltf/shadow_mapping_sanity_spot.blend differ diff --git a/gltf/shadow_mapping_sanity_spot.blend1 b/gltf/shadow_mapping_sanity_spot.blend1 deleted file mode 100644 index 21a25cfa..00000000 Binary files a/gltf/shadow_mapping_sanity_spot.blend1 and /dev/null differ 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 00000000..7955d5e1 Binary files /dev/null and b/test_img/shadows/shadow_mapping_sanity_depth.png differ diff --git a/test_img/shadows/shadow_mapping_sanity_light_pov.png b/test_img/shadows/shadow_mapping_sanity_light_pov.png new file mode 100644 index 00000000..55133e24 Binary files /dev/null and b/test_img/shadows/shadow_mapping_sanity_light_pov.png differ 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 00000000..7955d5e1 Binary files /dev/null and b/test_img/shadows/shadow_mapping_sanity_light_pov_depth.png differ diff --git a/test_img/shadows/shadow_mapping_sanity_scene_before.png b/test_img/shadows/shadow_mapping_sanity_scene_before.png new file mode 100644 index 00000000..f2305d79 Binary files /dev/null and b/test_img/shadows/shadow_mapping_sanity_scene_before.png differ