Skip to content

Commit

Permalink
Remove capacity fields from all Buffer wrapper types (#8301)
Browse files Browse the repository at this point in the history
# 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.
  • Loading branch information
james7132 authored Apr 4, 2023
1 parent 63d89d3 commit 21e1893
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 16 deletions.
17 changes: 6 additions & 11 deletions crates/bevy_render/src/render_resource/storage_buffer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ pub struct StorageBuffer<T: ShaderType> {
value: T,
scratch: StorageBufferWrapper<Vec<u8>>,
buffer: Option<Buffer>,
capacity: usize,
label: Option<String>,
changed: bool,
buffer_usage: BufferUsages,
Expand All @@ -45,7 +44,6 @@ impl<T: ShaderType> From<T> for StorageBuffer<T> {
value,
scratch: StorageBufferWrapper::new(Vec::new()),
buffer: None,
capacity: 0,
label: None,
changed: false,
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
Expand All @@ -59,7 +57,6 @@ impl<T: ShaderType + Default> Default for StorageBuffer<T> {
value: T::default(),
scratch: StorageBufferWrapper::new(Vec::new()),
buffer: None,
capacity: 0,
label: None,
changed: false,
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
Expand Down Expand Up @@ -124,15 +121,15 @@ impl<T: ShaderType + WriteInto> StorageBuffer<T> {
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue) {
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 {
label: self.label.as_deref(),
usage: self.buffer_usage,
contents: self.scratch.as_ref(),
}));
self.capacity = size;
self.changed = false;
} else if let Some(buffer) = &self.buffer {
queue.write_buffer(buffer, 0, self.scratch.as_ref());
Expand Down Expand Up @@ -164,7 +161,6 @@ impl<T: ShaderType + WriteInto> StorageBuffer<T> {
pub struct DynamicStorageBuffer<T: ShaderType> {
scratch: DynamicStorageBufferWrapper<Vec<u8>>,
buffer: Option<Buffer>,
capacity: usize,
label: Option<String>,
changed: bool,
buffer_usage: BufferUsages,
Expand All @@ -176,7 +172,6 @@ impl<T: ShaderType> Default for DynamicStorageBuffer<T> {
Self {
scratch: DynamicStorageBufferWrapper::new(Vec::new()),
buffer: None,
capacity: 0,
label: None,
changed: false,
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
Expand Down Expand Up @@ -236,15 +231,15 @@ impl<T: ShaderType + WriteInto> DynamicStorageBuffer<T> {

#[inline]
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 {
label: self.label.as_deref(),
usage: self.buffer_usage,
contents: self.scratch.as_ref(),
}));
self.capacity = size;
self.changed = false;
} else if let Some(buffer) = &self.buffer {
queue.write_buffer(buffer, 0, self.scratch.as_ref());
Expand Down
8 changes: 3 additions & 5 deletions crates/bevy_render/src/render_resource/uniform_buffer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,6 @@ impl<T: ShaderType + WriteInto> UniformBuffer<T> {
pub struct DynamicUniformBuffer<T: ShaderType> {
scratch: DynamicUniformBufferWrapper<Vec<u8>>,
buffer: Option<Buffer>,
capacity: usize,
label: Option<String>,
changed: bool,
buffer_usage: BufferUsages,
Expand All @@ -169,7 +168,6 @@ impl<T: ShaderType> Default for DynamicUniformBuffer<T> {
Self {
scratch: DynamicUniformBufferWrapper::new(Vec::new()),
buffer: None,
capacity: 0,
label: None,
changed: false,
buffer_usage: BufferUsages::COPY_DST | BufferUsages::UNIFORM,
Expand Down Expand Up @@ -235,15 +233,15 @@ impl<T: ShaderType + WriteInto> DynamicUniformBuffer<T> {
/// allocated does not have enough capacity, a new GPU-side buffer is created.
#[inline]
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 {
label: self.label.as_deref(),
usage: self.buffer_usage,
contents: self.scratch.as_ref(),
}));
self.capacity = size;
self.changed = false;
} else if let Some(buffer) = &self.buffer {
queue.write_buffer(buffer, 0, self.scratch.as_ref());
Expand Down

0 comments on commit 21e1893

Please sign in to comment.