[Mesa-dev] [PATCH 05/14] st/glsl_to_nir: split linking loop in two in prep of nir linking opts
Timothy Arceri
tarceri at itsqueeze.com
Tue Nov 21 03:37:26 UTC 2017
---
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);
+ }
- 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" */
--
2.14.3
More information about the mesa-dev
mailing list