@@ -469,13 +469,14 @@ pub fn device_track_buffer(
469
469
device_id : DeviceId ,
470
470
buffer_id : BufferId ,
471
471
ref_count : RefCount ,
472
+ flags : resource:: BufferUsageFlags ,
472
473
) {
473
474
let query = HUB . devices
474
475
. read ( )
475
476
[ device_id] . trackers
476
477
. lock ( )
477
478
. buffers
478
- . query ( buffer_id, & ref_count, resource :: BufferUsageFlags :: empty ( ) ) ;
479
+ . query ( buffer_id, & ref_count, flags ) ;
479
480
assert ! ( query. initialized) ;
480
481
}
481
482
@@ -488,7 +489,30 @@ pub extern "C" fn wgpu_device_create_buffer(
488
489
let buffer = device_create_buffer ( device_id, desc) ;
489
490
let ref_count = buffer. life_guard . ref_count . clone ( ) ;
490
491
let id = HUB . buffers . register_local ( buffer) ;
491
- device_track_buffer ( device_id, id, ref_count) ;
492
+ device_track_buffer ( device_id, id, ref_count, resource:: BufferUsageFlags :: empty ( ) ) ;
493
+ id
494
+ }
495
+
496
+ #[ cfg( feature = "local" ) ]
497
+ #[ no_mangle]
498
+ pub extern "C" fn wgpu_device_create_buffer_mapped (
499
+ device_id : DeviceId ,
500
+ desc : & resource:: BufferDescriptor ,
501
+ mapped_ptr_out : * mut * mut u8
502
+ ) -> BufferId {
503
+ let buffer = device_create_buffer ( device_id, desc) ;
504
+
505
+ let device_guard = HUB . devices . read ( ) ;
506
+ let device = & device_guard[ device_id] ;
507
+
508
+ if let Ok ( ptr) = unsafe { device. raw . map_memory ( & buffer. memory , 0 ..( desc. size as u64 ) ) } {
509
+ unsafe { * mapped_ptr_out = ptr; }
510
+ }
511
+
512
+ let ref_count = buffer. life_guard . ref_count . clone ( ) ;
513
+ let id = HUB . buffers . register_local ( buffer) ;
514
+ device_track_buffer ( device_id, id, ref_count, resource:: BufferUsageFlags :: MAP_WRITE ) ;
515
+
492
516
id
493
517
}
494
518
0 commit comments