@@ -93,6 +93,7 @@ use core::{
9393use arrayvec:: ArrayVec ;
9494use thiserror:: Error ;
9595
96+ use wgpu_hal:: ShouldBeNonZeroExt ;
9697use wgt:: error:: { ErrorType , WebGpuError } ;
9798
9899use crate :: {
@@ -504,7 +505,7 @@ impl RenderBundleEncoder {
504505 buffer_id,
505506 index_format,
506507 offset,
507- size,
508+ size : size . map ( NonZeroU64 :: get ) ,
508509 } ) ;
509510 }
510511}
@@ -609,7 +610,7 @@ fn set_index_buffer(
609610 buffer_id : id:: Id < id:: markers:: Buffer > ,
610611 index_format : wgt:: IndexFormat ,
611612 offset : u64 ,
612- size : Option < NonZeroU64 > ,
613+ size : Option < wgt :: BufferSizeOrZero > ,
613614) -> Result < ( ) , RenderBundleErrorInner > {
614615 let buffer = buffer_guard. get ( buffer_id) . get ( ) ?;
615616
@@ -641,7 +642,7 @@ fn set_vertex_buffer(
641642 slot : u32 ,
642643 buffer_id : id:: Id < id:: markers:: Buffer > ,
643644 offset : u64 ,
644- size : Option < NonZeroU64 > ,
645+ size : Option < wgt :: BufferSizeOrZero > ,
645646) -> Result < ( ) , RenderBundleErrorInner > {
646647 let max_vertex_buffers = state. device . limits . max_vertex_buffers ;
647648 if slot >= max_vertex_buffers {
@@ -1166,19 +1167,16 @@ impl IndexState {
11661167 . range
11671168 . end
11681169 . checked_sub ( self . range . start )
1169- . and_then ( wgt:: BufferSize :: new) ;
1170- assert ! (
1171- self . range. end <= self . buffer. size && binding_size. is_some( ) ,
1172- "index buffer range must have non-zero size and be contained in buffer" ,
1173- ) ;
1170+ . filter ( |_| self . range . end <= self . buffer . size )
1171+ . expect ( "index range must be contained in buffer" ) ;
11741172
11751173 if self . is_dirty {
11761174 self . is_dirty = false ;
11771175 Some ( ArcRenderCommand :: SetIndexBuffer {
11781176 buffer : self . buffer . clone ( ) ,
11791177 index_format : self . format ,
11801178 offset : self . range . start ,
1181- size : binding_size,
1179+ size : Some ( binding_size) ,
11821180 } )
11831181 } else {
11841182 None
@@ -1221,24 +1219,20 @@ impl VertexState {
12211219 ///
12221220 /// `slot` is the index of the vertex buffer slot that `self` tracks.
12231221 fn flush ( & mut self , slot : u32 ) -> Option < ArcRenderCommand > {
1224- // This was all checked before, but let's check again just in case.
12251222 let binding_size = self
12261223 . range
12271224 . end
12281225 . checked_sub ( self . range . start )
1229- . and_then ( wgt:: BufferSize :: new) ;
1230- assert ! (
1231- self . range. end <= self . buffer. size && binding_size. is_some( ) ,
1232- "vertex buffer range must have non-zero size and be contained in buffer" ,
1233- ) ;
1226+ . filter ( |_| self . range . end <= self . buffer . size )
1227+ . expect ( "vertex range must be contained in buffer" ) ;
12341228
12351229 if self . is_dirty {
12361230 self . is_dirty = false ;
12371231 Some ( ArcRenderCommand :: SetVertexBuffer {
12381232 slot,
12391233 buffer : self . buffer . clone ( ) ,
12401234 offset : self . range . start ,
1241- size : binding_size,
1235+ size : Some ( binding_size) ,
12421236 } )
12431237 } else {
12441238 None
@@ -1602,7 +1596,7 @@ where
16021596pub mod bundle_ffi {
16031597 use super :: { RenderBundleEncoder , RenderCommand } ;
16041598 use crate :: { id, RawString } ;
1605- use core:: { convert:: TryInto , slice} ;
1599+ use core:: { convert:: TryInto , num :: NonZeroU64 , slice} ;
16061600 use wgt:: { BufferAddress , BufferSize , DynamicOffset , IndexFormat } ;
16071601
16081602 /// # Safety
@@ -1661,7 +1655,7 @@ pub mod bundle_ffi {
16611655 slot,
16621656 buffer_id,
16631657 offset,
1664- size,
1658+ size : size . map ( NonZeroU64 :: get ) ,
16651659 } ) ;
16661660 }
16671661
0 commit comments