Skip to content

Commit 21e1893

Browse files
authored
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.
1 parent 63d89d3 commit 21e1893

File tree

2 files changed

+9
-16
lines changed

2 files changed

+9
-16
lines changed

crates/bevy_render/src/render_resource/storage_buffer.rs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ pub struct StorageBuffer<T: ShaderType> {
3333
value: T,
3434
scratch: StorageBufferWrapper<Vec<u8>>,
3535
buffer: Option<Buffer>,
36-
capacity: usize,
3736
label: Option<String>,
3837
changed: bool,
3938
buffer_usage: BufferUsages,
@@ -45,7 +44,6 @@ impl<T: ShaderType> From<T> for StorageBuffer<T> {
4544
value,
4645
scratch: StorageBufferWrapper::new(Vec::new()),
4746
buffer: None,
48-
capacity: 0,
4947
label: None,
5048
changed: false,
5149
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
@@ -59,7 +57,6 @@ impl<T: ShaderType + Default> Default for StorageBuffer<T> {
5957
value: T::default(),
6058
scratch: StorageBufferWrapper::new(Vec::new()),
6159
buffer: None,
62-
capacity: 0,
6360
label: None,
6461
changed: false,
6562
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
@@ -124,15 +121,15 @@ impl<T: ShaderType + WriteInto> StorageBuffer<T> {
124121
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue) {
125122
self.scratch.write(&self.value).unwrap();
126123

127-
let size = self.scratch.as_ref().len();
124+
let capacity = self.buffer.as_deref().map(wgpu::Buffer::size).unwrap_or(0);
125+
let size = self.scratch.as_ref().len() as u64;
128126

129-
if self.capacity < size || self.changed {
127+
if capacity < size || self.changed {
130128
self.buffer = Some(device.create_buffer_with_data(&BufferInitDescriptor {
131129
label: self.label.as_deref(),
132130
usage: self.buffer_usage,
133131
contents: self.scratch.as_ref(),
134132
}));
135-
self.capacity = size;
136133
self.changed = false;
137134
} else if let Some(buffer) = &self.buffer {
138135
queue.write_buffer(buffer, 0, self.scratch.as_ref());
@@ -164,7 +161,6 @@ impl<T: ShaderType + WriteInto> StorageBuffer<T> {
164161
pub struct DynamicStorageBuffer<T: ShaderType> {
165162
scratch: DynamicStorageBufferWrapper<Vec<u8>>,
166163
buffer: Option<Buffer>,
167-
capacity: usize,
168164
label: Option<String>,
169165
changed: bool,
170166
buffer_usage: BufferUsages,
@@ -176,7 +172,6 @@ impl<T: ShaderType> Default for DynamicStorageBuffer<T> {
176172
Self {
177173
scratch: DynamicStorageBufferWrapper::new(Vec::new()),
178174
buffer: None,
179-
capacity: 0,
180175
label: None,
181176
changed: false,
182177
buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE,
@@ -236,15 +231,15 @@ impl<T: ShaderType + WriteInto> DynamicStorageBuffer<T> {
236231

237232
#[inline]
238233
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue) {
239-
let size = self.scratch.as_ref().len();
234+
let capacity = self.buffer.as_deref().map(wgpu::Buffer::size).unwrap_or(0);
235+
let size = self.scratch.as_ref().len() as u64;
240236

241-
if self.capacity < size || self.changed {
237+
if capacity < size || self.changed {
242238
self.buffer = Some(device.create_buffer_with_data(&BufferInitDescriptor {
243239
label: self.label.as_deref(),
244240
usage: self.buffer_usage,
245241
contents: self.scratch.as_ref(),
246242
}));
247-
self.capacity = size;
248243
self.changed = false;
249244
} else if let Some(buffer) = &self.buffer {
250245
queue.write_buffer(buffer, 0, self.scratch.as_ref());

crates/bevy_render/src/render_resource/uniform_buffer.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@ impl<T: ShaderType + WriteInto> UniformBuffer<T> {
157157
pub struct DynamicUniformBuffer<T: ShaderType> {
158158
scratch: DynamicUniformBufferWrapper<Vec<u8>>,
159159
buffer: Option<Buffer>,
160-
capacity: usize,
161160
label: Option<String>,
162161
changed: bool,
163162
buffer_usage: BufferUsages,
@@ -169,7 +168,6 @@ impl<T: ShaderType> Default for DynamicUniformBuffer<T> {
169168
Self {
170169
scratch: DynamicUniformBufferWrapper::new(Vec::new()),
171170
buffer: None,
172-
capacity: 0,
173171
label: None,
174172
changed: false,
175173
buffer_usage: BufferUsages::COPY_DST | BufferUsages::UNIFORM,
@@ -235,15 +233,15 @@ impl<T: ShaderType + WriteInto> DynamicUniformBuffer<T> {
235233
/// allocated does not have enough capacity, a new GPU-side buffer is created.
236234
#[inline]
237235
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue) {
238-
let size = self.scratch.as_ref().len();
236+
let capacity = self.buffer.as_deref().map(wgpu::Buffer::size).unwrap_or(0);
237+
let size = self.scratch.as_ref().len() as u64;
239238

240-
if self.capacity < size || self.changed {
239+
if capacity < size || self.changed {
241240
self.buffer = Some(device.create_buffer_with_data(&BufferInitDescriptor {
242241
label: self.label.as_deref(),
243242
usage: self.buffer_usage,
244243
contents: self.scratch.as_ref(),
245244
}));
246-
self.capacity = size;
247245
self.changed = false;
248246
} else if let Some(buffer) = &self.buffer {
249247
queue.write_buffer(buffer, 0, self.scratch.as_ref());

0 commit comments

Comments
 (0)