On Mon, Feb 26, 2018 at 10:43 AM, Timothy Arceri <tarc...@itsqueeze.com> wrote: > --- > src/compiler/shader_info.h | 5 +++++ > src/mesa/state_tracker/st_glsl_to_nir.cpp | 13 +++++++++++++ > 2 files changed, 18 insertions(+) > > diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h > index e7fd7dbe62..11a59ff6ac 100644 > --- a/src/compiler/shader_info.h > +++ b/src/compiler/shader_info.h > @@ -54,6 +54,11 @@ typedef struct shader_info { > /** The shader stage, such as MESA_SHADER_VERTEX. */ > gl_shader_stage stage; > > + /** The shader stage in a non SSO linked program that follows this stage, > + * such as MESA_SHADER_FRAGMENT. > + */ > + gl_shader_stage next_stage; > + > /* Number of textures used by this shader */ > unsigned num_textures; > /* Number of uniform buffers used by this shader */ > diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp > b/src/mesa/state_tracker/st_glsl_to_nir.cpp > index 765c827d93..914fd2e898 100644 > --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp > +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp > @@ -317,6 +317,19 @@ st_glsl_to_nir(struct st_context *st, struct gl_program > *prog, > > nir_shader *nir = glsl_to_nir(shader_program, stage, options); > > + /* Set the next shader stage hint for VS and TES. */ > + if (!nir->info.separate_shader && > + (nir->info.stage == MESA_SHADER_VERTEX || > + nir->info.stage == MESA_SHADER_TESS_EVAL)) { > + > + unsigned prev_stages = (1 << (prog->info.stage + 1)) - 1; > + unsigned stages_mask = > + ~prev_stages & shader_program->data->linked_stages; > + > + nir->info.next_stage = stages_mask ? > + (gl_shader_stage) u_bit_scan(&stages_mask) : MESA_SHADER_FRAGMENT;
ffs would be better. Also, ureg sets ..._SHADER_FRAGMENT if st/mesa doesn't set anything (e.g. it's a separate shader). Marek _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev