From 76aa03c9dcca136f2e9c46c04be84b3bed6efde2 Mon Sep 17 00:00:00 2001 From: JMS55 <47158642+JMS55@users.noreply.github.com> Date: Wed, 16 Aug 2023 20:26:29 -0700 Subject: [PATCH] Faster set_bind_group for WebGPU backend (#4068) --- wgpu/src/backend/web.rs | 66 ++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/wgpu/src/backend/web.rs b/wgpu/src/backend/web.rs index 5fb8614a23..97f5cb945d 100644 --- a/wgpu/src/backend/web.rs +++ b/wgpu/src/backend/web.rs @@ -2604,15 +2604,19 @@ impl crate::context::Context for Context { bind_group_data: &Self::BindGroupData, offsets: &[wgt::DynamicOffset], ) { - pass_data - .0 - .set_bind_group_with_u32_array_and_f64_and_dynamic_offsets_data_length( - index, - &bind_group_data.0, - offsets, - 0f64, - offsets.len() as u32, - ); + if offsets.is_empty() { + pass_data.0.set_bind_group(index, &bind_group_data.0); + } else { + pass_data + .0 + .set_bind_group_with_u32_array_and_f64_and_dynamic_offsets_data_length( + index, + &bind_group_data.0, + offsets, + 0f64, + offsets.len() as u32, + ); + } } fn compute_pass_set_push_constants( @@ -2729,15 +2733,19 @@ impl crate::context::Context for Context { bind_group_data: &Self::BindGroupData, offsets: &[wgt::DynamicOffset], ) { - encoder_data - .0 - .set_bind_group_with_u32_array_and_f64_and_dynamic_offsets_data_length( - index, - &bind_group_data.0, - offsets, - 0f64, - offsets.len() as u32, - ); + if offsets.is_empty() { + encoder_data.0.set_bind_group(index, &bind_group_data.0); + } else { + encoder_data + .0 + .set_bind_group_with_u32_array_and_f64_and_dynamic_offsets_data_length( + index, + &bind_group_data.0, + offsets, + 0f64, + offsets.len() as u32, + ); + } } fn render_bundle_encoder_set_index_buffer( @@ -2944,15 +2952,19 @@ impl crate::context::Context for Context { bind_group_data: &Self::BindGroupData, offsets: &[wgt::DynamicOffset], ) { - pass_data - .0 - .set_bind_group_with_u32_array_and_f64_and_dynamic_offsets_data_length( - index, - &bind_group_data.0, - offsets, - 0f64, - offsets.len() as u32, - ); + if offsets.is_empty() { + pass_data.0.set_bind_group(index, &bind_group_data.0); + } else { + pass_data + .0 + .set_bind_group_with_u32_array_and_f64_and_dynamic_offsets_data_length( + index, + &bind_group_data.0, + offsets, + 0f64, + offsets.len() as u32, + ); + } } fn render_pass_set_index_buffer(