[Mesa-dev] [PATCH 05/14] st/glsl_to_nir: split linking loop in two in prep of nir linking opts

Nicolai Hähnle nhaehnle at gmail.com
Wed Nov 29 11:50:49 UTC 2017


On 21.11.2017 04:37, Timothy Arceri wrote:
> ---
>   src/mesa/state_tracker/st_glsl_to_nir.cpp | 26 +++++++++++++++-----------
>   1 file changed, 15 insertions(+), 11 deletions(-)
> 
> diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
> index bb0ba07012..8c22bde835 100644
> --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
> @@ -470,21 +470,21 @@ set_st_program(struct gl_program *prog,
>         stcp = (struct st_compute_program *)prog;
>         stcp->shader_program = shader_program;
>         stcp->tgsi.ir_type = PIPE_SHADER_IR_NIR;
>         stcp->tgsi.prog = nir_shader_clone(NULL, nir);
>         break;
>      default:
>         unreachable("unknown shader stage");
>      }
>   }
>   
> -struct gl_program *
> +static nir_shader *
>   st_nir_get_mesa_program(struct gl_context *ctx,
>                           struct gl_shader_program *shader_program,
>                           struct gl_linked_shader *shader)
>   {
>      struct st_context *st = st_context(ctx);
>      struct gl_program *prog;
>   
>      validate_ir_tree(shader->ir);
>   
>      prog = shader->Program;
> @@ -504,39 +504,43 @@ st_nir_get_mesa_program(struct gl_context *ctx,
>         _mesa_log("\n\n");
>      }
>   
>      prog->ExternalSamplersUsed = gl_external_samplers(prog);
>      _mesa_update_shader_textures_used(shader_program, prog);
>   
>      nir_shader *nir = st_glsl_to_nir(st, prog, shader_program, shader->Stage);
>   
>      set_st_program(prog, shader_program, nir);
>   
> -   return prog;
> +   return nir;
>   }
>   
>   bool
>   st_link_nir(struct gl_context *ctx,
>               struct gl_shader_program *shader_program)
>   {
>      for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
>         struct gl_linked_shader *shader = shader_program->_LinkedShaders[i];
>         if (shader == NULL)
>            continue;
>   
> -      struct gl_program *linked_prog =
> -         st_nir_get_mesa_program(ctx, shader_program, shader);
> +      nir_shader *nir = st_nir_get_mesa_program(ctx, shader_program, shader);

It seems a bit odd to have this unused variable here.

Apparently the long-term plan is to just set prog->nir in 
st_nir_get_mesa_program, so perhaps this could be done here already and 
the return of st_nir_get_mesa_program could just be removed?

Cheers,
Nicolai


> +   }
>   
> -      if (linked_prog) {
> -         if (!ctx->Driver.ProgramStringNotify(ctx,
> -                                              _mesa_shader_stage_to_program(i),
> -                                              linked_prog)) {
> -            _mesa_reference_program(ctx, &shader->Program, NULL);
> -            return false;
> -         }
> +   for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
> +      struct gl_linked_shader *shader = shader_program->_LinkedShaders[i];
> +      if (shader == NULL)
> +         continue;
> +
> +      assert(shader->Program);
> +      if (!ctx->Driver.ProgramStringNotify(ctx,
> +                                           _mesa_shader_stage_to_program(i),
> +                                           shader->Program)) {
> +         _mesa_reference_program(ctx, &shader->Program, NULL);
> +         return false;
>         }
>      }
>   
>      return true;
>   }
>   
>   } /* extern "C" */
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list