From dd3b2dbb36fa2d8a6499761907f8551884898120 Mon Sep 17 00:00:00 2001 From: Swoorup Joshi Date: Fri, 5 Jul 2024 20:09:29 +1000 Subject: [PATCH] Bind Group Entry Collections can be cloned --- example/src/shader_bindings.rs | 14 ++++++------ ...builder.rs => entry_collection_builder.rs} | 15 ++++++++----- wgsl_bindgen/src/generate/bind_group/mod.rs | 22 +++++++++---------- wgsl_bindgen/src/generate/entry.rs | 2 +- .../tests/output/bindgen_bevy.expected.rs | 6 ++--- .../tests/output/bindgen_main.expected.rs | 4 ++-- .../tests/output/bindgen_minimal.expected.rs | 2 +- .../tests/output/bindgen_padding.expected.rs | 2 +- 8 files changed, 35 insertions(+), 32 deletions(-) rename wgsl_bindgen/src/generate/bind_group/{layout_builder.rs => entry_collection_builder.rs} (93%) diff --git a/example/src/shader_bindings.rs b/example/src/shader_bindings.rs index ea0d93a..572c2cd 100644 --- a/example/src/shader_bindings.rs +++ b/example/src/shader_bindings.rs @@ -1,8 +1,8 @@ // File automatically generated by wgsl_bindgen^ // -// ^ wgsl_bindgen version 0.13.0 +// ^ wgsl_bindgen version 0.13.1 // Changes made to this file will not be saved. -// SourceHash: 112bfdc89aaa10c3f61563be4e9b48031c48faa832509d6d311f6d8a64e00ece +// SourceHash: 2b45485af563080519b2d0271439c5c6b88e20d1688598059cdfb48aaaaa94c9 #![allow(unused, non_snake_case, non_camel_case_types, non_upper_case_globals)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] @@ -518,7 +518,7 @@ pub mod testbed { pub color_texture: &'a wgpu::TextureView, pub color_sampler: &'a wgpu::Sampler, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup0EntryCollection<'a> { pub color_texture: wgpu::BindGroupEntry<'a>, pub color_sampler: wgpu::BindGroupEntry<'a>, @@ -601,7 +601,7 @@ pub mod testbed { pub struct WgpuBindGroup1EntryCollectionParams<'a> { pub uniforms: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup1EntryCollection<'a> { pub uniforms: wgpu::BindGroupEntry<'a>, } @@ -675,7 +675,7 @@ pub mod testbed { pub h: wgpu::BufferBinding<'a>, pub i: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup2EntryCollection<'a> { pub rts: wgpu::BindGroupEntry<'a>, pub a: wgpu::BindGroupEntry<'a>, @@ -1281,7 +1281,7 @@ pub mod triangle { pub color_texture: &'a wgpu::TextureView, pub color_sampler: &'a wgpu::Sampler, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup0EntryCollection<'a> { pub color_texture: wgpu::BindGroupEntry<'a>, pub color_sampler: wgpu::BindGroupEntry<'a>, @@ -1364,7 +1364,7 @@ pub mod triangle { pub struct WgpuBindGroup1EntryCollectionParams<'a> { pub uniforms: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup1EntryCollection<'a> { pub uniforms: wgpu::BindGroupEntry<'a>, } diff --git a/wgsl_bindgen/src/generate/bind_group/layout_builder.rs b/wgsl_bindgen/src/generate/bind_group/entry_collection_builder.rs similarity index 93% rename from wgsl_bindgen/src/generate/bind_group/layout_builder.rs rename to wgsl_bindgen/src/generate/bind_group/entry_collection_builder.rs index fc4d243..705293d 100644 --- a/wgsl_bindgen/src/generate/bind_group/layout_builder.rs +++ b/wgsl_bindgen/src/generate/bind_group/entry_collection_builder.rs @@ -4,14 +4,14 @@ use self::quote_gen::RustItemPath; use super::*; #[derive(Constructor)] -pub(super) struct BindGroupLayoutBuilder<'a> { +pub(super) struct BindGroupEntryCollectionBuilder<'a> { invoking_entry_module: &'a str, group_no: u32, data: &'a GroupData<'a>, generator: &'a BindGroupLayoutGenerator, } -impl<'a> BindGroupLayoutBuilder<'a> { +impl<'a> BindGroupEntryCollectionBuilder<'a> { /// Generates a binding entry from a parameter variable and a group binding. fn create_entry_from_parameter( &self, @@ -116,11 +116,14 @@ impl<'a> BindGroupLayoutBuilder<'a> { .map(|binding| self.binding_field_tuple(binding)) .collect(); - let entry_collection_name = - self.generator.bind_group_entry_collection_struct_name_ident(self.group_no); + let entry_collection_name = self + .generator + .bind_group_entry_collection_struct_name_ident(self.group_no); let entry_collection_param_name = format_ident!( "{}Params", - self.generator.bind_group_entry_collection_struct_name_ident(self.group_no) + self + .generator + .bind_group_entry_collection_struct_name_ident(self.group_no) ); let entry_struct_type = self.generator.entry_struct_type.clone(); @@ -141,7 +144,7 @@ impl<'a> BindGroupLayoutBuilder<'a> { #(#entries_param_fields),* } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct #entry_collection_name #lifetime { #(#entries_fields),* } diff --git a/wgsl_bindgen/src/generate/bind_group/mod.rs b/wgsl_bindgen/src/generate/bind_group/mod.rs index f9fec7f..06b47f8 100644 --- a/wgsl_bindgen/src/generate/bind_group/mod.rs +++ b/wgsl_bindgen/src/generate/bind_group/mod.rs @@ -7,8 +7,8 @@ use quote_gen::{demangle_and_fully_qualify_str, rust_type}; use crate::wgsl::buffer_binding_type; use crate::*; -mod layout_builder; -use layout_builder::*; +mod entry_collection_builder; +use entry_collection_builder::*; pub struct GroupData<'a> { pub bindings: Vec>, @@ -152,7 +152,7 @@ pub fn bind_groups_module( .map(|(group_no, group)| { let wgpu_generator = &options.wgpu_binding_generator; - let wgpu_layout = BindGroupLayoutBuilder::new( + let bind_group_entry_collection = BindGroupEntryCollectionBuilder::new( invoking_entry_module, *group_no, group, @@ -162,7 +162,7 @@ pub fn bind_groups_module( let additional_layout = if let Some(additional_generator) = &options.extra_binding_generator { - BindGroupLayoutBuilder::new( + BindGroupEntryCollectionBuilder::new( invoking_entry_module, *group_no, group, @@ -186,7 +186,7 @@ pub fn bind_groups_module( quote! { #additional_layout - #wgpu_layout + #bind_group_entry_collection #bindgroup } }) @@ -544,7 +544,7 @@ mod tests { pub vertex_weights: wgpu::BufferBinding<'a>, pub dst: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup0EntryCollection<'a> { pub src: wgpu::BindGroupEntry<'a>, pub vertex_weights: wgpu::BindGroupEntry<'a>, @@ -646,7 +646,7 @@ mod tests { pub struct WgpuBindGroup1EntryCollectionParams<'a> { pub transforms: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup1EntryCollection<'a> { pub transforms: wgpu::BindGroupEntry<'a>, } @@ -803,7 +803,7 @@ mod tests { pub color_texture_msaa: &'a wgpu::TextureView, pub depth_texture_msaa: &'a wgpu::TextureView, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup0EntryCollection<'a> { pub color_texture: wgpu::BindGroupEntry<'a>, pub color_texture_i32: wgpu::BindGroupEntry<'a>, @@ -1055,7 +1055,7 @@ mod tests { pub transforms: wgpu::BufferBinding<'a>, pub one: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup1EntryCollection<'a> { pub transforms: wgpu::BindGroupEntry<'a>, pub one: wgpu::BindGroupEntry<'a>, @@ -1190,7 +1190,7 @@ mod tests { pub struct WgpuBindGroup0EntryCollectionParams<'a> { pub transforms: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup0EntryCollection<'a> { pub transforms: wgpu::BindGroupEntry<'a>, } @@ -1304,7 +1304,7 @@ mod tests { pub struct WgpuBindGroup0EntryCollectionParams<'a> { pub transforms: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup0EntryCollection<'a> { pub transforms: wgpu::BindGroupEntry<'a>, } diff --git a/wgsl_bindgen/src/generate/entry.rs b/wgsl_bindgen/src/generate/entry.rs index 3309860..40e1634 100644 --- a/wgsl_bindgen/src/generate/entry.rs +++ b/wgsl_bindgen/src/generate/entry.rs @@ -707,7 +707,7 @@ mod test { } } pub fn vs_main_entry( - input0: wgpu::VertexStepMode, + input0: wgpu::VertexStepMode, input1: wgpu::VertexStepMode, overrides: &OverrideConstants ) -> VertexEntry<2> { diff --git a/wgsl_bindgen/tests/output/bindgen_bevy.expected.rs b/wgsl_bindgen/tests/output/bindgen_bevy.expected.rs index 49a8b06..2a3570e 100644 --- a/wgsl_bindgen/tests/output/bindgen_bevy.expected.rs +++ b/wgsl_bindgen/tests/output/bindgen_bevy.expected.rs @@ -712,7 +712,7 @@ pub mod pbr { pub directional_shadow_textures: &'a wgpu::TextureView, pub directional_shadow_textures_sampler: &'a wgpu::Sampler, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup0EntryCollection<'a> { pub view: wgpu::BindGroupEntry<'a>, pub lights: wgpu::BindGroupEntry<'a>, @@ -937,7 +937,7 @@ pub mod pbr { pub struct WgpuBindGroup1EntryCollectionParams<'a> { pub material: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup1EntryCollection<'a> { pub material: wgpu::BindGroupEntry<'a>, } @@ -1006,7 +1006,7 @@ pub mod pbr { pub struct WgpuBindGroup2EntryCollectionParams<'a> { pub mesh: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup2EntryCollection<'a> { pub mesh: wgpu::BindGroupEntry<'a>, } diff --git a/wgsl_bindgen/tests/output/bindgen_main.expected.rs b/wgsl_bindgen/tests/output/bindgen_main.expected.rs index 3e881e0..af5ed64 100644 --- a/wgsl_bindgen/tests/output/bindgen_main.expected.rs +++ b/wgsl_bindgen/tests/output/bindgen_main.expected.rs @@ -107,7 +107,7 @@ pub mod main { pub texture_sint: &'a wgpu::TextureView, pub texture_uint: &'a wgpu::TextureView, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup0EntryCollection<'a> { pub buffer: wgpu::BindGroupEntry<'a>, pub texture_float: wgpu::BindGroupEntry<'a>, @@ -226,7 +226,7 @@ pub mod main { pub struct WgpuBindGroup1EntryCollectionParams<'a> { pub ONE: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup1EntryCollection<'a> { pub ONE: wgpu::BindGroupEntry<'a>, } diff --git a/wgsl_bindgen/tests/output/bindgen_minimal.expected.rs b/wgsl_bindgen/tests/output/bindgen_minimal.expected.rs index c5a6785..d7256d4 100644 --- a/wgsl_bindgen/tests/output/bindgen_minimal.expected.rs +++ b/wgsl_bindgen/tests/output/bindgen_minimal.expected.rs @@ -85,7 +85,7 @@ pub mod minimal { pub struct WgpuBindGroup0EntryCollectionParams<'a> { pub uniform_buf: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup0EntryCollection<'a> { pub uniform_buf: wgpu::BindGroupEntry<'a>, } diff --git a/wgsl_bindgen/tests/output/bindgen_padding.expected.rs b/wgsl_bindgen/tests/output/bindgen_padding.expected.rs index 54d1208..38e462c 100644 --- a/wgsl_bindgen/tests/output/bindgen_padding.expected.rs +++ b/wgsl_bindgen/tests/output/bindgen_padding.expected.rs @@ -88,7 +88,7 @@ pub mod padding { pub struct WgpuBindGroup0EntryCollectionParams<'a> { pub frame: wgpu::BufferBinding<'a>, } - #[derive(Debug)] + #[derive(Clone, Debug)] pub struct WgpuBindGroup0EntryCollection<'a> { pub frame: wgpu::BindGroupEntry<'a>, }