1- use std:: collections:: { BTreeSet , HashMap } ;
1+ use std:: collections:: BTreeSet ;
22
33use bevy:: asset:: RenderAssetUsages ;
44use bevy:: reflect:: PartialReflect ;
@@ -98,10 +98,7 @@ pub fn write_buffer_cpu(
9898 let mut asset = buffers
9999 . get_mut ( & handle)
100100 . ok_or ( ProcessingError :: BufferNotFound ) ?;
101- let dst = asset
102- . data
103- . as_mut ( )
104- . ok_or ( ProcessingError :: BufferNotFound ) ?;
101+ let dst = asset. data . as_mut ( ) . ok_or ( ProcessingError :: BufferNotFound ) ?;
105102 let start = offset as usize ;
106103 let end = start + data. len ( ) ;
107104 dst[ start..end] . copy_from_slice ( & data) ;
@@ -144,7 +141,7 @@ pub fn read_buffer_gpu(
144141
145142pub fn invalidate_rw_buffers ( mut buffers : Query < & mut Buffer > ) {
146143 for mut buf in & mut buffers {
147- if buf. bound_rw {
144+ if buf. bound_rw && buf . synced {
148145 buf. synced = false ;
149146 }
150147 }
@@ -161,7 +158,6 @@ pub struct Compute {
161158 pub entry_point : String ,
162159 pub pipeline_id : CachedComputePipelineId ,
163160 pub bind_group_layout_descriptors : Vec < ( u32 , BindGroupLayoutDescriptor ) > ,
164- pub rw_buffers : HashMap < String , Entity > ,
165161}
166162
167163fn queue_pipeline (
@@ -225,8 +221,7 @@ pub fn create_compute(app: &mut App, shader_entity: Entity) -> Result<Entity> {
225221 . collect ( ) ;
226222
227223 let max_group = groups. iter ( ) . last ( ) . copied ( ) . map_or ( 0 , |g| g + 1 ) ;
228- let mut layout_descriptors =
229- vec ! [ BindGroupLayoutDescriptor :: default ( ) ; max_group as usize ] ;
224+ let mut layout_descriptors = vec ! [ BindGroupLayoutDescriptor :: default ( ) ; max_group as usize ] ;
230225 for ( group, desc) in & bind_group_layout_descriptors {
231226 layout_descriptors[ * group as usize ] = desc. clone ( ) ;
232227 }
@@ -263,7 +258,6 @@ pub fn create_compute(app: &mut App, shader_entity: Entity) -> Result<Entity> {
263258 entry_point,
264259 pipeline_id,
265260 bind_group_layout_descriptors,
266- rw_buffers : HashMap :: new ( ) ,
267261 } )
268262 . id ( ) ) ;
269263 }
@@ -296,10 +290,7 @@ pub fn set_compute_property(
296290 . get_mut ( * buf_entity)
297291 . map_err ( |_| ProcessingError :: BufferNotFound ) ?;
298292 compute. shader . insert ( & name, buffer. handle . clone ( ) ) ;
299- if read_only {
300- compute. rw_buffers . remove ( & name) ;
301- } else {
302- compute. rw_buffers . insert ( name. clone ( ) , * buf_entity) ;
293+ if !read_only {
303294 buffer. bound_rw = true ;
304295 }
305296 Ok ( ( ) )
0 commit comments