Mesa (master): st/mesa: move some NIR lowering before shader caching

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Oct 24 01:15:11 UTC 2019


Module: Mesa
Branch: master
Commit: 3634dca99a44a2812b4284037eecfadfc794240a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3634dca99a44a2812b4284037eecfadfc794240a

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Thu Oct 17 21:03:34 2019 -0400

st/mesa: move some NIR lowering before shader caching

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/state_tracker/st_glsl_to_nir.cpp | 19 +++++--------------
 src/mesa/state_tracker/st_program.c       | 15 +++++++++++++++
 src/mesa/state_tracker/st_program.h       |  3 +++
 3 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 43459d46b57..0e5bdaea59d 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -486,6 +486,11 @@ st_glsl_to_nir_post_opts(struct st_context *st, struct gl_program *prog,
    nir_variable_mode mask = nir_var_function_temp;
    nir_remove_dead_variables(nir, mask);
 
+   NIR_PASS_V(nir, nir_lower_atomics_to_ssbo,
+              st->ctx->Const.Program[nir->info.stage].MaxAtomicBuffers);
+
+   st_finalize_nir_before_variants(nir);
+
    if (st->ctx->_Shader->Flags & GLSL_DUMP) {
       _mesa_log("\n");
       _mesa_log("NIR IR for linked %s program %d:\n",
@@ -899,25 +904,11 @@ st_finalize_nir(struct st_context *st, struct gl_program *prog,
                 struct gl_shader_program *shader_program, nir_shader *nir)
 {
    struct pipe_screen *screen = st->pipe->screen;
-   const nir_shader_compiler_options *options =
-      st->ctx->Const.ShaderCompilerOptions[prog->info.stage].NirOptions;
 
    NIR_PASS_V(nir, nir_split_var_copies);
    NIR_PASS_V(nir, nir_lower_var_copies);
-   if (options->lower_all_io_to_temps ||
-       options->lower_all_io_to_elements ||
-       nir->info.stage == MESA_SHADER_VERTEX ||
-       nir->info.stage == MESA_SHADER_GEOMETRY) {
-      NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects, false);
-   } else if (nir->info.stage == MESA_SHADER_FRAGMENT) {
-      NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects, true);
-   }
 
    st_nir_assign_varying_locations(st, nir);
-
-   NIR_PASS_V(nir, nir_lower_atomics_to_ssbo,
-         st->ctx->Const.Program[nir->info.stage].MaxAtomicBuffers);
-
    st_nir_assign_uniform_locations(st->ctx, prog,
                                    &nir->uniforms);
 
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index 684599e4ef5..e60a9924f81 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -387,6 +387,20 @@ st_release_common_variants(struct st_context *st, struct st_common_program *p)
    delete_ir(&p->state);
 }
 
+void
+st_finalize_nir_before_variants(struct nir_shader *nir)
+{
+   NIR_PASS_V(nir, nir_split_var_copies);
+   NIR_PASS_V(nir, nir_lower_var_copies);
+   if (nir->options->lower_all_io_to_temps ||
+       nir->options->lower_all_io_to_elements ||
+       nir->info.stage == MESA_SHADER_VERTEX ||
+       nir->info.stage == MESA_SHADER_GEOMETRY) {
+      NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects, false);
+   } else if (nir->info.stage == MESA_SHADER_FRAGMENT) {
+      NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects, true);
+   }
+}
 
 /**
  * Translate ARB (asm) program to NIR
@@ -409,6 +423,7 @@ st_translate_prog_to_nir(struct st_context *st, struct gl_program *prog,
    /* Optimise NIR */
    NIR_PASS_V(nir, nir_opt_constant_folding);
    st_nir_opts(nir);
+   st_finalize_nir_before_variants(nir);
    nir_validate_shader(nir, "after st/ptn NIR opts");
 
    return nir;
diff --git a/src/mesa/state_tracker/st_program.h b/src/mesa/state_tracker/st_program.h
index d698e7b633f..90a77b9c17b 100644
--- a/src/mesa/state_tracker/st_program.h
+++ b/src/mesa/state_tracker/st_program.h
@@ -356,6 +356,9 @@ extern void
 st_destroy_program_variants(struct st_context *st);
 
 extern void
+st_finalize_nir_before_variants(struct nir_shader *nir);
+
+extern void
 st_prepare_vertex_program(struct st_vertex_program *stvp);
 
 extern void




More information about the mesa-commit mailing list