@@ -143,19 +143,8 @@ impl GlobalExt for wgc::hub::Global<IdentityPassThroughFactory> {
143
143
commands,
144
144
dynamic_offsets,
145
145
} => unsafe {
146
- let mut offsets = & dynamic_offsets[ ..] ;
147
146
let mut pass = wgc:: command:: RawPass :: new_compute ( encoder) ;
148
- for com in commands {
149
- pass. encode ( & com) ;
150
- if let wgc:: command:: ComputeCommand :: SetBindGroup {
151
- num_dynamic_offsets,
152
- ..
153
- } = com
154
- {
155
- pass. encode_slice ( & offsets[ ..num_dynamic_offsets as usize ] ) ;
156
- offsets = & offsets[ num_dynamic_offsets as usize ..] ;
157
- }
158
- }
147
+ pass. fill_compute_commands ( & commands, & dynamic_offsets) ;
159
148
let ( data, _) = pass. finish_compute ( ) ;
160
149
self . command_encoder_run_compute_pass :: < B > ( encoder, & data) ;
161
150
} ,
@@ -165,7 +154,6 @@ impl GlobalExt for wgc::hub::Global<IdentityPassThroughFactory> {
165
154
commands,
166
155
dynamic_offsets,
167
156
} => unsafe {
168
- let mut offsets = & dynamic_offsets[ ..] ;
169
157
let mut pass = wgc:: command:: RawPass :: new_render (
170
158
encoder,
171
159
& wgc:: command:: RenderPassDescriptor {
@@ -174,17 +162,7 @@ impl GlobalExt for wgc::hub::Global<IdentityPassThroughFactory> {
174
162
depth_stencil_attachment : target_depth_stencil. as_ref ( ) ,
175
163
} ,
176
164
) ;
177
- for com in commands {
178
- pass. encode ( & com) ;
179
- if let wgc:: command:: RenderCommand :: SetBindGroup {
180
- num_dynamic_offsets,
181
- ..
182
- } = com
183
- {
184
- pass. encode_slice ( & offsets[ ..num_dynamic_offsets as usize ] ) ;
185
- offsets = & offsets[ num_dynamic_offsets as usize ..] ;
186
- }
187
- }
165
+ pass. fill_render_commands ( & commands, & dynamic_offsets) ;
188
166
let ( data, _) = pass. finish_render ( ) ;
189
167
self . command_encoder_run_render_pass :: < B > ( encoder, & data) ;
190
168
} ,
@@ -408,6 +386,34 @@ impl GlobalExt for wgc::hub::Global<IdentityPassThroughFactory> {
408
386
A :: DestroyRenderPipeline ( id) => {
409
387
self . render_pipeline_destroy :: < B > ( id) ;
410
388
}
389
+ A :: CreateRenderBundle {
390
+ id,
391
+ desc,
392
+ commands,
393
+ dynamic_offsets,
394
+ } => {
395
+ let label = Label :: new ( & desc. label ) ;
396
+ let mut bundle_encoder = wgc:: command:: RenderBundleEncoder :: new (
397
+ & wgt:: RenderBundleEncoderDescriptor {
398
+ label : None ,
399
+ color_formats : & desc. color_formats ,
400
+ depth_stencil_format : desc. depth_stencil_format ,
401
+ sample_count : desc. sample_count ,
402
+ } ,
403
+ device,
404
+ ) ;
405
+ bundle_encoder. fill_commands ( & commands, & dynamic_offsets) ;
406
+ self . render_bundle_encoder_finish :: < B > (
407
+ bundle_encoder,
408
+ & wgt:: RenderBundleDescriptor {
409
+ label : label. as_ptr ( ) ,
410
+ } ,
411
+ id,
412
+ ) ;
413
+ }
414
+ A :: DestroyRenderBundle ( id) => {
415
+ self . render_bundle_destroy :: < B > ( id) ;
416
+ }
411
417
A :: WriteBuffer {
412
418
id,
413
419
data,
0 commit comments