From 3be2efe7cfd18dfeae629a5f6f6abf1977ec50c3 Mon Sep 17 00:00:00 2001 From: Nathan Adams Date: Wed, 24 Jan 2024 00:22:38 +0100 Subject: [PATCH] wgpu: Clean up DynamicTransforms, after the merge --- render/wgpu/src/dynamic_transforms.rs | 58 ++++++++++----------------- render/wgpu/src/surface.rs | 2 +- render/wgpu/src/surface/commands.rs | 14 +++---- 3 files changed, 29 insertions(+), 45 deletions(-) diff --git a/render/wgpu/src/dynamic_transforms.rs b/render/wgpu/src/dynamic_transforms.rs index 82f183bee..d01b63d2e 100644 --- a/render/wgpu/src/dynamic_transforms.rs +++ b/render/wgpu/src/dynamic_transforms.rs @@ -1,54 +1,38 @@ use crate::descriptors::Descriptors; use crate::Transforms; -use std::marker::PhantomData; use std::mem; const ESTIMATED_OBJECTS_PER_CHUNK: u64 = 200; pub struct DynamicTransforms { - pub transform: Inner, -} - -impl DynamicTransforms { - pub fn new(descriptors: &Descriptors) -> Self { - Self { - transform: Inner::new(&descriptors.device, &descriptors.bind_layouts.transforms), - } - } -} - -pub struct Inner { - _phantom: PhantomData, pub buffer: wgpu::Buffer, pub bind_group: wgpu::BindGroup, } -impl Inner { - pub fn new(device: &wgpu::Device, layout: &wgpu::BindGroupLayout) -> Self { - let buffer = device.create_buffer(&wgpu::BufferDescriptor { +impl DynamicTransforms { + pub fn new(descriptors: &Descriptors) -> Self { + let buffer = descriptors.device.create_buffer(&wgpu::BufferDescriptor { label: None, - size: (mem::size_of::() as u64 * ESTIMATED_OBJECTS_PER_CHUNK) - .min(device.limits().max_uniform_buffer_binding_size as u64) - .min(device.limits().max_buffer_size), + size: (mem::size_of::() as u64 * ESTIMATED_OBJECTS_PER_CHUNK) + .min(descriptors.limits.max_uniform_buffer_binding_size as u64) + .min(descriptors.limits.max_buffer_size), usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, mapped_at_creation: false, }); - let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { - label: None, - layout, - entries: &[wgpu::BindGroupEntry { - binding: 0, - resource: wgpu::BindingResource::Buffer(wgpu::BufferBinding { - buffer: &buffer, - offset: 0, - size: wgpu::BufferSize::new(mem::size_of::() as u64), - }), - }], - }); - Self { - _phantom: PhantomData, - buffer, - bind_group, - } + let bind_group = descriptors + .device + .create_bind_group(&wgpu::BindGroupDescriptor { + label: None, + layout: &descriptors.bind_layouts.transforms, + entries: &[wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::Buffer(wgpu::BufferBinding { + buffer: &buffer, + offset: 0, + size: wgpu::BufferSize::new(mem::size_of::() as u64), + }), + }], + }); + Self { buffer, bind_group } } } diff --git a/render/wgpu/src/surface.rs b/render/wgpu/src/surface.rs index 55fc6e3e4..9d3fee6fa 100644 --- a/render/wgpu/src/surface.rs +++ b/render/wgpu/src/surface.rs @@ -155,7 +155,7 @@ impl Surface { staging_belt, &descriptors.device, draw_encoder, - &dynamic_transforms.transform.buffer, + &dynamic_transforms.buffer, ); let mut render_pass = draw_encoder.begin_render_pass(&wgpu::RenderPassDescriptor { diff --git a/render/wgpu/src/surface/commands.rs b/render/wgpu/src/surface/commands.rs index 2e19d3d9a..ac5cbbb0c 100644 --- a/render/wgpu/src/surface/commands.rs +++ b/render/wgpu/src/surface/commands.rs @@ -187,7 +187,7 @@ impl<'pass, 'frame: 'pass, 'global: 'frame> CommandRenderer<'pass, 'frame, 'glob self.prep_bitmap(&bind.bind_group, blend_mode, render_stage3d); self.render_pass.set_bind_group( 1, - &self.dynamic_transforms.transform.bind_group, + &self.dynamic_transforms.bind_group, &[transform_buffer], ); @@ -214,7 +214,7 @@ impl<'pass, 'frame: 'pass, 'global: 'frame> CommandRenderer<'pass, 'frame, 'glob self.render_pass.set_bind_group( 1, - &self.dynamic_transforms.transform.bind_group, + &self.dynamic_transforms.bind_group, &[transform_buffer], ); @@ -264,7 +264,7 @@ impl<'pass, 'frame: 'pass, 'global: 'frame> CommandRenderer<'pass, 'frame, 'glob } self.render_pass.set_bind_group( 1, - &self.dynamic_transforms.transform.bind_group, + &self.dynamic_transforms.bind_group, &[transform_buffer], ); @@ -287,7 +287,7 @@ impl<'pass, 'frame: 'pass, 'global: 'frame> CommandRenderer<'pass, 'frame, 'glob self.render_pass.set_bind_group( 1, - &self.dynamic_transforms.transform.bind_group, + &self.dynamic_transforms.bind_group, &[transform_buffer], ); @@ -410,7 +410,7 @@ pub fn chunk_blends<'a>( let mut num_masks = 0; let mut transforms = BufferBuilder::new_for_uniform(&descriptors.limits); - transforms.set_buffer_limit(dynamic_transforms.transform.buffer.size()); + transforms.set_buffer_limit(dynamic_transforms.buffer.size()); fn add_to_current( result: &mut Vec, @@ -451,7 +451,7 @@ pub fn chunk_blends<'a>( BufferBuilder::new_for_uniform(&descriptors.limits), ), )); - transforms.set_buffer_limit(dynamic_transforms.transform.buffer.size()); + transforms.set_buffer_limit(dynamic_transforms.buffer.size()); let transform_range = transforms .add(&[transform]) .expect("Buffer must be able to fit a new thing, it was just emptied"); @@ -556,7 +556,7 @@ pub fn chunk_blends<'a>( ), )); } - transforms.set_buffer_limit(dynamic_transforms.transform.buffer.size()); + transforms.set_buffer_limit(dynamic_transforms.buffer.size()); let chunk_blend_mode = match blend_type { BlendType::Complex(complex) => ChunkBlendMode::Complex(complex), BlendType::Shader(shader) => ChunkBlendMode::Shader(shader),