Mesa (master): mesa/st: Extract preprocessing NIR steps

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Sep 10 22:07:03 UTC 2019


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

Author: Caio Marcelo de Oliveira Filho <caio.oliveira at intel.com>
Date:   Thu Aug 22 07:10:32 2019 -0700

mesa/st: Extract preprocessing NIR steps

Refactor to split the glsl_to_nir conversion from the preprocessing
NIR passes into separate functions, so we can use them in SPIR-V.
Unlike in GLSL, there we'll need to perform a few passes with the NIR
linker before doing the individual preprocess calls.

No behavior should change with this patch.

Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>

---

 src/mesa/state_tracker/st_glsl_to_nir.cpp | 29 +++++++++++++++--------------
 1 file changed, 15 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 52f56642078..5922650de2c 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -269,10 +269,10 @@ st_nir_opts(nir_shader *nir, bool scalar)
  * nir_lower_io state, so that shader variants can more easily insert/
  * replace variables, etc.
  */
-static nir_shader *
-st_glsl_to_nir(struct st_context *st, struct gl_program *prog,
-               struct gl_shader_program *shader_program,
-               gl_shader_stage stage)
+static void
+st_nir_preprocess(struct st_context *st, struct gl_program *prog,
+                  struct gl_shader_program *shader_program,
+                  gl_shader_stage stage)
 {
    const nir_shader_compiler_options *options =
       st->ctx->Const.ShaderCompilerOptions[prog->info.stage].NirOptions;
@@ -282,11 +282,7 @@ st_glsl_to_nir(struct st_context *st, struct gl_program *prog,
    assert(options);
    bool lower_64bit =
       options->lower_int64_options || options->lower_doubles_options;
-
-   if (prog->nir)
-      return prog->nir;
-
-   nir_shader *nir = glsl_to_nir(st->ctx, shader_program, stage, options);
+   nir_shader *nir = prog->nir;
 
    /* Set the next shader stage hint for VS and TES. */
    if (!nir->info.separate_shader &&
@@ -355,8 +351,6 @@ st_glsl_to_nir(struct st_context *st, struct gl_program *prog,
       if (lowered_64bit_ops)
          st_nir_opts(nir, is_scalar);
    }
-
-   return nir;
 }
 
 /* Second third of converting glsl_to_nir. This creates uniforms, gathers
@@ -510,10 +504,17 @@ st_nir_get_mesa_program(struct gl_context *ctx,
    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);
+   if (!prog->nir) {
+      const nir_shader_compiler_options *options =
+         st->ctx->Const.ShaderCompilerOptions[prog->info.stage].NirOptions;
+      assert(options);
+
+      prog->nir = glsl_to_nir(st->ctx, shader_program,
+                              prog->info.stage, options);
+      st_nir_preprocess(st, prog, shader_program, prog->info.stage);
+   }
 
-   set_st_program(prog, shader_program, nir);
-   prog->nir = nir;
+   set_st_program(prog, shader_program, prog->nir);
 }
 
 static void




More information about the mesa-commit mailing list