@@ -469,13 +469,14 @@ pub fn device_track_buffer(
469469 device_id : DeviceId ,
470470 buffer_id : BufferId ,
471471 ref_count : RefCount ,
472+ flags : resource:: BufferUsageFlags ,
472473) {
473474 let query = HUB . devices
474475 . read ( )
475476 [ device_id] . trackers
476477 . lock ( )
477478 . buffers
478- . query ( buffer_id, & ref_count, resource :: BufferUsageFlags :: empty ( ) ) ;
479+ . query ( buffer_id, & ref_count, flags ) ;
479480 assert ! ( query. initialized) ;
480481}
481482
@@ -488,7 +489,30 @@ pub extern "C" fn wgpu_device_create_buffer(
488489 let buffer = device_create_buffer ( device_id, desc) ;
489490 let ref_count = buffer. life_guard . ref_count . clone ( ) ;
490491 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+
492516 id
493517}
494518
0 commit comments