Remove capacity fields from all Buffer wrapper types (#8301)
# Objective While working on #8299, I noticed that we're using a `capacity` field, even though `wgpu::Buffer` exposes a `size` accessor that does the same thing. ## Solution Remove it from all buffer wrappers. Use `wgpu::Buffer::size` instead. Default to 0 if no buffer has been allocated yet.
This commit is contained in:
parent
63d89d31ba
commit
21e1893c4f
@ -33,7 +33,6 @@ pub struct StorageBuffer<T: ShaderType> {
|
|||||||
value: T,
|
value: T,
|
||||||
scratch: StorageBufferWrapper<Vec<u8>>,
|
scratch: StorageBufferWrapper<Vec<u8>>,
|
||||||
buffer: Option<Buffer>,
|
buffer: Option<Buffer>,
|
||||||
capacity: usize,
|
|
||||||
label: Option<String>,
|
label: Option<String>,
|
||||||
changed: bool,
|
changed: bool,
|
||||||
buffer_usage: BufferUsages,
|
buffer_usage: BufferUsages,
|
||||||
@ -45,7 +44,6 @@ impl<T: ShaderType> From<T> for StorageBuffer<T> {
|
|||||||
value,
|
value,
|
||||||
scratch: StorageBufferWrapper::new(Vec::new()),
|
scratch: StorageBufferWrapper::new(Vec::new()),
|
||||||
buffer: None,
|
buffer: None,
|
||||||
capacity: 0,
|
|
||||||
label: None,
|
label: None,
|
||||||
changed: false,
|
changed: false,
|
||||||
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
|
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
|
||||||
@ -59,7 +57,6 @@ impl<T: ShaderType + Default> Default for StorageBuffer<T> {
|
|||||||
value: T::default(),
|
value: T::default(),
|
||||||
scratch: StorageBufferWrapper::new(Vec::new()),
|
scratch: StorageBufferWrapper::new(Vec::new()),
|
||||||
buffer: None,
|
buffer: None,
|
||||||
capacity: 0,
|
|
||||||
label: None,
|
label: None,
|
||||||
changed: false,
|
changed: false,
|
||||||
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
|
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
|
||||||
@ -124,15 +121,15 @@ impl<T: ShaderType + WriteInto> StorageBuffer<T> {
|
|||||||
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue) {
|
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue) {
|
||||||
self.scratch.write(&self.value).unwrap();
|
self.scratch.write(&self.value).unwrap();
|
||||||
|
|
||||||
let size = self.scratch.as_ref().len();
|
let capacity = self.buffer.as_deref().map(wgpu::Buffer::size).unwrap_or(0);
|
||||||
|
let size = self.scratch.as_ref().len() as u64;
|
||||||
|
|
||||||
if self.capacity < size || self.changed {
|
if capacity < size || self.changed {
|
||||||
self.buffer = Some(device.create_buffer_with_data(&BufferInitDescriptor {
|
self.buffer = Some(device.create_buffer_with_data(&BufferInitDescriptor {
|
||||||
label: self.label.as_deref(),
|
label: self.label.as_deref(),
|
||||||
usage: self.buffer_usage,
|
usage: self.buffer_usage,
|
||||||
contents: self.scratch.as_ref(),
|
contents: self.scratch.as_ref(),
|
||||||
}));
|
}));
|
||||||
self.capacity = size;
|
|
||||||
self.changed = false;
|
self.changed = false;
|
||||||
} else if let Some(buffer) = &self.buffer {
|
} else if let Some(buffer) = &self.buffer {
|
||||||
queue.write_buffer(buffer, 0, self.scratch.as_ref());
|
queue.write_buffer(buffer, 0, self.scratch.as_ref());
|
||||||
@ -164,7 +161,6 @@ impl<T: ShaderType + WriteInto> StorageBuffer<T> {
|
|||||||
pub struct DynamicStorageBuffer<T: ShaderType> {
|
pub struct DynamicStorageBuffer<T: ShaderType> {
|
||||||
scratch: DynamicStorageBufferWrapper<Vec<u8>>,
|
scratch: DynamicStorageBufferWrapper<Vec<u8>>,
|
||||||
buffer: Option<Buffer>,
|
buffer: Option<Buffer>,
|
||||||
capacity: usize,
|
|
||||||
label: Option<String>,
|
label: Option<String>,
|
||||||
changed: bool,
|
changed: bool,
|
||||||
buffer_usage: BufferUsages,
|
buffer_usage: BufferUsages,
|
||||||
@ -176,7 +172,6 @@ impl<T: ShaderType> Default for DynamicStorageBuffer<T> {
|
|||||||
Self {
|
Self {
|
||||||
scratch: DynamicStorageBufferWrapper::new(Vec::new()),
|
scratch: DynamicStorageBufferWrapper::new(Vec::new()),
|
||||||
buffer: None,
|
buffer: None,
|
||||||
capacity: 0,
|
|
||||||
label: None,
|
label: None,
|
||||||
changed: false,
|
changed: false,
|
||||||
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
|
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
|
||||||
@ -236,15 +231,15 @@ impl<T: ShaderType + WriteInto> DynamicStorageBuffer<T> {
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue) {
|
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue) {
|
||||||
let size = self.scratch.as_ref().len();
|
let capacity = self.buffer.as_deref().map(wgpu::Buffer::size).unwrap_or(0);
|
||||||
|
let size = self.scratch.as_ref().len() as u64;
|
||||||
|
|
||||||
if self.capacity < size || self.changed {
|
if capacity < size || self.changed {
|
||||||
self.buffer = Some(device.create_buffer_with_data(&BufferInitDescriptor {
|
self.buffer = Some(device.create_buffer_with_data(&BufferInitDescriptor {
|
||||||
label: self.label.as_deref(),
|
label: self.label.as_deref(),
|
||||||
usage: self.buffer_usage,
|
usage: self.buffer_usage,
|
||||||
contents: self.scratch.as_ref(),
|
contents: self.scratch.as_ref(),
|
||||||
}));
|
}));
|
||||||
self.capacity = size;
|
|
||||||
self.changed = false;
|
self.changed = false;
|
||||||
} else if let Some(buffer) = &self.buffer {
|
} else if let Some(buffer) = &self.buffer {
|
||||||
queue.write_buffer(buffer, 0, self.scratch.as_ref());
|
queue.write_buffer(buffer, 0, self.scratch.as_ref());
|
||||||
|
|||||||
@ -157,7 +157,6 @@ impl<T: ShaderType + WriteInto> UniformBuffer<T> {
|
|||||||
pub struct DynamicUniformBuffer<T: ShaderType> {
|
pub struct DynamicUniformBuffer<T: ShaderType> {
|
||||||
scratch: DynamicUniformBufferWrapper<Vec<u8>>,
|
scratch: DynamicUniformBufferWrapper<Vec<u8>>,
|
||||||
buffer: Option<Buffer>,
|
buffer: Option<Buffer>,
|
||||||
capacity: usize,
|
|
||||||
label: Option<String>,
|
label: Option<String>,
|
||||||
changed: bool,
|
changed: bool,
|
||||||
buffer_usage: BufferUsages,
|
buffer_usage: BufferUsages,
|
||||||
@ -169,7 +168,6 @@ impl<T: ShaderType> Default for DynamicUniformBuffer<T> {
|
|||||||
Self {
|
Self {
|
||||||
scratch: DynamicUniformBufferWrapper::new(Vec::new()),
|
scratch: DynamicUniformBufferWrapper::new(Vec::new()),
|
||||||
buffer: None,
|
buffer: None,
|
||||||
capacity: 0,
|
|
||||||
label: None,
|
label: None,
|
||||||
changed: false,
|
changed: false,
|
||||||
buffer_usage: BufferUsages::COPY_DST | BufferUsages::UNIFORM,
|
buffer_usage: BufferUsages::COPY_DST | BufferUsages::UNIFORM,
|
||||||
@ -235,15 +233,15 @@ impl<T: ShaderType + WriteInto> DynamicUniformBuffer<T> {
|
|||||||
/// allocated does not have enough capacity, a new GPU-side buffer is created.
|
/// allocated does not have enough capacity, a new GPU-side buffer is created.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue) {
|
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue) {
|
||||||
let size = self.scratch.as_ref().len();
|
let capacity = self.buffer.as_deref().map(wgpu::Buffer::size).unwrap_or(0);
|
||||||
|
let size = self.scratch.as_ref().len() as u64;
|
||||||
|
|
||||||
if self.capacity < size || self.changed {
|
if capacity < size || self.changed {
|
||||||
self.buffer = Some(device.create_buffer_with_data(&BufferInitDescriptor {
|
self.buffer = Some(device.create_buffer_with_data(&BufferInitDescriptor {
|
||||||
label: self.label.as_deref(),
|
label: self.label.as_deref(),
|
||||||
usage: self.buffer_usage,
|
usage: self.buffer_usage,
|
||||||
contents: self.scratch.as_ref(),
|
contents: self.scratch.as_ref(),
|
||||||
}));
|
}));
|
||||||
self.capacity = size;
|
|
||||||
self.changed = false;
|
self.changed = false;
|
||||||
} else if let Some(buffer) = &self.buffer {
|
} else if let Some(buffer) = &self.buffer {
|
||||||
queue.write_buffer(buffer, 0, self.scratch.as_ref());
|
queue.write_buffer(buffer, 0, self.scratch.as_ref());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user