nir: move callsite of lower_outputs_to_temporaries
authorRob Clark <robclark@freedesktop.org>
Fri, 25 Mar 2016 17:47:15 +0000 (13:47 -0400)
committerRob Clark <robclark@freedesktop.org>
Wed, 11 May 2016 16:20:11 +0000 (12:20 -0400)
Going to convert this pass to parameterized lower_io_to_temporaries, and
we want the user to be able to specify whether to lower outputs or
inputs or both.  The restriction of running this pass before validate
to avoid output reads no longer applies.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/nir/glsl_to_nir.cpp
src/compiler/nir/nir_lower_outputs_to_temporaries.c
src/mesa/drivers/dri/i965/brw_nir.c

index e3fa623ba041ae646896f6dacdbdec0dec3fcb6d..a86b966a26b31d522deafb66c0647611be6f5b81 100644 (file)
@@ -143,8 +143,6 @@ glsl_to_nir(const struct gl_shader_program *shader_prog,
    v2.run(sh->ir);
    visit_exec_list(sh->ir, &v1);
 
-   nir_lower_outputs_to_temporaries(shader, nir_shader_get_entrypoint(shader));
-
    shader->info.name = ralloc_asprintf(shader, "GLSL%d", shader_prog->Name);
    if (shader_prog->Label)
       shader->info.label = ralloc_strdup(shader, shader_prog->Label);
index 21bc15b70b8b5af59f8bdf41baab0a1d959bffde..0dfb7b0e718cbdff9e32bb4dd02535ec97c2cc11 100644 (file)
  * Implements a pass that lowers output variables to a temporary plus an
  * output variable with a single copy at each exit point of the shader.
  * This way the output variable is only ever written.
- *
- * Because valid NIR requires that output variables are never read, this
- * pass is more of a helper for NIR producers and must be run before the
- * shader is ever validated.
  */
 
 #include "nir.h"
index 9414fa6561ee071aa590aaa1e67cf3b107a420e3..fb658ec85df302858d64dc462be50d93f7514f5d 100644 (file)
@@ -563,6 +563,7 @@ brw_create_nir(struct brw_context *brw,
    /* First, lower the GLSL IR or Mesa IR to NIR */
    if (shader_prog) {
       nir = glsl_to_nir(shader_prog, stage, options);
+      OPT_V(nir_lower_outputs_to_temporaries, nir_shader_get_entrypoint(nir));
    } else {
       nir = prog_to_nir(prog, options);
       OPT_V(nir_convert_to_ssa); /* turn registers into SSA */