22
33use std:: rc:: Rc ;
44
5- use lambda_platform:: wgpu:: types :: {
6- self as wgpu ,
7- util :: DeviceExt ,
5+ use lambda_platform:: wgpu:: {
6+ buffer as platform_buffer ,
7+ types as wgpu ,
88} ;
99
1010use super :: {
@@ -26,22 +26,20 @@ pub enum BufferType {
2626}
2727
2828#[ derive( Clone , Copy , Debug ) ]
29- /// A thin newtype for `wgpu::BufferUsages` that supports bitwise ops while
30- /// keeping explicit construction points in the API surface.
31- pub struct Usage ( wgpu:: BufferUsages ) ;
29+ /// Buffer usage flags (engine-facing), mapped to platform usage internally.
30+ pub struct Usage ( platform_buffer:: Usage ) ;
3231
3332impl Usage {
3433 /// Mark buffer usable as a vertex buffer.
35- pub const VERTEX : Usage = Usage ( wgpu :: BufferUsages :: VERTEX ) ;
34+ pub const VERTEX : Usage = Usage ( platform_buffer :: Usage :: VERTEX ) ;
3635 /// Mark buffer usable as an index buffer.
37- pub const INDEX : Usage = Usage ( wgpu :: BufferUsages :: INDEX ) ;
36+ pub const INDEX : Usage = Usage ( platform_buffer :: Usage :: INDEX ) ;
3837 /// Mark buffer usable as a uniform buffer.
39- pub const UNIFORM : Usage = Usage ( wgpu :: BufferUsages :: UNIFORM ) ;
38+ pub const UNIFORM : Usage = Usage ( platform_buffer :: Usage :: UNIFORM ) ;
4039 /// Mark buffer usable as a storage buffer.
41- pub const STORAGE : Usage = Usage ( wgpu :: BufferUsages :: STORAGE ) ;
40+ pub const STORAGE : Usage = Usage ( platform_buffer :: Usage :: STORAGE ) ;
4241
43- /// Extract the inner `wgpu` flags.
44- pub fn to_wgpu ( self ) -> wgpu:: BufferUsages {
42+ fn to_platform ( self ) -> platform_buffer:: Usage {
4543 self . 0
4644 }
4745}
@@ -50,7 +48,7 @@ impl std::ops::BitOr for Usage {
5048 type Output = Usage ;
5149
5250 fn bitor ( self , rhs : Usage ) -> Usage {
53- Usage ( self . 0 | rhs. 0 )
51+ return Usage ( self . 0 | rhs. 0 ) ;
5452 }
5553}
5654
@@ -90,8 +88,8 @@ impl Default for Properties {
9088/// when binding to pipeline inputs.
9189#[ derive( Debug ) ]
9290pub struct Buffer {
93- buffer : Rc < wgpu :: Buffer > ,
94- stride : wgpu :: BufferAddress ,
91+ buffer : Rc < platform_buffer :: Buffer > ,
92+ stride : u64 ,
9593 buffer_type : BufferType ,
9694}
9795
@@ -101,14 +99,10 @@ impl Buffer {
10199 pub fn destroy ( self , _render_context : & RenderContext ) { }
102100
103101 pub ( super ) fn raw ( & self ) -> & wgpu:: Buffer {
104- return self . buffer . as_ref ( ) ;
102+ return self . buffer . raw ( ) ;
105103 }
106104
107- pub ( super ) fn raw_rc ( & self ) -> Rc < wgpu:: Buffer > {
108- return self . buffer . clone ( ) ;
109- }
110-
111- pub ( super ) fn stride ( & self ) -> wgpu:: BufferAddress {
105+ pub ( super ) fn stride ( & self ) -> u64 {
112106 return self . stride ;
113107 }
114108
@@ -244,7 +238,6 @@ impl BufferBuilder {
244238 render_context : & mut RenderContext ,
245239 data : Vec < Data > ,
246240 ) -> Result < Buffer , & ' static str > {
247- let device = render_context. device ( ) ;
248241 let element_size = std:: mem:: size_of :: < Data > ( ) ;
249242 let buffer_length = if self . buffer_length == 0 {
250243 element_size * data. len ( )
@@ -266,20 +259,19 @@ impl BufferBuilder {
266259 )
267260 } ;
268261
269- let mut usage = self . usage . to_wgpu ( ) ;
270- if self . properties . cpu_visible ( ) {
271- usage |= wgpu:: BufferUsages :: COPY_DST ;
262+ let mut builder = platform_buffer:: BufferBuilder :: new ( )
263+ . with_size ( buffer_length)
264+ . with_usage ( self . usage . to_platform ( ) )
265+ . with_cpu_visible ( self . properties . cpu_visible ( ) ) ;
266+ if let Some ( label) = & self . label {
267+ builder = builder. with_label ( label) ;
272268 }
273269
274- let buffer = device. create_buffer_init ( & wgpu:: util:: BufferInitDescriptor {
275- label : self . label . as_deref ( ) ,
276- contents : bytes,
277- usage,
278- } ) ;
270+ let buffer = builder. build_init ( render_context. device ( ) , bytes) ;
279271
280272 return Ok ( Buffer {
281273 buffer : Rc :: new ( buffer) ,
282- stride : element_size as wgpu :: BufferAddress ,
274+ stride : element_size as u64 ,
283275 buffer_type : self . buffer_type ,
284276 } ) ;
285277 }
0 commit comments