From 90abaf8a214affa2bffdc04ee24f941caedb29c0 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Tue, 14 Nov 2017 12:56:20 +1100 Subject: [PATCH] st/glsl_to_nir: call some lowering passes earlier MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This is required so that we can enbale NIR linking optimisations. Reviewed-by: Nicolai Hähnle --- src/mesa/state_tracker/st_glsl_to_nir.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index 1b4f07111cf..5f92bcef004 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -300,7 +300,11 @@ st_glsl_to_nir(struct st_context *st, struct gl_program *prog, if (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 @@ -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); - 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 : */ if (prog->info.stage == MESA_SHADER_FRAGMENT) { 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); 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" { -- 2.30.2