@@ -676,10 +676,9 @@ pub enum RenderPassErrorInner {
676676 MissingDownlevelFlags ( #[ from] MissingDownlevelFlags ) ,
677677 #[ error( "Indirect buffer offset {0:?} is not a multiple of 4" ) ]
678678 UnalignedIndirectBufferOffset ( BufferAddress ) ,
679- #[ error( "Indirect draw uses bytes {offset}..{end_offset} {} which overruns indirect buffer of size {buffer_size}" ,
680- count. map_or_else( String :: new, |v| format!( "(using count {v})" ) ) ) ]
679+ #[ error( "Indirect draw uses bytes {offset}..{end_offset} using count {count} which overruns indirect buffer of size {buffer_size}" ) ]
681680 IndirectBufferOverrun {
682- count : Option < NonZeroU32 > ,
681+ count : u32 ,
683682 offset : u64 ,
684683 end_offset : u64 ,
685684 buffer_size : u64 ,
@@ -1787,14 +1786,14 @@ impl Global {
17871786 )
17881787 . map_pass_err ( scope) ?;
17891788 }
1790- ArcRenderCommand :: MultiDrawIndirect {
1789+ ArcRenderCommand :: DrawIndirect {
17911790 buffer,
17921791 offset,
17931792 count,
17941793 indexed,
17951794 } => {
17961795 let scope = PassErrorScope :: Draw {
1797- kind : if count. is_some ( ) {
1796+ kind : if count != 1 {
17981797 DrawKind :: MultiDrawIndirect
17991798 } else {
18001799 DrawKind :: DrawIndirect
@@ -2467,7 +2466,7 @@ fn multi_draw_indirect(
24672466 cmd_buf : & Arc < CommandBuffer > ,
24682467 indirect_buffer : Arc < crate :: resource:: Buffer > ,
24692468 offset : u64 ,
2470- count : Option < NonZeroU32 > ,
2469+ count : u32 ,
24712470 indexed : bool ,
24722471) -> Result < ( ) , RenderPassErrorInner > {
24732472 api_log ! (
@@ -2482,7 +2481,7 @@ fn multi_draw_indirect(
24822481 true => size_of :: < wgt:: DrawIndexedIndirectArgs > ( ) ,
24832482 } ;
24842483
2485- if count. is_some ( ) {
2484+ if count != 1 {
24862485 state
24872486 . device
24882487 . require_features ( wgt:: Features :: MULTI_DRAW_INDIRECT ) ?;
@@ -2502,13 +2501,11 @@ fn multi_draw_indirect(
25022501 indirect_buffer. check_usage ( BufferUsages :: INDIRECT ) ?;
25032502 let indirect_raw = indirect_buffer. try_raw ( state. snatch_guard ) ?;
25042503
2505- let actual_count = count. map_or ( 1 , |c| c. get ( ) ) ;
2506-
25072504 if offset % 4 != 0 {
25082505 return Err ( RenderPassErrorInner :: UnalignedIndirectBufferOffset ( offset) ) ;
25092506 }
25102507
2511- let end_offset = offset + stride as u64 * actual_count as u64 ;
2508+ let end_offset = offset + stride as u64 * count as u64 ;
25122509 if end_offset > indirect_buffer. size {
25132510 return Err ( RenderPassErrorInner :: IndirectBufferOverrun {
25142511 count,
@@ -2528,14 +2525,12 @@ fn multi_draw_indirect(
25282525
25292526 match indexed {
25302527 false => unsafe {
2531- state
2532- . raw_encoder
2533- . draw_indirect ( indirect_raw, offset, actual_count) ;
2528+ state. raw_encoder . draw_indirect ( indirect_raw, offset, count) ;
25342529 } ,
25352530 true => unsafe {
25362531 state
25372532 . raw_encoder
2538- . draw_indexed_indirect ( indirect_raw, offset, actual_count ) ;
2533+ . draw_indexed_indirect ( indirect_raw, offset, count ) ;
25392534 } ,
25402535 }
25412536 Ok ( ( ) )
@@ -2599,7 +2594,7 @@ fn multi_draw_indirect_count(
25992594 let end_offset = offset + stride * max_count as u64 ;
26002595 if end_offset > indirect_buffer. size {
26012596 return Err ( RenderPassErrorInner :: IndirectBufferOverrun {
2602- count : None ,
2597+ count : 1 ,
26032598 offset,
26042599 end_offset,
26052600 buffer_size : indirect_buffer. size ,
@@ -3103,10 +3098,10 @@ impl Global {
31033098 } ;
31043099 let base = pass. base_mut ( scope) ?;
31053100
3106- base. commands . push ( ArcRenderCommand :: MultiDrawIndirect {
3101+ base. commands . push ( ArcRenderCommand :: DrawIndirect {
31073102 buffer : self . resolve_render_pass_buffer_id ( scope, buffer_id) ?,
31083103 offset,
3109- count : None ,
3104+ count : 1 ,
31103105 indexed : false ,
31113106 } ) ;
31123107
@@ -3125,10 +3120,10 @@ impl Global {
31253120 } ;
31263121 let base = pass. base_mut ( scope) ?;
31273122
3128- base. commands . push ( ArcRenderCommand :: MultiDrawIndirect {
3123+ base. commands . push ( ArcRenderCommand :: DrawIndirect {
31293124 buffer : self . resolve_render_pass_buffer_id ( scope, buffer_id) ?,
31303125 offset,
3131- count : None ,
3126+ count : 1 ,
31323127 indexed : true ,
31333128 } ) ;
31343129
@@ -3148,10 +3143,10 @@ impl Global {
31483143 } ;
31493144 let base = pass. base_mut ( scope) ?;
31503145
3151- base. commands . push ( ArcRenderCommand :: MultiDrawIndirect {
3146+ base. commands . push ( ArcRenderCommand :: DrawIndirect {
31523147 buffer : self . resolve_render_pass_buffer_id ( scope, buffer_id) ?,
31533148 offset,
3154- count : NonZeroU32 :: new ( count ) ,
3149+ count,
31553150 indexed : false ,
31563151 } ) ;
31573152
@@ -3171,10 +3166,10 @@ impl Global {
31713166 } ;
31723167 let base = pass. base_mut ( scope) ?;
31733168
3174- base. commands . push ( ArcRenderCommand :: MultiDrawIndirect {
3169+ base. commands . push ( ArcRenderCommand :: DrawIndirect {
31753170 buffer : self . resolve_render_pass_buffer_id ( scope, buffer_id) ?,
31763171 offset,
3177- count : NonZeroU32 :: new ( count ) ,
3172+ count,
31783173 indexed : true ,
31793174 } ) ;
31803175
0 commit comments