@@ -6359,7 +6359,7 @@ template <typename A>
63596359 struct VertexBufferMappingResolved < ' a > {
63606360 id : u32 ,
63616361 stride : u32 ,
6362- indexed_by_vertex : bool ,
6362+ step_mode : back :: msl :: VertexBufferStepMode ,
63636363 ty_name : String ,
63646364 param_name : String ,
63656365 elem_name : String ,
@@ -6395,10 +6395,14 @@ template <typename A>
63956395 "Vertex pulling requires a non-zero buffer stride."
63966396 ) ;
63976397
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+ }
64026406 }
64036407
64046408 let buffer_ty = self . namer . call ( format ! ( "vb_{buffer_id}_type" ) . as_str ( ) ) ;
@@ -6408,7 +6412,7 @@ template <typename A>
64086412 vbm_resolved. push ( VertexBufferMappingResolved {
64096413 id : buffer_id,
64106414 stride : buffer_stride,
6411- indexed_by_vertex : vbm. indexed_by_vertex ,
6415+ step_mode : vbm. step_mode ,
64126416 ty_name : buffer_ty,
64136417 param_name : buffer_param,
64146418 elem_name : buffer_elem,
@@ -7199,8 +7203,6 @@ template <typename A>
71997203 }
72007204
72017205 if do_vertex_pulling {
7202- assert ! ( needs_vertex_id || needs_instance_id) ;
7203-
72047206 let mut separator = if is_first_argument {
72057207 is_first_argument = false ;
72067208 ' '
@@ -7278,16 +7280,22 @@ template <typename A>
72787280
72797281 let idx = & vbm. id ;
72807282 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+ }
72867298 }
7287- } else if let Some ( ref name) = i_existing_id {
7288- name
7289- } else {
7290- & i_id
72917299 } ;
72927300 write ! (
72937301 self . out,
0 commit comments