diff --git a/Cargo.lock b/Cargo.lock index 3c158d40..732cbb04 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -285,11 +285,11 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" +checksum = "0b0f1f60a6be1155c81f2f9fca48157aa87ecb61361d71b0be6e83c8d34f5527" dependencies = [ - "bit-vec 0.9.1", + "bit-vec 0.10.0", ] [[package]] @@ -304,6 +304,12 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" +[[package]] +name = "bit-vec" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27072b69db792194938b8a1ae8f1e4a003ba53437a719cf6ddc21f32229f0586" + [[package]] name = "bitflags" version = "1.3.2" @@ -1233,26 +1239,6 @@ dependencies = [ "windows", ] -[[package]] -name = "gpu-descriptor" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" -dependencies = [ - "bitflags 2.12.1", - "gpu-descriptor-types", - "hashbrown 0.15.5", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" -dependencies = [ - "bitflags 2.12.1", -] - [[package]] name = "half" version = "2.7.1" @@ -1303,8 +1289,6 @@ dependencies = [ "allocator-api2", "equivalent", "foldhash 0.2.0", - "serde", - "serde_core", ] [[package]] @@ -1312,6 +1296,11 @@ name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash 0.2.0", + "serde", + "serde_core", +] [[package]] name = "heck" @@ -1331,12 +1320,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - [[package]] name = "humantime" version = "2.3.0" @@ -2046,22 +2029,22 @@ dependencies = [ [[package]] name = "naga" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd91265cc2454558f659b3b4b9640f0ddb8cc6521277f166b8a8c181c898079" +checksum = "23bf0a141a9ab6f07dbb492db53245e464bc9db42f407772d9ae03d83a2c1033" dependencies = [ "arrayvec", - "bit-set 0.9.1", + "bit-set 0.10.1", "bitflags 2.12.1", "cfg-if", "cfg_aliases 0.2.1", "codespan-reporting", "half", - "hashbrown 0.16.1", - "hexf-parse", + "hashbrown 0.17.1", "indexmap", "libm", "log", + "naga-types", "num-traits", "once_cell", "petgraph", @@ -2072,6 +2055,19 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "naga-types" +version = "30.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658200ddc25c6c7b860747516d132d1b284c0fafb7a380233acee9a72fb30e11" +dependencies = [ + "hashbrown 0.17.1", + "indexmap", + "rustc-hash 1.1.0", + "serde", + "thiserror 2.0.18", +] + [[package]] name = "ndk" version = "0.8.0" @@ -3940,9 +3936,9 @@ dependencies = [ [[package]] name = "wgpu" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb3feacc458f7bee8bc1737149b42b6c731aa461039a4264a67bb6681646b250" +checksum = "6d8f4bd44d92da5270f03409dba9f952dab24f128e05d6a554926101d1bf9114" dependencies = [ "arrayvec", "bitflags 2.12.1", @@ -3950,7 +3946,7 @@ dependencies = [ "cfg-if", "cfg_aliases 0.2.1", "document-features", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "js-sys", "log", "naga", @@ -3970,21 +3966,22 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02da3ad1b568337f25513b317870960ef87073ea0945502e44b864b67a8c77b7" +checksum = "08763620e76fc980bca7bf84de82568614487a53172dd968d89187282eb87fa2" dependencies = [ "arrayvec", - "bit-set 0.9.1", + "bit-set 0.10.1", "bit-vec 0.9.1", "bitflags 2.12.1", "bytemuck", "cfg_aliases 0.2.1", "document-features", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "indexmap", "log", "naga", + "naga-types", "once_cell", "parking_lot", "portable-atomic", @@ -4003,41 +4000,41 @@ dependencies = [ [[package]] name = "wgpu-core-deps-apple" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e51b5447e144b3dbba4feb01f80f4fa21696fa0cd99afb2c3df1affd6fdb28" +checksum = "3283b6da70d7fc892de95840215aa36381b5d0cbc479e88ee2b173c7b992b225" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-emscripten" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3487cd6293a963bc5c0c0396f6a2192043c50003c07f4efdccbad3d90ec9d819" +checksum = "85dcf2b2e5c2afb9eda64c570a87a4e570304bf39e52eddbaaf222d655b656ad" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb01076d0aa08b0ba9bd741e178b5cc440f5abe99d9581323a4c8b5d1a1916" +checksum = "f76bc9c1c186ff3d9054e0d224c93c8c1c79d6653907c5249a5c1ea1a2cb1e43" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8e1a9e7a8512f276f7c62e018c7fa8d60954303fed2e5750114332049193f" +checksum = "cf765132d8d5f50e192e7880464890c13f4e7457aafe8e5466e8174586e9f101" dependencies = [ "android_system_properties", "arrayvec", "ash", - "bit-set 0.9.1", + "bit-set 0.10.1", "bitflags 2.12.1", "block2 0.6.2", "bytemuck", @@ -4046,17 +4043,18 @@ dependencies = [ "glow", "glutin_wgl_sys", "gpu-allocator", - "gpu-descriptor", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "js-sys", "khronos-egl", "libc", "libloading", "log", "naga", + "naga-types", "ndk-sys 0.6.0+11769913", "objc2 0.6.4", "objc2-core-foundation", + "objc2-core-graphics", "objc2-foundation", "objc2-metal", "objc2-quartz-core", @@ -4071,6 +4069,7 @@ dependencies = [ "raw-window-metal 1.1.0", "renderdoc-sys", "smallvec", + "static_assertions", "thiserror 2.0.18", "wasm-bindgen", "wayland-sys", @@ -4084,9 +4083,9 @@ dependencies = [ [[package]] name = "wgpu-naga-bridge" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c654c483f058800972c3645e95388a7eca31bf9fe1933bc20e036588a0be02" +checksum = "c9eaac644e5008925c78567d272b9d66ef83da55a53cc17fc7daade7bb6e66e5" dependencies = [ "naga", "wgpu-types", @@ -4094,15 +4093,17 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9bcc31518a0e9735aefebedb5f7a9ef3ed1c42549c9f4c882fa9060ceaac639" +checksum = "1a9c93c2b35edde326df60ffdee4c0f5864eac3011d6768b70d43f028ad93565" dependencies = [ "bitflags 2.12.1", "bytemuck", "js-sys", "log", + "naga-types", "raw-window-handle", + "static_assertions", "web-sys", ] diff --git a/Cargo.toml b/Cargo.toml index 5cd99d17..26dc4ca1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,8 +32,8 @@ objc2 = { version = "0.6" } glow = { version = "0.17.0" } glfw = { version = "0.59.0" } -wgpu = { version = "29.0.3", default-features = false } -wgpu-types = { version = "29.0.3" } +wgpu = { version = "30.0.0", default-features = false } +wgpu-types = { version = "30.0.0" } clap = { version = "=4.3.0", features = ["derive"] } rayon = { version = "1.10.0"} diff --git a/librashader-cli/src/render/wgpu.rs b/librashader-cli/src/render/wgpu.rs index 2c0887af..920ec6df 100644 --- a/librashader-cli/src/render/wgpu.rs +++ b/librashader-cli/src/render/wgpu.rs @@ -159,18 +159,19 @@ impl RenderTest for Wgpu { .slice(..) .map_async(wgpu::MapMode::Read, move |r| { if r.is_ok() { - let buffer = capturable.slice(..).get_mapped_range(); - let mut pixels = pixels_async.lock(); - pixels.resize(buffer.len(), 0); + if let Ok(buffer) = capturable.slice(..).get_mapped_range() { + let mut pixels = pixels_async.lock(); + pixels.resize(buffer.len(), 0); - let mut cursor = Cursor::new(pixels.deref_mut()); - for chunk in buffer.chunks(buffer_dimensions.padded_bytes_per_row) { - cursor - .write_all(&chunk[..buffer_dimensions.unpadded_bytes_per_row]) - .unwrap() - } + let mut cursor = Cursor::new(pixels.deref_mut()); + for chunk in buffer.chunks(buffer_dimensions.padded_bytes_per_row) { + cursor + .write_all(&chunk[..buffer_dimensions.unpadded_bytes_per_row]) + .unwrap() + } - cursor.into_inner(); + cursor.into_inner(); + } } capturable.unmap(); }); @@ -204,6 +205,7 @@ impl Wgpu { power_preference: wgpu::PowerPreference::default(), compatible_surface: None, force_fallback_adapter: false, + apply_limit_buckets: false, }) .await?; diff --git a/librashader-reflect/Cargo.toml b/librashader-reflect/Cargo.toml index f7ed814a..a07b81a7 100644 --- a/librashader-reflect/Cargo.toml +++ b/librashader-reflect/Cargo.toml @@ -25,7 +25,7 @@ librashader-pack = { path = "../librashader-pack", version = "0.11.4" } spirv-cross2 = { workspace = true, optional = true } -naga = { version = "29", optional = true } +naga = { version = "30", optional = true } rspirv = { version = "0.13.0" } spirv = { version = "0.4.0" } diff --git a/librashader-reflect/src/reflect/naga/msl.rs b/librashader-reflect/src/reflect/naga/msl.rs index d6359c7a..fb6ab65f 100644 --- a/librashader-reflect/src/reflect/naga/msl.rs +++ b/librashader-reflect/src/reflect/naga/msl.rs @@ -34,6 +34,10 @@ impl CompileShader for NagaReflect { bounds_check_policies: Default::default(), zero_initialize_workgroup_memory: false, force_loop_bounding: false, + task_dispatch_limits: None, + mesh_shader_primitive_indices_clamp: false, + emit_int_div_checks: true, + ray_query_initialization_tracking: false, }; let mut frag_options = vert_options.clone(); @@ -51,6 +55,7 @@ impl CompileShader for NagaReflect { allow_and_force_point_size: false, vertex_pulling_transform: false, vertex_buffer_mappings: vec![], + binding_array_length_map: Default::default(), }; let msl = naga::back::msl::write_string(&module, &info, &options, &pipeline_options)?; diff --git a/librashader-runtime-d3d11/src/filter_chain.rs b/librashader-runtime-d3d11/src/filter_chain.rs index b49fba11..5dcc2974 100644 --- a/librashader-runtime-d3d11/src/filter_chain.rs +++ b/librashader-runtime-d3d11/src/filter_chain.rs @@ -223,7 +223,8 @@ impl FilterChainD3D11 { let (output_framebuffers, output_textures) = framebuffer_init.init_output_framebuffers()?; // initialize feedback framebuffers - let (feedback_framebuffers, feedback_textures) = framebuffer_init.init_feedback_framebuffers()?; + let (feedback_framebuffers, feedback_textures) = + framebuffer_init.init_feedback_framebuffers()?; // initialize history let (history_framebuffers, history_textures) = framebuffer_init.init_history()?; @@ -588,7 +589,10 @@ impl FilterChainD3D11 { for index in 0..passes_len { if self.feedback_framebuffers.contains(index) { - std::mem::swap(&mut self.output_framebuffers[index], &mut self.feedback_framebuffers[index]); + std::mem::swap( + &mut self.output_framebuffers[index], + &mut self.feedback_framebuffers[index], + ); } } diff --git a/librashader-runtime-d3d12/src/filter_chain.rs b/librashader-runtime-d3d12/src/filter_chain.rs index efef8b2f..b86c8bfb 100644 --- a/librashader-runtime-d3d12/src/filter_chain.rs +++ b/librashader-runtime-d3d12/src/filter_chain.rs @@ -431,7 +431,8 @@ impl FilterChainD3D12 { let (output_framebuffers, output_textures) = framebuffer_init.init_output_framebuffers()?; // initialize feedback framebuffers - let (feedback_framebuffers, feedback_textures) = framebuffer_init.init_feedback_framebuffers()?; + let (feedback_framebuffers, feedback_textures) = + framebuffer_init.init_feedback_framebuffers()?; // initialize history let (history_framebuffers, history_textures) = framebuffer_init.init_history()?; @@ -802,7 +803,10 @@ impl FilterChainD3D12 { // swap output and feedback **before** recording command buffers for index in 0..passes_len { if self.feedback_framebuffers.contains(index) { - std::mem::swap(&mut self.output_framebuffers[index], &mut self.feedback_framebuffers[index]); + std::mem::swap( + &mut self.output_framebuffers[index], + &mut self.feedback_framebuffers[index], + ); } } @@ -889,31 +893,28 @@ impl FilterChainD3D12 { if target.max_mipmap > 1 && !self.disable_mipmaps { // barriers don't get disposed because the context is OutlivesFrame - let (residuals, _residual_barriers) = - self.common.mipmap_gen.mipmapping_context( - cmd, - &mut self.mipmap_heap, - |ctx| { - ctx.generate_mipmaps::( - &target.resource, - target.max_mipmap, - target.size, - target.format.into(), - )?; - Ok::<(), FilterChainError>(()) - }, - )?; + let (residuals, _residual_barriers) = self + .common + .mipmap_gen + .mipmapping_context(cmd, &mut self.mipmap_heap, |ctx| { + ctx.generate_mipmaps::( + &target.resource, + target.max_mipmap, + target.size, + target.format.into(), + )?; + Ok::<(), FilterChainError>(()) + })?; self.residuals.dispose_mipmap_handles(residuals); } self.residuals.dispose_output(view.descriptor); - self.common.output_textures[index] = - Some(target.create_shader_resource_view( - &mut self.staging_heap, - pass.meta.filter, - pass.meta.wrap_mode, - )?); + self.common.output_textures[index] = Some(target.create_shader_resource_view( + &mut self.staging_heap, + pass.meta.filter, + pass.meta.wrap_mode, + )?); source = self.common.output_textures[index].as_ref().unwrap().clone(); return Ok(()); } diff --git a/librashader-runtime-d3d12/tests/hello_triangle/mod.rs b/librashader-runtime-d3d12/tests/hello_triangle/mod.rs index ded9d558..61f569fc 100644 --- a/librashader-runtime-d3d12/tests/hello_triangle/mod.rs +++ b/librashader-runtime-d3d12/tests/hello_triangle/mod.rs @@ -494,7 +494,7 @@ pub mod d3d12_hello_triangle { } fn window_size(&self) -> (i32, i32) { - (3840 , 2160 ) + (3840, 2160) } fn render(&mut self) { diff --git a/librashader-runtime-d3d9/src/filter_chain.rs b/librashader-runtime-d3d9/src/filter_chain.rs index 65115436..044ba446 100644 --- a/librashader-runtime-d3d9/src/filter_chain.rs +++ b/librashader-runtime-d3d9/src/filter_chain.rs @@ -264,7 +264,8 @@ impl FilterChainD3D9 { let (output_framebuffers, output_textures) = framebuffer_init.init_output_framebuffers()?; // initialize feedback framebuffers - let (feedback_framebuffers, feedback_textures) = framebuffer_init.init_feedback_framebuffers()?; + let (feedback_framebuffers, feedback_textures) = + framebuffer_init.init_feedback_framebuffers()?; // initialize history let (history_framebuffers, history_textures) = framebuffer_init.init_history()?; @@ -461,7 +462,10 @@ impl FilterChainD3D9 { for index in 0..passes_len { if self.feedback_framebuffers.contains(index) { - std::mem::swap(&mut self.output_framebuffers[index], &mut self.feedback_framebuffers[index]); + std::mem::swap( + &mut self.output_framebuffers[index], + &mut self.feedback_framebuffers[index], + ); } } diff --git a/librashader-runtime-gl/src/filter_chain/chain.rs b/librashader-runtime-gl/src/filter_chain/chain.rs index 5fb84e8d..ff1dd825 100644 --- a/librashader-runtime-gl/src/filter_chain/chain.rs +++ b/librashader-runtime-gl/src/filter_chain/chain.rs @@ -203,7 +203,8 @@ impl FilterChainImpl { let (output_framebuffers, output_textures) = framebuffer_init.init_output_framebuffers()?; // initialize feedback framebuffers - let (feedback_framebuffers, feedback_textures) = framebuffer_init.init_feedback_framebuffers()?; + let (feedback_framebuffers, feedback_textures) = + framebuffer_init.init_feedback_framebuffers()?; // initialize history let (history_framebuffers, history_textures) = framebuffer_init.init_history()?; @@ -471,7 +472,10 @@ impl FilterChainImpl { // swap feedback framebuffers with output for index in 0..passes_len { if self.feedback_framebuffers.contains(index) { - std::mem::swap(&mut self.output_framebuffers[index], &mut self.feedback_framebuffers[index]); + std::mem::swap( + &mut self.output_framebuffers[index], + &mut self.feedback_framebuffers[index], + ); } } diff --git a/librashader-runtime-mtl/src/filter_chain.rs b/librashader-runtime-mtl/src/filter_chain.rs index 6719faaa..df4fda2f 100644 --- a/librashader-runtime-mtl/src/filter_chain.rs +++ b/librashader-runtime-mtl/src/filter_chain.rs @@ -342,7 +342,8 @@ impl FilterChainMetal { let (output_framebuffers, output_textures) = framebuffer_init.init_output_framebuffers()?; // // initialize feedback framebuffers - let (feedback_framebuffers, feedback_textures) = framebuffer_init.init_feedback_framebuffers()?; + let (feedback_framebuffers, feedback_textures) = + framebuffer_init.init_feedback_framebuffers()?; // // initialize history let (history_framebuffers, history_textures) = framebuffer_init.init_history()?; @@ -446,7 +447,10 @@ impl FilterChainMetal { // swap output and feedback **before** recording command buffers for index in 0..passes_len { if self.feedback_framebuffers.contains(index) { - std::mem::swap(&mut self.output_framebuffers[index], &mut self.feedback_framebuffers[index]); + std::mem::swap( + &mut self.output_framebuffers[index], + &mut self.feedback_framebuffers[index], + ); } } diff --git a/librashader-runtime-vk/src/filter_chain.rs b/librashader-runtime-vk/src/filter_chain.rs index 2b1ae263..b8945311 100644 --- a/librashader-runtime-vk/src/filter_chain.rs +++ b/librashader-runtime-vk/src/filter_chain.rs @@ -471,7 +471,8 @@ impl FilterChainVulkan { let (output_framebuffers, output_textures) = framebuffer_init.init_output_framebuffers()?; // initialize feedback framebuffers - let (feedback_framebuffers, feedback_textures) = framebuffer_init.init_feedback_framebuffers()?; + let (feedback_framebuffers, feedback_textures) = + framebuffer_init.init_feedback_framebuffers()?; // initialize history let (history_framebuffers, history_textures) = framebuffer_init.init_history()?; @@ -738,7 +739,10 @@ impl FilterChainVulkan { // swap output and feedback **before** recording command buffers for index in 0..passes_len { if self.feedback_framebuffers.contains(index) { - std::mem::swap(&mut self.output_framebuffers[index], &mut self.feedback_framebuffers[index]); + std::mem::swap( + &mut self.output_framebuffers[index], + &mut self.feedback_framebuffers[index], + ); } } @@ -859,8 +863,7 @@ impl FilterChainVulkan { None }; - let output_image = - OutputImage::new(&self.vulkan.device, viewport.output.clone())?; + let output_image = OutputImage::new(&self.vulkan.device, viewport.output.clone())?; let out = RenderTarget::viewport_with_output(&output_image, viewport); let residual_fb = pass.draw( diff --git a/librashader-runtime-wgpu/src/filter_chain.rs b/librashader-runtime-wgpu/src/filter_chain.rs index 466a9bb0..a33f8f04 100644 --- a/librashader-runtime-wgpu/src/filter_chain.rs +++ b/librashader-runtime-wgpu/src/filter_chain.rs @@ -259,7 +259,8 @@ impl FilterChainWgpu { let (output_framebuffers, output_textures) = framebuffer_init.init_output_framebuffers()?; // // initialize feedback framebuffers - let (feedback_framebuffers, feedback_textures) = framebuffer_init.init_feedback_framebuffers()?; + let (feedback_framebuffers, feedback_textures) = + framebuffer_init.init_feedback_framebuffers()?; // // initialize history let (history_framebuffers, history_textures) = framebuffer_init.init_history()?; @@ -486,7 +487,10 @@ impl FilterChainWgpu { // swap output and feedback **before** recording command buffers for index in 0..passes_len { if self.feedback_framebuffers.contains(index) { - std::mem::swap(&mut self.output_framebuffers[index], &mut self.feedback_framebuffers[index]); + std::mem::swap( + &mut self.output_framebuffers[index], + &mut self.feedback_framebuffers[index], + ); } } diff --git a/librashader-runtime-wgpu/src/graphics_pipeline.rs b/librashader-runtime-wgpu/src/graphics_pipeline.rs index 811b0140..dfa15e35 100644 --- a/librashader-runtime-wgpu/src/graphics_pipeline.rs +++ b/librashader-runtime-wgpu/src/graphics_pipeline.rs @@ -152,7 +152,7 @@ impl PipelineLayoutObjects { module: &self.vertex, entry_point: Some(&self.vertex_entry_name), compilation_options: wgpu::PipelineCompilationOptions::default(), - buffers: &[VertexBufferLayout { + buffers: &[Some(VertexBufferLayout { array_stride: std::mem::size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Vertex, attributes: &[ @@ -169,7 +169,7 @@ impl PipelineLayoutObjects { shader_location: 1, }, ], - }], + })], }, fragment: Some(wgpu::FragmentState { module: &self.fragment, diff --git a/librashader-runtime-wgpu/tests/hdr.rs b/librashader-runtime-wgpu/tests/hdr.rs index 883bb03a..73f458a0 100644 --- a/librashader-runtime-wgpu/tests/hdr.rs +++ b/librashader-runtime-wgpu/tests/hdr.rs @@ -26,6 +26,7 @@ fn triangle_wgpu_hdr10() { power_preference: wgpu::PowerPreference::default(), compatible_surface: None, force_fallback_adapter: false, + apply_limit_buckets: false, }) .await .unwrap(); diff --git a/librashader-runtime-wgpu/tests/hello_triangle.rs b/librashader-runtime-wgpu/tests/hello_triangle.rs index 8002867b..3e6904be 100644 --- a/librashader-runtime-wgpu/tests/hello_triangle.rs +++ b/librashader-runtime-wgpu/tests/hello_triangle.rs @@ -87,6 +87,7 @@ impl<'a> State<'a> { power_preference: wgpu::PowerPreference::default(), compatible_surface: Some(&surface), force_fallback_adapter: false, + apply_limit_buckets: false, }) .await .unwrap(); @@ -119,6 +120,7 @@ impl<'a> State<'a> { present_mode: wgpu::PresentMode::Fifo, desired_maximum_frame_latency: 2, alpha_mode: swapchain_capabilities.alpha_modes[0], + color_space: wgpu::SurfaceColorSpace::Auto, view_formats: vec![], }; @@ -164,7 +166,7 @@ impl<'a> State<'a> { module: &shader, entry_point: Some("vs_main"), compilation_options: Default::default(), - buffers: &[Vertex::desc()], + buffers: &[Some(Vertex::desc())], }, fragment: Some(wgpu::FragmentState { module: &shader, @@ -336,7 +338,7 @@ impl<'a> State<'a> { ); self.queue.submit(std::iter::once(encoder.finish())); - output.present(); + self.queue.present(output); self.frame_count += 1; RenderOutcome::Done diff --git a/librashader-runtime/src/framebuffer.rs b/librashader-runtime/src/framebuffer.rs index 3f498210..5e15befd 100644 --- a/librashader-runtime/src/framebuffer.rs +++ b/librashader-runtime/src/framebuffer.rs @@ -63,7 +63,11 @@ impl FramebufferPool { for pass in 0..n { let mut event = freed_at[pass]; while event != usize::MAX { - let Event { slot, key, next_slot } = events[event]; + let Event { + slot, + key, + next_slot, + } = events[event]; free.entry(key).or_default().push(slot); event = next_slot; } @@ -77,7 +81,11 @@ impl FramebufferPool { self.slots[pass] = Slot::new(slot); let free_at = self.last_use[pass] + 1; - events.push(Event { slot, key, next_slot: freed_at[free_at] }); + events.push(Event { + slot, + key, + next_slot: freed_at[free_at], + }); freed_at[free_at] = events.len() - 1; } } @@ -222,7 +230,6 @@ fn init_feedback_framebuffers( owned_generator: impl Fn() -> Result, input_generator: impl Fn() -> I, ) -> Result<(FramebufferPool, Box<[I]>), E> { - // assign feedback slots according to the usage mask fn assign_slots(mask: &BitSet, filters_count: usize) -> (usize, Box<[Slot]>) { let mut slot_of_pass = vec![Slot::NONE; filters_count]; diff --git a/librashader/src/lib.rs b/librashader/src/lib.rs index d2a6a8f8..398fea5d 100644 --- a/librashader/src/lib.rs +++ b/librashader/src/lib.rs @@ -82,7 +82,7 @@ pub mod presets { for (key, value) in source.parameters { map.insert(key, value); } - } + } for parameter in &preset.parameters { if let Some(meta) = map.get_mut(¶meter.name) { meta.initial = parameter.value; diff --git a/test/webgpu-example/Cargo.lock b/test/webgpu-example/Cargo.lock index 01b85878..ac7496a5 100644 --- a/test/webgpu-example/Cargo.lock +++ b/test/webgpu-example/Cargo.lock @@ -58,19 +58,40 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bit-set" -version = "0.9.1" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec 0.8.0", +] + +[[package]] +name = "bit-set" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" +checksum = "0b0f1f60a6be1155c81f2f9fca48157aa87ecb61361d71b0be6e83c8d34f5527" dependencies = [ - "bit-vec", + "bit-vec 0.10.0", ] +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bit-vec" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" +[[package]] +name = "bit-vec" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27072b69db792194938b8a1ae8f1e4a003ba53437a719cf6ddc21f32229f0586" + [[package]] name = "bitflags" version = "2.11.1" @@ -323,8 +344,6 @@ dependencies = [ "allocator-api2", "equivalent", "foldhash 0.2.0", - "serde", - "serde_core", ] [[package]] @@ -332,12 +351,11 @@ name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" +dependencies = [ + "foldhash 0.2.0", + "serde", + "serde_core", +] [[package]] name = "image" @@ -402,7 +420,7 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "librashader-common" -version = "0.10.1" +version = "0.11.4" dependencies = [ "bitflags", "halfbrown", @@ -415,7 +433,7 @@ dependencies = [ [[package]] name = "librashader-pack" -version = "0.10.1" +version = "0.11.4" dependencies = [ "base64", "image", @@ -429,7 +447,7 @@ dependencies = [ [[package]] name = "librashader-preprocess" -version = "0.10.1" +version = "0.11.4" dependencies = [ "encoding_rs", "librashader-common", @@ -440,7 +458,7 @@ dependencies = [ [[package]] name = "librashader-presets" -version = "0.10.1" +version = "0.11.4" dependencies = [ "librashader-common", "librashader-preprocess", @@ -456,7 +474,7 @@ dependencies = [ [[package]] name = "librashader-reflect" -version = "0.10.1" +version = "0.11.4" dependencies = [ "bitflags", "bytemuck", @@ -473,10 +491,11 @@ dependencies = [ [[package]] name = "librashader-runtime" -version = "0.10.1" +version = "0.11.4" dependencies = [ "arc-swap", "array-concat", + "bit-set 0.8.0", "bytemuck", "image", "librashader-common", @@ -489,7 +508,7 @@ dependencies = [ [[package]] name = "librashader-runtime-wgpu" -version = "0.10.1" +version = "0.11.4" dependencies = [ "array-concat", "bytemuck", @@ -570,22 +589,22 @@ dependencies = [ [[package]] name = "naga" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd91265cc2454558f659b3b4b9640f0ddb8cc6521277f166b8a8c181c898079" +checksum = "23bf0a141a9ab6f07dbb492db53245e464bc9db42f407772d9ae03d83a2c1033" dependencies = [ "arrayvec", - "bit-set", + "bit-set 0.10.1", "bitflags", "cfg-if", "cfg_aliases", "codespan-reporting", "half", - "hashbrown 0.16.1", - "hexf-parse", + "hashbrown 0.17.1", "indexmap", "libm", "log", + "naga-types", "num-traits", "once_cell", "petgraph", @@ -596,6 +615,19 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "naga-types" +version = "30.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658200ddc25c6c7b860747516d132d1b284c0fafb7a380233acee9a72fb30e11" +dependencies = [ + "hashbrown 0.17.1", + "indexmap", + "rustc-hash 1.1.0", + "serde", + "thiserror", +] + [[package]] name = "nom" version = "8.0.0" @@ -1060,9 +1092,9 @@ dependencies = [ [[package]] name = "wgpu" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb3feacc458f7bee8bc1737149b42b6c731aa461039a4264a67bb6681646b250" +checksum = "6d8f4bd44d92da5270f03409dba9f952dab24f128e05d6a554926101d1bf9114" dependencies = [ "arrayvec", "bitflags", @@ -1070,7 +1102,7 @@ dependencies = [ "cfg-if", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "js-sys", "log", "naga", @@ -1089,21 +1121,22 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02da3ad1b568337f25513b317870960ef87073ea0945502e44b864b67a8c77b7" +checksum = "08763620e76fc980bca7bf84de82568614487a53172dd968d89187282eb87fa2" dependencies = [ "arrayvec", - "bit-set", - "bit-vec", + "bit-set 0.10.1", + "bit-vec 0.9.1", "bitflags", "bytemuck", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "indexmap", "log", "naga", + "naga-types", "once_cell", "parking_lot", "portable-atomic", @@ -1120,29 +1153,32 @@ dependencies = [ [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb01076d0aa08b0ba9bd741e178b5cc440f5abe99d9581323a4c8b5d1a1916" +checksum = "f76bc9c1c186ff3d9054e0d224c93c8c1c79d6653907c5249a5c1ea1a2cb1e43" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8e1a9e7a8512f276f7c62e018c7fa8d60954303fed2e5750114332049193f" +checksum = "cf765132d8d5f50e192e7880464890c13f4e7457aafe8e5466e8174586e9f101" dependencies = [ "bitflags", "cfg-if", "cfg_aliases", + "hashbrown 0.17.1", "libloading", "log", "naga", + "naga-types", "portable-atomic", "portable-atomic-util", "raw-window-handle", "renderdoc-sys", + "static_assertions", "thiserror", "wgpu-naga-bridge", "wgpu-types", @@ -1150,9 +1186,9 @@ dependencies = [ [[package]] name = "wgpu-naga-bridge" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c654c483f058800972c3645e95388a7eca31bf9fe1933bc20e036588a0be02" +checksum = "c9eaac644e5008925c78567d272b9d66ef83da55a53cc17fc7daade7bb6e66e5" dependencies = [ "naga", "wgpu-types", @@ -1160,15 +1196,17 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "29.0.3" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9bcc31518a0e9735aefebedb5f7a9ef3ed1c42549c9f4c882fa9060ceaac639" +checksum = "1a9c93c2b35edde326df60ffdee4c0f5864eac3011d6768b70d43f028ad93565" dependencies = [ "bitflags", "bytemuck", "js-sys", "log", + "naga-types", "raw-window-handle", + "static_assertions", "web-sys", ] diff --git a/test/webgpu-example/Cargo.toml b/test/webgpu-example/Cargo.toml index 2a4f2e3f..a403298f 100644 --- a/test/webgpu-example/Cargo.toml +++ b/test/webgpu-example/Cargo.toml @@ -16,7 +16,7 @@ librashader-common = { path = "../../librashader-common", version = "0.11.0", fe librashader-pack = { path = "../../librashader-pack", version = "0.11.0", default-features = false, features = ["serde"] } librashader-runtime-wgpu = { path = "../../librashader-runtime-wgpu", version = "0.11.0", default-features = false, features = ["wgsl_preset_pack", "wgpu_webgpu"] } -wgpu = { version = "29", default-features = false, features = ["wgsl", "webgpu"] } +wgpu = { version = "30", default-features = false, features = ["wgsl", "webgpu"] } bytemuck = { version = "1.14", features = ["derive"] } rmp-serde = "1.3" diff --git a/test/webgpu-example/src/lib.rs b/test/webgpu-example/src/lib.rs index 5f28e9bc..f017ff2e 100644 --- a/test/webgpu-example/src/lib.rs +++ b/test/webgpu-example/src/lib.rs @@ -75,6 +75,7 @@ pub async fn run(canvas_id: String) -> Result<(), JsValue> { power_preference: wgpu::PowerPreference::HighPerformance, compatible_surface: Some(&surface), force_fallback_adapter: false, + apply_limit_buckets: false, }) .await .map_err(|e| JsValue::from_str(&format!("request_adapter: {e:?}")))?; @@ -115,6 +116,7 @@ pub async fn run(canvas_id: String) -> Result<(), JsValue> { present_mode: wgpu::PresentMode::Fifo, desired_maximum_frame_latency: 2, alpha_mode: surface_caps.alpha_modes[0], + color_space: wgpu::SurfaceColorSpace::Auto, view_formats: vec![], }, ); @@ -335,7 +337,7 @@ impl Demo { self.frame_count = self.frame_count.wrapping_add(1); self.queue.submit([cmd.finish()]); - frame.present(); + self.queue.present(frame); } }