st/glsl_to_nir: call some lowering passes earlier
This is required so that we can enbale NIR linking optimisations. Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
bd98b8c74e
commit
90abaf8a21
|
@ -300,7 +300,11 @@ st_glsl_to_nir(struct st_context *st, struct gl_program *prog,
|
||||||
if (prog->nir)
|
if (prog->nir)
|
||||||
return prog->nir;
|
return prog->nir;
|
||||||
|
|
||||||
return glsl_to_nir(shader_program, stage, options);
|
nir_shader *nir = glsl_to_nir(shader_program, stage, options);
|
||||||
|
|
||||||
|
st_nir_opts(nir);
|
||||||
|
|
||||||
|
return nir;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Second third of converting glsl_to_nir. This creates uniforms, gathers
|
/* Second third of converting glsl_to_nir. This creates uniforms, gathers
|
||||||
|
@ -343,13 +347,6 @@ st_glsl_to_nir_post_opts(struct st_context *st, struct gl_program *prog,
|
||||||
*/
|
*/
|
||||||
_mesa_associate_uniform_storage(st->ctx, shader_program, prog, true);
|
_mesa_associate_uniform_storage(st->ctx, shader_program, prog, true);
|
||||||
|
|
||||||
NIR_PASS_V(nir, nir_lower_io_to_temporaries,
|
|
||||||
nir_shader_get_entrypoint(nir),
|
|
||||||
true, true);
|
|
||||||
NIR_PASS_V(nir, nir_lower_global_vars_to_local);
|
|
||||||
NIR_PASS_V(nir, nir_split_var_copies);
|
|
||||||
NIR_PASS_V(nir, nir_lower_var_copies);
|
|
||||||
|
|
||||||
/* fragment shaders may need : */
|
/* fragment shaders may need : */
|
||||||
if (prog->info.stage == MESA_SHADER_FRAGMENT) {
|
if (prog->info.stage == MESA_SHADER_FRAGMENT) {
|
||||||
static const gl_state_index wposTransformState[STATE_LENGTH] = {
|
static const gl_state_index wposTransformState[STATE_LENGTH] = {
|
||||||
|
@ -497,6 +494,13 @@ st_nir_get_mesa_program(struct gl_context *ctx,
|
||||||
|
|
||||||
set_st_program(prog, shader_program, nir);
|
set_st_program(prog, shader_program, nir);
|
||||||
prog->nir = nir;
|
prog->nir = nir;
|
||||||
|
|
||||||
|
NIR_PASS_V(nir, nir_lower_io_to_temporaries,
|
||||||
|
nir_shader_get_entrypoint(nir),
|
||||||
|
true, true);
|
||||||
|
NIR_PASS_V(nir, nir_lower_global_vars_to_local);
|
||||||
|
NIR_PASS_V(nir, nir_split_var_copies);
|
||||||
|
NIR_PASS_V(nir, nir_lower_var_copies);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
Loading…
Reference in New Issue