@@ -14,7 +14,7 @@ use crate::{
1414 hal_label,
1515 id:: { self , QueueId } ,
1616 init_tracker:: { has_copy_partial_init_tracker_coverage, TextureInitRange } ,
17- lock:: { rank , Mutex , RwLockWriteGuard } ,
17+ lock:: RwLockWriteGuard ,
1818 resource:: {
1919 Buffer , BufferAccessError , BufferMapState , DestroyedBuffer , DestroyedResourceError ,
2020 DestroyedTexture , Labeled , ParentDevice , ResourceErrorIdent , StagingBuffer , Texture ,
@@ -29,7 +29,8 @@ use hal::{CommandEncoder as _, Device as _, Queue as _};
2929use smallvec:: SmallVec ;
3030
3131use std:: {
32- iter, mem,
32+ iter,
33+ mem:: { self , ManuallyDrop } ,
3334 ptr:: { self , NonNull } ,
3435 sync:: { atomic:: Ordering , Arc } ,
3536} ;
@@ -329,7 +330,7 @@ pub(crate) fn prepare_staging_buffer<A: HalApi>(
329330 let mapping = unsafe { device. raw ( ) . map_buffer ( & buffer, 0 ..size. get ( ) ) } ?;
330331
331332 let staging_buffer = StagingBuffer {
332- raw : Mutex :: new ( rank :: STAGING_BUFFER_RAW , Some ( buffer) ) ,
333+ raw : ManuallyDrop :: new ( buffer) ,
333334 device : device. clone ( ) ,
334335 size,
335336 is_coherent : mapping. is_coherent ,
@@ -341,14 +342,9 @@ pub(crate) fn prepare_staging_buffer<A: HalApi>(
341342impl < A : HalApi > StagingBuffer < A > {
342343 unsafe fn flush ( & self , device : & A :: Device ) -> Result < ( ) , DeviceError > {
343344 if !self . is_coherent {
344- unsafe {
345- device. flush_mapped_ranges (
346- self . raw . lock ( ) . as_ref ( ) . unwrap ( ) ,
347- iter:: once ( 0 ..self . size . get ( ) ) ,
348- )
349- } ;
345+ unsafe { device. flush_mapped_ranges ( self . raw ( ) , iter:: once ( 0 ..self . size . get ( ) ) ) } ;
350346 }
351- unsafe { device. unmap_buffer ( self . raw . lock ( ) . as_ref ( ) . unwrap ( ) ) ? } ;
347+ unsafe { device. unmap_buffer ( self . raw ( ) ) ? } ;
352348 Ok ( ( ) )
353349 }
354350}
@@ -630,20 +626,15 @@ impl Global {
630626 dst_offset : buffer_offset,
631627 size : staging_buffer. size ,
632628 } ;
633- let inner_buffer = staging_buffer. raw . lock ( ) ;
634629 let barriers = iter:: once ( hal:: BufferBarrier {
635- buffer : inner_buffer . as_ref ( ) . unwrap ( ) ,
630+ buffer : staging_buffer . raw ( ) ,
636631 usage : hal:: BufferUses :: MAP_WRITE ..hal:: BufferUses :: COPY_SRC ,
637632 } )
638633 . chain ( transition. map ( |pending| pending. into_hal ( & dst, & snatch_guard) ) ) ;
639634 let encoder = pending_writes. activate ( ) ;
640635 unsafe {
641636 encoder. transition_buffers ( barriers) ;
642- encoder. copy_buffer_to_buffer (
643- inner_buffer. as_ref ( ) . unwrap ( ) ,
644- dst_raw,
645- iter:: once ( region) ,
646- ) ;
637+ encoder. copy_buffer_to_buffer ( staging_buffer. raw ( ) , dst_raw, iter:: once ( region) ) ;
647638 }
648639
649640 pending_writes. insert_buffer ( & dst) ;
@@ -890,9 +881,8 @@ impl Global {
890881 } ) ;
891882
892883 {
893- let inner_buffer = staging_buffer. raw . lock ( ) ;
894884 let barrier = hal:: BufferBarrier {
895- buffer : inner_buffer . as_ref ( ) . unwrap ( ) ,
885+ buffer : staging_buffer . raw ( ) ,
896886 usage : hal:: BufferUses :: MAP_WRITE ..hal:: BufferUses :: COPY_SRC ,
897887 } ;
898888
@@ -904,7 +894,7 @@ impl Global {
904894 unsafe {
905895 encoder. transition_textures ( transition. map ( |pending| pending. into_hal ( dst_raw) ) ) ;
906896 encoder. transition_buffers ( iter:: once ( barrier) ) ;
907- encoder. copy_buffer_to_texture ( inner_buffer . as_ref ( ) . unwrap ( ) , dst_raw, regions) ;
897+ encoder. copy_buffer_to_texture ( staging_buffer . raw ( ) , dst_raw, regions) ;
908898 }
909899 }
910900
0 commit comments