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::descriptors::Descriptors;
|
||||||
use crate::Transforms;
|
use crate::Transforms;
|
||||||
use std::marker::PhantomData;
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
const ESTIMATED_OBJECTS_PER_CHUNK: u64 = 200;
|
const ESTIMATED_OBJECTS_PER_CHUNK: u64 = 200;
|
||||||
|
|
||||||
pub struct DynamicTransforms {
|
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 buffer: wgpu::Buffer,
|
||||||
pub bind_group: wgpu::BindGroup,
|
pub bind_group: wgpu::BindGroup,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> Inner<T> {
|
impl DynamicTransforms {
|
||||||
pub fn new(device: &wgpu::Device, layout: &wgpu::BindGroupLayout) -> Self {
|
pub fn new(descriptors: &Descriptors) -> Self {
|
||||||
let buffer = device.create_buffer(&wgpu::BufferDescriptor {
|
let buffer = descriptors.device.create_buffer(&wgpu::BufferDescriptor {
|
||||||
label: None,
|
label: None,
|
||||||
size: (mem::size_of::<T>() as u64 * ESTIMATED_OBJECTS_PER_CHUNK)
|
size: (mem::size_of::<Transforms>() as u64 * ESTIMATED_OBJECTS_PER_CHUNK)
|
||||||
.min(device.limits().max_uniform_buffer_binding_size as u64)
|
.min(descriptors.limits.max_uniform_buffer_binding_size as u64)
|
||||||
.min(device.limits().max_buffer_size),
|
.min(descriptors.limits.max_buffer_size),
|
||||||
usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
|
usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
|
||||||
mapped_at_creation: false,
|
mapped_at_creation: false,
|
||||||
});
|
});
|
||||||
let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
|
let bind_group = descriptors
|
||||||
|
.device
|
||||||
|
.create_bind_group(&wgpu::BindGroupDescriptor {
|
||||||
label: None,
|
label: None,
|
||||||
layout,
|
layout: &descriptors.bind_layouts.transforms,
|
||||||
entries: &[wgpu::BindGroupEntry {
|
entries: &[wgpu::BindGroupEntry {
|
||||||
binding: 0,
|
binding: 0,
|
||||||
resource: wgpu::BindingResource::Buffer(wgpu::BufferBinding {
|
resource: wgpu::BindingResource::Buffer(wgpu::BufferBinding {
|
||||||
buffer: &buffer,
|
buffer: &buffer,
|
||||||
offset: 0,
|
offset: 0,
|
||||||
size: wgpu::BufferSize::new(mem::size_of::<T>() as u64),
|
size: wgpu::BufferSize::new(mem::size_of::<Transforms>() as u64),
|
||||||
}),
|
}),
|
||||||
}],
|
}],
|
||||||
});
|
});
|
||||||
Self {
|
Self { buffer, bind_group }
|
||||||
_phantom: PhantomData,
|
|
||||||
buffer,
|
|
||||||
bind_group,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,7 +155,7 @@ impl Surface {
|
||||||
staging_belt,
|
staging_belt,
|
||||||
&descriptors.device,
|
&descriptors.device,
|
||||||
draw_encoder,
|
draw_encoder,
|
||||||
&dynamic_transforms.transform.buffer,
|
&dynamic_transforms.buffer,
|
||||||
);
|
);
|
||||||
let mut render_pass =
|
let mut render_pass =
|
||||||
draw_encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
|
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.prep_bitmap(&bind.bind_group, blend_mode, render_stage3d);
|
||||||
self.render_pass.set_bind_group(
|
self.render_pass.set_bind_group(
|
||||||
1,
|
1,
|
||||||
&self.dynamic_transforms.transform.bind_group,
|
&self.dynamic_transforms.bind_group,
|
||||||
&[transform_buffer],
|
&[transform_buffer],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ impl<'pass, 'frame: 'pass, 'global: 'frame> CommandRenderer<'pass, 'frame, 'glob
|
||||||
|
|
||||||
self.render_pass.set_bind_group(
|
self.render_pass.set_bind_group(
|
||||||
1,
|
1,
|
||||||
&self.dynamic_transforms.transform.bind_group,
|
&self.dynamic_transforms.bind_group,
|
||||||
&[transform_buffer],
|
&[transform_buffer],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -264,7 +264,7 @@ impl<'pass, 'frame: 'pass, 'global: 'frame> CommandRenderer<'pass, 'frame, 'glob
|
||||||
}
|
}
|
||||||
self.render_pass.set_bind_group(
|
self.render_pass.set_bind_group(
|
||||||
1,
|
1,
|
||||||
&self.dynamic_transforms.transform.bind_group,
|
&self.dynamic_transforms.bind_group,
|
||||||
&[transform_buffer],
|
&[transform_buffer],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -287,7 +287,7 @@ impl<'pass, 'frame: 'pass, 'global: 'frame> CommandRenderer<'pass, 'frame, 'glob
|
||||||
|
|
||||||
self.render_pass.set_bind_group(
|
self.render_pass.set_bind_group(
|
||||||
1,
|
1,
|
||||||
&self.dynamic_transforms.transform.bind_group,
|
&self.dynamic_transforms.bind_group,
|
||||||
&[transform_buffer],
|
&[transform_buffer],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -410,7 +410,7 @@ pub fn chunk_blends<'a>(
|
||||||
let mut num_masks = 0;
|
let mut num_masks = 0;
|
||||||
let mut transforms = BufferBuilder::new_for_uniform(&descriptors.limits);
|
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(
|
fn add_to_current(
|
||||||
result: &mut Vec<Chunk>,
|
result: &mut Vec<Chunk>,
|
||||||
|
@ -451,7 +451,7 @@ pub fn chunk_blends<'a>(
|
||||||
BufferBuilder::new_for_uniform(&descriptors.limits),
|
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
|
let transform_range = transforms
|
||||||
.add(&[transform])
|
.add(&[transform])
|
||||||
.expect("Buffer must be able to fit a new thing, it was just emptied");
|
.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 {
|
let chunk_blend_mode = match blend_type {
|
||||||
BlendType::Complex(complex) => ChunkBlendMode::Complex(complex),
|
BlendType::Complex(complex) => ChunkBlendMode::Complex(complex),
|
||||||
BlendType::Shader(shader) => ChunkBlendMode::Shader(shader),
|
BlendType::Shader(shader) => ChunkBlendMode::Shader(shader),
|
||||||
|
|
Loading…
Reference in New Issue