@@ -354,7 +354,7 @@ impl Buffer {
354
354
/// - If you try to create overlapping views of a buffer, mutable or otherwise.
355
355
///
356
356
/// [mapped]: Buffer#mapping-buffers
357
- pub fn get_mapped_range < S : RangeBounds < BufferAddress > > ( & self , bounds : S ) -> BufferView < ' _ > {
357
+ pub fn get_mapped_range < S : RangeBounds < BufferAddress > > ( & self , bounds : S ) -> BufferView {
358
358
self . slice ( bounds) . get_mapped_range ( )
359
359
}
360
360
@@ -377,10 +377,7 @@ impl Buffer {
377
377
/// - If you try to create overlapping views of a buffer, mutable or otherwise.
378
378
///
379
379
/// [mapped]: Buffer#mapping-buffers
380
- pub fn get_mapped_range_mut < S : RangeBounds < BufferAddress > > (
381
- & self ,
382
- bounds : S ,
383
- ) -> BufferViewMut < ' _ > {
380
+ pub fn get_mapped_range_mut < S : RangeBounds < BufferAddress > > ( & self , bounds : S ) -> BufferViewMut {
384
381
self . slice ( bounds) . get_mapped_range_mut ( )
385
382
}
386
383
@@ -518,11 +515,13 @@ impl<'a> BufferSlice<'a> {
518
515
/// - If you try to create overlapping views of a buffer, mutable or otherwise.
519
516
///
520
517
/// [mapped]: Buffer#mapping-buffers
521
- pub fn get_mapped_range ( & self ) -> BufferView < ' a > {
518
+ pub fn get_mapped_range ( & self ) -> BufferView {
522
519
let end = self . buffer . map_context . lock ( ) . add ( self . offset , self . size ) ;
523
520
let range = self . buffer . inner . get_mapped_range ( self . offset ..end) ;
524
521
BufferView {
525
- slice : * self ,
522
+ buffer : self . buffer . clone ( ) ,
523
+ size : self . size ,
524
+ offset : self . offset ,
526
525
inner : range,
527
526
}
528
527
}
@@ -544,11 +543,13 @@ impl<'a> BufferSlice<'a> {
544
543
/// - If you try to create overlapping views of a buffer, mutable or otherwise.
545
544
///
546
545
/// [mapped]: Buffer#mapping-buffers
547
- pub fn get_mapped_range_mut ( & self ) -> BufferViewMut < ' a > {
546
+ pub fn get_mapped_range_mut ( & self ) -> BufferViewMut {
548
547
let end = self . buffer . map_context . lock ( ) . add ( self . offset , self . size ) ;
549
548
let range = self . buffer . inner . get_mapped_range ( self . offset ..end) ;
550
549
BufferViewMut {
551
- slice : * self ,
550
+ buffer : self . buffer . clone ( ) ,
551
+ size : self . size ,
552
+ offset : self . offset ,
552
553
inner : range,
553
554
readable : self . buffer . usage . contains ( BufferUsages :: MAP_READ ) ,
554
555
}
@@ -725,13 +726,16 @@ static_assertions::assert_impl_all!(MapMode: Send, Sync);
725
726
/// [map]: Buffer#mapping-buffers
726
727
/// [`map_async`]: BufferSlice::map_async
727
728
#[ derive( Debug ) ]
728
- pub struct BufferView < ' a > {
729
- slice : BufferSlice < ' a > ,
729
+ pub struct BufferView {
730
+ // `buffer, offset, size` are similar to `BufferSlice`, except that they own the buffer.
731
+ buffer : Buffer ,
732
+ offset : BufferAddress ,
733
+ size : BufferSize ,
730
734
inner : dispatch:: DispatchBufferMappedRange ,
731
735
}
732
736
733
737
#[ cfg( webgpu) ]
734
- impl BufferView < ' _ > {
738
+ impl BufferView {
735
739
/// Provides the same data as dereferencing the view, but as a `Uint8Array` in js.
736
740
/// This can be MUCH faster than dereferencing the view which copies the data into
737
741
/// the Rust / wasm heap.
@@ -740,7 +744,7 @@ impl BufferView<'_> {
740
744
}
741
745
}
742
746
743
- impl core:: ops:: Deref for BufferView < ' _ > {
747
+ impl core:: ops:: Deref for BufferView {
744
748
type Target = [ u8 ] ;
745
749
746
750
#[ inline]
@@ -749,7 +753,7 @@ impl core::ops::Deref for BufferView<'_> {
749
753
}
750
754
}
751
755
752
- impl AsRef < [ u8 ] > for BufferView < ' _ > {
756
+ impl AsRef < [ u8 ] > for BufferView {
753
757
#[ inline]
754
758
fn as_ref ( & self ) -> & [ u8 ] {
755
759
self . inner . slice ( )
@@ -775,20 +779,23 @@ impl AsRef<[u8]> for BufferView<'_> {
775
779
///
776
780
/// [map]: Buffer#mapping-buffers
777
781
#[ derive( Debug ) ]
778
- pub struct BufferViewMut < ' a > {
779
- slice : BufferSlice < ' a > ,
782
+ pub struct BufferViewMut {
783
+ // `buffer, offset, size` are similar to `BufferSlice`, except that they own the buffer.
784
+ buffer : Buffer ,
785
+ offset : BufferAddress ,
786
+ size : BufferSize ,
780
787
inner : dispatch:: DispatchBufferMappedRange ,
781
788
readable : bool ,
782
789
}
783
790
784
- impl AsMut < [ u8 ] > for BufferViewMut < ' _ > {
791
+ impl AsMut < [ u8 ] > for BufferViewMut {
785
792
#[ inline]
786
793
fn as_mut ( & mut self ) -> & mut [ u8 ] {
787
794
self . inner . slice_mut ( )
788
795
}
789
796
}
790
797
791
- impl Deref for BufferViewMut < ' _ > {
798
+ impl Deref for BufferViewMut {
792
799
type Target = [ u8 ] ;
793
800
794
801
fn deref ( & self ) -> & Self :: Target {
@@ -800,29 +807,27 @@ impl Deref for BufferViewMut<'_> {
800
807
}
801
808
}
802
809
803
- impl DerefMut for BufferViewMut < ' _ > {
810
+ impl DerefMut for BufferViewMut {
804
811
fn deref_mut ( & mut self ) -> & mut Self :: Target {
805
812
self . inner . slice_mut ( )
806
813
}
807
814
}
808
815
809
- impl Drop for BufferView < ' _ > {
816
+ impl Drop for BufferView {
810
817
fn drop ( & mut self ) {
811
- self . slice
812
- . buffer
818
+ self . buffer
813
819
. map_context
814
820
. lock ( )
815
- . remove ( self . slice . offset , self . slice . size ) ;
821
+ . remove ( self . offset , self . size ) ;
816
822
}
817
823
}
818
824
819
- impl Drop for BufferViewMut < ' _ > {
825
+ impl Drop for BufferViewMut {
820
826
fn drop ( & mut self ) {
821
- self . slice
822
- . buffer
827
+ self . buffer
823
828
. map_context
824
829
. lock ( )
825
- . remove ( self . slice . offset , self . slice . size ) ;
830
+ . remove ( self . offset , self . size ) ;
826
831
}
827
832
}
828
833
0 commit comments