wgpu: Clean up DynamicTransforms, after the merge
This commit is contained in:
parent
c3423b86f8
commit
3be2efe7cf
|
@ -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<Transforms>,
|
||||
}
|
||||
|
||||
impl DynamicTransforms {
|
||||
pub fn new(descriptors: &Descriptors) -> Self {
|
||||
Self {
|
||||
transform: Inner::new(&descriptors.device, &descriptors.bind_layouts.transforms),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Inner<T> {
|
||||
_phantom: PhantomData<T>,
|
||||
pub buffer: wgpu::Buffer,
|
||||
pub bind_group: wgpu::BindGroup,
|
||||
}
|
||||
|
||||
impl<T> Inner<T> {
|
||||
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::<T>() 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::<Transforms>() 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::<T>() 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::<Transforms>() as u64),
|
||||
}),
|
||||
}],
|
||||
});
|
||||
Self { buffer, bind_group }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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<Chunk>,
|
||||
|
@ -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),
|
||||
|
|
Loading…
Reference in New Issue