[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