Skip to content

Commit 54a54d4

Browse files
authored
Remove Vec from GpuArrayBuffer (#11368)
# Objective - Remove Vec as described in #11290 (comment) ## Solution - Rely on StorageBuffer's backing Vec instead --- ## Changelog - GpuArrayBuffer no longer has a redundant backing Vec
1 parent b6e154f commit 54a54d4

File tree

1 file changed

+8
-10
lines changed

1 file changed

+8
-10
lines changed

crates/bevy_render/src/render_resource/gpu_array_buffer.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::{
99
use bevy_ecs::{prelude::Component, system::Resource};
1010
use bevy_utils::nonmax::NonMaxU32;
1111
use encase::{private::WriteInto, ShaderSize, ShaderType};
12-
use std::{marker::PhantomData, mem};
12+
use std::marker::PhantomData;
1313
use wgpu::BindingResource;
1414

1515
/// Trait for types able to go in a [`GpuArrayBuffer`].
@@ -32,7 +32,7 @@ impl<T: ShaderType + ShaderSize + WriteInto + Clone> GpuArrayBufferable for T {}
3232
#[derive(Resource)]
3333
pub enum GpuArrayBuffer<T: GpuArrayBufferable> {
3434
Uniform(BatchedUniformBuffer<T>),
35-
Storage((StorageBuffer<Vec<T>>, Vec<T>)),
35+
Storage(StorageBuffer<Vec<T>>),
3636
}
3737

3838
impl<T: GpuArrayBufferable> GpuArrayBuffer<T> {
@@ -41,21 +41,22 @@ impl<T: GpuArrayBufferable> GpuArrayBuffer<T> {
4141
if limits.max_storage_buffers_per_shader_stage == 0 {
4242
GpuArrayBuffer::Uniform(BatchedUniformBuffer::new(&limits))
4343
} else {
44-
GpuArrayBuffer::Storage((StorageBuffer::default(), Vec::new()))
44+
GpuArrayBuffer::Storage(StorageBuffer::default())
4545
}
4646
}
4747

4848
pub fn clear(&mut self) {
4949
match self {
5050
GpuArrayBuffer::Uniform(buffer) => buffer.clear(),
51-
GpuArrayBuffer::Storage((_, buffer)) => buffer.clear(),
51+
GpuArrayBuffer::Storage(buffer) => buffer.get_mut().clear(),
5252
}
5353
}
5454

5555
pub fn push(&mut self, value: T) -> GpuArrayBufferIndex<T> {
5656
match self {
5757
GpuArrayBuffer::Uniform(buffer) => buffer.push(value),
58-
GpuArrayBuffer::Storage((_, buffer)) => {
58+
GpuArrayBuffer::Storage(buffer) => {
59+
let buffer = buffer.get_mut();
5960
let index = NonMaxU32::new(buffer.len() as u32).unwrap();
6061
buffer.push(value);
6162
GpuArrayBufferIndex {
@@ -70,10 +71,7 @@ impl<T: GpuArrayBufferable> GpuArrayBuffer<T> {
7071
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue) {
7172
match self {
7273
GpuArrayBuffer::Uniform(buffer) => buffer.write_buffer(device, queue),
73-
GpuArrayBuffer::Storage((buffer, vec)) => {
74-
buffer.set(mem::take(vec));
75-
buffer.write_buffer(device, queue);
76-
}
74+
GpuArrayBuffer::Storage(buffer) => buffer.write_buffer(device, queue),
7775
}
7876
}
7977

@@ -93,7 +91,7 @@ impl<T: GpuArrayBufferable> GpuArrayBuffer<T> {
9391
pub fn binding(&self) -> Option<BindingResource> {
9492
match self {
9593
GpuArrayBuffer::Uniform(buffer) => buffer.binding(),
96-
GpuArrayBuffer::Storage((buffer, _)) => buffer.binding(),
94+
GpuArrayBuffer::Storage(buffer) => buffer.binding(),
9795
}
9896
}
9997

0 commit comments

Comments
 (0)