@@ -6359,7 +6359,7 @@ template <typename A>
6359
6359
struct VertexBufferMappingResolved < ' a > {
6360
6360
id : u32 ,
6361
6361
stride : u32 ,
6362
- indexed_by_vertex : bool ,
6362
+ step_mode : back :: msl :: VertexBufferStepMode ,
6363
6363
ty_name : String ,
6364
6364
param_name : String ,
6365
6365
elem_name : String ,
@@ -6395,10 +6395,14 @@ template <typename A>
6395
6395
"Vertex pulling requires a non-zero buffer stride."
6396
6396
) ;
6397
6397
6398
- if vbm. indexed_by_vertex {
6399
- needs_vertex_id = true ;
6400
- } else {
6401
- needs_instance_id = true ;
6398
+ match vbm. step_mode {
6399
+ back:: msl:: VertexBufferStepMode :: Constant => { }
6400
+ back:: msl:: VertexBufferStepMode :: ByVertex => {
6401
+ needs_vertex_id = true ;
6402
+ }
6403
+ back:: msl:: VertexBufferStepMode :: ByInstance => {
6404
+ needs_instance_id = true ;
6405
+ }
6402
6406
}
6403
6407
6404
6408
let buffer_ty = self . namer . call ( format ! ( "vb_{buffer_id}_type" ) . as_str ( ) ) ;
@@ -6408,7 +6412,7 @@ template <typename A>
6408
6412
vbm_resolved. push ( VertexBufferMappingResolved {
6409
6413
id : buffer_id,
6410
6414
stride : buffer_stride,
6411
- indexed_by_vertex : vbm. indexed_by_vertex ,
6415
+ step_mode : vbm. step_mode ,
6412
6416
ty_name : buffer_ty,
6413
6417
param_name : buffer_param,
6414
6418
elem_name : buffer_elem,
@@ -7199,8 +7203,6 @@ template <typename A>
7199
7203
}
7200
7204
7201
7205
if do_vertex_pulling {
7202
- assert ! ( needs_vertex_id || needs_instance_id) ;
7203
-
7204
7206
let mut separator = if is_first_argument {
7205
7207
is_first_argument = false ;
7206
7208
' '
@@ -7278,16 +7280,22 @@ template <typename A>
7278
7280
7279
7281
let idx = & vbm. id ;
7280
7282
let stride = & vbm. stride ;
7281
- let index_name = if vbm. indexed_by_vertex {
7282
- if let Some ( ref name) = v_existing_id {
7283
- name
7284
- } else {
7285
- & v_id
7283
+ let index_name = match vbm. step_mode {
7284
+ back:: msl:: VertexBufferStepMode :: Constant => "0" ,
7285
+ back:: msl:: VertexBufferStepMode :: ByVertex => {
7286
+ if let Some ( ref name) = v_existing_id {
7287
+ name
7288
+ } else {
7289
+ & v_id
7290
+ }
7291
+ }
7292
+ back:: msl:: VertexBufferStepMode :: ByInstance => {
7293
+ if let Some ( ref name) = i_existing_id {
7294
+ name
7295
+ } else {
7296
+ & i_id
7297
+ }
7286
7298
}
7287
- } else if let Some ( ref name) = i_existing_id {
7288
- name
7289
- } else {
7290
- & i_id
7291
7299
} ;
7292
7300
write ! (
7293
7301
self . out,
0 commit comments