From abc31ac2b214dadba48de1e3203f294136c7c6fe Mon Sep 17 00:00:00 2001 From: Eduard-Mihai Burtescu Date: Thu, 23 Mar 2023 06:30:25 +0200 Subject: [PATCH] HACK(eddyb): avoid push constants on wasm/WebGPU. --- examples/runners/wgpu/src/graphics.rs | 17 ++++++++++++----- examples/runners/wgpu/src/lib.rs | 7 ++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/examples/runners/wgpu/src/graphics.rs b/examples/runners/wgpu/src/graphics.rs index a98e06d2e0..8fe72d67fd 100644 --- a/examples/runners/wgpu/src/graphics.rs +++ b/examples/runners/wgpu/src/graphics.rs @@ -164,6 +164,10 @@ async fn run( let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { label: None, bind_group_layouts: &[], + // HACK(eddyb) disabling push constants to test WebGPU. + #[cfg(target_arch = "wasm32")] + push_constant_ranges: &[], + #[cfg(not(target_arch = "wasm32"))] push_constant_ranges: &[wgpu::PushConstantRange { stages: wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT, range: 0..std::mem::size_of::() as u32, @@ -298,11 +302,14 @@ async fn run( }; rpass.set_pipeline(render_pipeline); - rpass.set_push_constants( - wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT, - 0, - bytemuck::bytes_of(&push_constants), - ); + // HACK(eddyb) disabling push constants to test WebGPU. + if cfg!(not(target_arch = "wasm32")) { + rpass.set_push_constants( + wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT, + 0, + bytemuck::bytes_of(&push_constants), + ); + } rpass.draw(0..3, 0..1); } diff --git a/examples/runners/wgpu/src/lib.rs b/examples/runners/wgpu/src/lib.rs index 4bdb7cd9cc..bd8420b8d6 100644 --- a/examples/runners/wgpu/src/lib.rs +++ b/examples/runners/wgpu/src/lib.rs @@ -161,13 +161,18 @@ pub struct Options { pub fn main( #[cfg(target_os = "android")] android_app: winit::platform::android::activity::AndroidApp, ) { - let options: Options = Options::from_args(); + let mut options: Options = Options::from_args(); #[cfg(not(any(target_os = "android", target_arch = "wasm32")))] if options.shader == RustGPUShader::Compute { return compute::start(&options); } + // HACK(eddyb) forcing a shader w/o push constants to test WebGPU. + if cfg!(target_arch = "wasm32") { + options.shader = RustGPUShader::Simplest; + } + graphics::start( #[cfg(target_os = "android")] android_app,