@@ -93,6 +93,7 @@ use core::{
93
93
use arrayvec:: ArrayVec ;
94
94
use thiserror:: Error ;
95
95
96
+ use wgpu_hal:: ShouldBeNonZeroExt ;
96
97
use wgt:: error:: { ErrorType , WebGpuError } ;
97
98
98
99
use crate :: {
@@ -504,7 +505,7 @@ impl RenderBundleEncoder {
504
505
buffer_id,
505
506
index_format,
506
507
offset,
507
- size,
508
+ size : size . map ( NonZeroU64 :: get ) ,
508
509
} ) ;
509
510
}
510
511
}
@@ -609,7 +610,7 @@ fn set_index_buffer(
609
610
buffer_id : id:: Id < id:: markers:: Buffer > ,
610
611
index_format : wgt:: IndexFormat ,
611
612
offset : u64 ,
612
- size : Option < NonZeroU64 > ,
613
+ size : Option < wgt :: BufferSizeOrZero > ,
613
614
) -> Result < ( ) , RenderBundleErrorInner > {
614
615
let buffer = buffer_guard. get ( buffer_id) . get ( ) ?;
615
616
@@ -641,7 +642,7 @@ fn set_vertex_buffer(
641
642
slot : u32 ,
642
643
buffer_id : id:: Id < id:: markers:: Buffer > ,
643
644
offset : u64 ,
644
- size : Option < NonZeroU64 > ,
645
+ size : Option < wgt :: BufferSizeOrZero > ,
645
646
) -> Result < ( ) , RenderBundleErrorInner > {
646
647
let max_vertex_buffers = state. device . limits . max_vertex_buffers ;
647
648
if slot >= max_vertex_buffers {
@@ -1166,19 +1167,16 @@ impl IndexState {
1166
1167
. range
1167
1168
. end
1168
1169
. 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" ) ;
1174
1172
1175
1173
if self . is_dirty {
1176
1174
self . is_dirty = false ;
1177
1175
Some ( ArcRenderCommand :: SetIndexBuffer {
1178
1176
buffer : self . buffer . clone ( ) ,
1179
1177
index_format : self . format ,
1180
1178
offset : self . range . start ,
1181
- size : binding_size,
1179
+ size : Some ( binding_size) ,
1182
1180
} )
1183
1181
} else {
1184
1182
None
@@ -1221,24 +1219,20 @@ impl VertexState {
1221
1219
///
1222
1220
/// `slot` is the index of the vertex buffer slot that `self` tracks.
1223
1221
fn flush ( & mut self , slot : u32 ) -> Option < ArcRenderCommand > {
1224
- // This was all checked before, but let's check again just in case.
1225
1222
let binding_size = self
1226
1223
. range
1227
1224
. end
1228
1225
. 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" ) ;
1234
1228
1235
1229
if self . is_dirty {
1236
1230
self . is_dirty = false ;
1237
1231
Some ( ArcRenderCommand :: SetVertexBuffer {
1238
1232
slot,
1239
1233
buffer : self . buffer . clone ( ) ,
1240
1234
offset : self . range . start ,
1241
- size : binding_size,
1235
+ size : Some ( binding_size) ,
1242
1236
} )
1243
1237
} else {
1244
1238
None
@@ -1602,7 +1596,7 @@ where
1602
1596
pub mod bundle_ffi {
1603
1597
use super :: { RenderBundleEncoder , RenderCommand } ;
1604
1598
use crate :: { id, RawString } ;
1605
- use core:: { convert:: TryInto , slice} ;
1599
+ use core:: { convert:: TryInto , num :: NonZeroU64 , slice} ;
1606
1600
use wgt:: { BufferAddress , BufferSize , DynamicOffset , IndexFormat } ;
1607
1601
1608
1602
/// # Safety
@@ -1661,7 +1655,7 @@ pub mod bundle_ffi {
1661
1655
slot,
1662
1656
buffer_id,
1663
1657
offset,
1664
- size,
1658
+ size : size . map ( NonZeroU64 :: get ) ,
1665
1659
} ) ;
1666
1660
}
1667
1661
0 commit comments