@@ -33,7 +33,6 @@ pub struct StorageBuffer<T: ShaderType> {
33
33
value : T ,
34
34
scratch : StorageBufferWrapper < Vec < u8 > > ,
35
35
buffer : Option < Buffer > ,
36
- capacity : usize ,
37
36
label : Option < String > ,
38
37
changed : bool ,
39
38
buffer_usage : BufferUsages ,
@@ -45,7 +44,6 @@ impl<T: ShaderType> From<T> for StorageBuffer<T> {
45
44
value,
46
45
scratch : StorageBufferWrapper :: new ( Vec :: new ( ) ) ,
47
46
buffer : None ,
48
- capacity : 0 ,
49
47
label : None ,
50
48
changed : false ,
51
49
buffer_usage : BufferUsages :: COPY_DST | BufferUsages :: STORAGE ,
@@ -59,7 +57,6 @@ impl<T: ShaderType + Default> Default for StorageBuffer<T> {
59
57
value : T :: default ( ) ,
60
58
scratch : StorageBufferWrapper :: new ( Vec :: new ( ) ) ,
61
59
buffer : None ,
62
- capacity : 0 ,
63
60
label : None ,
64
61
changed : false ,
65
62
buffer_usage : BufferUsages :: COPY_DST | BufferUsages :: STORAGE ,
@@ -124,15 +121,15 @@ impl<T: ShaderType + WriteInto> StorageBuffer<T> {
124
121
pub fn write_buffer ( & mut self , device : & RenderDevice , queue : & RenderQueue ) {
125
122
self . scratch . write ( & self . value ) . unwrap ( ) ;
126
123
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 ;
128
126
129
- if self . capacity < size || self . changed {
127
+ if capacity < size || self . changed {
130
128
self . buffer = Some ( device. create_buffer_with_data ( & BufferInitDescriptor {
131
129
label : self . label . as_deref ( ) ,
132
130
usage : self . buffer_usage ,
133
131
contents : self . scratch . as_ref ( ) ,
134
132
} ) ) ;
135
- self . capacity = size;
136
133
self . changed = false ;
137
134
} else if let Some ( buffer) = & self . buffer {
138
135
queue. write_buffer ( buffer, 0 , self . scratch . as_ref ( ) ) ;
@@ -164,7 +161,6 @@ impl<T: ShaderType + WriteInto> StorageBuffer<T> {
164
161
pub struct DynamicStorageBuffer < T : ShaderType > {
165
162
scratch : DynamicStorageBufferWrapper < Vec < u8 > > ,
166
163
buffer : Option < Buffer > ,
167
- capacity : usize ,
168
164
label : Option < String > ,
169
165
changed : bool ,
170
166
buffer_usage : BufferUsages ,
@@ -176,7 +172,6 @@ impl<T: ShaderType> Default for DynamicStorageBuffer<T> {
176
172
Self {
177
173
scratch : DynamicStorageBufferWrapper :: new ( Vec :: new ( ) ) ,
178
174
buffer : None ,
179
- capacity : 0 ,
180
175
label : None ,
181
176
changed : false ,
182
177
buffer_usage : BufferUsages :: COPY_DST | BufferUsages :: STORAGE ,
@@ -236,15 +231,15 @@ impl<T: ShaderType + WriteInto> DynamicStorageBuffer<T> {
236
231
237
232
#[ inline]
238
233
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 ;
240
236
241
- if self . capacity < size || self . changed {
237
+ if capacity < size || self . changed {
242
238
self . buffer = Some ( device. create_buffer_with_data ( & BufferInitDescriptor {
243
239
label : self . label . as_deref ( ) ,
244
240
usage : self . buffer_usage ,
245
241
contents : self . scratch . as_ref ( ) ,
246
242
} ) ) ;
247
- self . capacity = size;
248
243
self . changed = false ;
249
244
} else if let Some ( buffer) = & self . buffer {
250
245
queue. write_buffer ( buffer, 0 , self . scratch . as_ref ( ) ) ;
0 commit comments