[Mesa-dev] [PATCH 1/2] st/glsl_to_nir: gather next_stage in shader_info

Marek Olšák maraeo at gmail.com
Tue Feb 27 16:45:36 UTC 2018


On Mon, Feb 26, 2018 at 10:43 AM, Timothy Arceri <tarceri at 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


More information about the mesa-dev mailing list