@@ -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> {
124121pub  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> {
164161pub  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 ( ) ) ; 
0 commit comments