11use alloc:: { borrow:: Cow , sync:: Arc , vec:: Vec } ;
2- use core:: {
3- fmt,
4- num:: { NonZeroU32 , NonZeroU64 } ,
5- str,
6- } ;
7- use hal:: ShouldBeNonZeroExt ;
2+ use core:: { fmt, num:: NonZeroU32 , ops:: Range , str} ;
83
94use arrayvec:: ArrayVec ;
105use thiserror:: Error ;
116use wgt:: {
127 error:: { ErrorType , WebGpuError } ,
13- BufferAddress , BufferSize , BufferSizeOrZero , BufferUsages , Color , DynamicOffset , IndexFormat ,
14- ShaderStages , TextureSelector , TextureUsages , TextureViewDimension , VertexStepMode ,
8+ BufferAddress , BufferSize , BufferUsages , Color , DynamicOffset , IndexFormat , ShaderStages ,
9+ TextureSelector , TextureUsages , TextureViewDimension , VertexStepMode ,
1510} ;
1611
1712use crate :: command:: {
@@ -362,17 +357,13 @@ struct IndexState {
362357}
363358
364359impl IndexState {
365- fn update_buffer < B : hal:: DynBuffer + ?Sized > (
366- & mut self ,
367- binding : & hal:: BufferBinding < ' _ , B > ,
368- format : IndexFormat ,
369- ) {
360+ fn update_buffer ( & mut self , range : Range < BufferAddress > , format : IndexFormat ) {
370361 self . buffer_format = Some ( format) ;
371362 let shift = match format {
372363 IndexFormat :: Uint16 => 1 ,
373364 IndexFormat :: Uint32 => 2 ,
374365 } ;
375- self . limit = binding . size . get ( ) >> shift;
366+ self . limit = ( range . end - range . start ) >> shift;
376367 }
377368
378369 fn reset ( & mut self ) {
@@ -2339,7 +2330,7 @@ fn set_index_buffer(
23392330 buffer : Arc < crate :: resource:: Buffer > ,
23402331 index_format : IndexFormat ,
23412332 offset : u64 ,
2342- size : Option < BufferSizeOrZero > ,
2333+ size : Option < BufferSize > ,
23432334) -> Result < ( ) , RenderPassErrorInner > {
23442335 api_log ! ( "RenderPass::set_index_buffer {}" , buffer. error_ident( ) ) ;
23452336
@@ -2353,15 +2344,16 @@ fn set_index_buffer(
23532344
23542345 buffer. check_usage ( BufferUsages :: INDEX ) ?;
23552346
2356- let binding = buffer
2347+ let ( binding, resolved_size ) = buffer
23572348 . binding ( offset, size, state. general . snatch_guard )
23582349 . map_err ( RenderCommandError :: from) ?;
2359- state. index . update_buffer ( & binding, index_format) ;
2350+ let end = offset + resolved_size;
2351+ state. index . update_buffer ( offset..end, index_format) ;
23602352
23612353 state. general . buffer_memory_init_actions . extend (
23622354 buffer. initialization_status . read ( ) . create_action (
23632355 & buffer,
2364- offset..( offset + binding . size . get ( ) ) ,
2356+ offset..end ,
23652357 MemoryInitKind :: NeedsInitializedMemory ,
23662358 ) ,
23672359 ) ;
@@ -2379,7 +2371,7 @@ fn set_vertex_buffer(
23792371 slot : u32 ,
23802372 buffer : Arc < crate :: resource:: Buffer > ,
23812373 offset : u64 ,
2382- size : Option < BufferSizeOrZero > ,
2374+ size : Option < BufferSize > ,
23832375) -> Result < ( ) , RenderPassErrorInner > {
23842376 api_log ! (
23852377 "RenderPass::set_vertex_buffer {slot} {}" ,
@@ -2405,15 +2397,15 @@ fn set_vertex_buffer(
24052397
24062398 buffer. check_usage ( BufferUsages :: VERTEX ) ?;
24072399
2408- let binding = buffer
2400+ let ( binding, buffer_size ) = buffer
24092401 . binding ( offset, size, state. general . snatch_guard )
24102402 . map_err ( RenderCommandError :: from) ?;
2411- state. vertex . buffer_sizes [ slot as usize ] = Some ( binding . size . get ( ) ) ;
2403+ state. vertex . buffer_sizes [ slot as usize ] = Some ( buffer_size ) ;
24122404
24132405 state. general . buffer_memory_init_actions . extend (
24142406 buffer. initialization_status . read ( ) . create_action (
24152407 & buffer,
2416- offset..( offset + binding . size . get ( ) ) ,
2408+ offset..( offset + buffer_size ) ,
24172409 MemoryInitKind :: NeedsInitializedMemory ,
24182410 ) ,
24192411 ) ;
@@ -3090,7 +3082,7 @@ impl Global {
30903082 buffer : pass_try ! ( base, scope, self . resolve_render_pass_buffer_id( buffer_id) ) ,
30913083 index_format,
30923084 offset,
3093- size : size . map ( NonZeroU64 :: get ) ,
3085+ size,
30943086 } ) ;
30953087
30963088 Ok ( ( ) )
@@ -3111,7 +3103,7 @@ impl Global {
31113103 slot,
31123104 buffer : pass_try ! ( base, scope, self . resolve_render_pass_buffer_id( buffer_id) ) ,
31133105 offset,
3114- size : size . map ( NonZeroU64 :: get ) ,
3106+ size,
31153107 } ) ;
31163108
31173109 Ok ( ( ) )
0 commit comments