Mesa (master): glsl/nir: Add and use a gl_nir_link() function

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


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

Author: Caio Marcelo de Oliveira Filho <caio.oliveira at intel.com>
Date:   Fri Aug 23 06:50:11 2019 -0700

glsl/nir: Add and use a gl_nir_link() function

Perform all the NIR linking steps in order.  Change iris and i965 to
use it.  Suggested by Alejandro.

v2: Add gl_nir_linker_options struct.

Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com> [v1]

---

 src/compiler/glsl/gl_nir_linker.c         | 16 ++++++++++++++++
 src/compiler/glsl/gl_nir_linker.h         |  8 ++++++++
 src/mesa/drivers/dri/i965/brw_link.cpp    | 12 ++++--------
 src/mesa/state_tracker/st_glsl_to_nir.cpp | 11 ++++-------
 4 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/src/compiler/glsl/gl_nir_linker.c b/src/compiler/glsl/gl_nir_linker.c
index 4503231c6c2..8b5ff28a399 100644
--- a/src/compiler/glsl/gl_nir_linker.c
+++ b/src/compiler/glsl/gl_nir_linker.c
@@ -253,3 +253,19 @@ nir_build_program_resource_list(struct gl_context *ctx,
 
    _mesa_set_destroy(resource_set, NULL);
 }
+
+bool
+gl_nir_link(struct gl_context *ctx, struct gl_shader_program *prog,
+            const struct gl_nir_linker_options *options)
+{
+   if (!gl_nir_link_uniform_blocks(ctx, prog))
+      return false;
+
+   if (!gl_nir_link_uniforms(ctx, prog, options->fill_parameters))
+      return false;
+
+   gl_nir_link_assign_atomic_counter_resources(ctx, prog);
+   gl_nir_link_assign_xfb_resources(ctx, prog);
+
+   return true;
+}
diff --git a/src/compiler/glsl/gl_nir_linker.h b/src/compiler/glsl/gl_nir_linker.h
index ecbc3f39090..82c5bf2ab49 100644
--- a/src/compiler/glsl/gl_nir_linker.h
+++ b/src/compiler/glsl/gl_nir_linker.h
@@ -31,6 +31,14 @@ extern "C" {
 struct gl_context;
 struct gl_shader_program;
 
+struct gl_nir_linker_options {
+   bool fill_parameters;
+};
+
+bool gl_nir_link(struct gl_context *ctx,
+                 struct gl_shader_program *prog,
+                 const struct gl_nir_linker_options *options);
+
 bool gl_nir_link_uniforms(struct gl_context *ctx,
                           struct gl_shader_program *prog,
                           bool fill_parameters);
diff --git a/src/mesa/drivers/dri/i965/brw_link.cpp b/src/mesa/drivers/dri/i965/brw_link.cpp
index c726551513a..512206e71e6 100644
--- a/src/mesa/drivers/dri/i965/brw_link.cpp
+++ b/src/mesa/drivers/dri/i965/brw_link.cpp
@@ -269,15 +269,11 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg)
 
    /* SPIR-V programs use a NIR linker */
    if (shProg->data->spirv) {
-      if (!gl_nir_link_uniform_blocks(ctx, shProg)) {
+      static const gl_nir_linker_options opts = {
+         .fill_parameters = false,
+      };
+      if (!gl_nir_link(ctx, shProg, &opts))
          return GL_FALSE;
-      }
-
-      if (!gl_nir_link_uniforms(ctx, shProg, /* fill_parameters */ false))
-         return GL_FALSE;
-
-      gl_nir_link_assign_atomic_counter_resources(ctx, shProg);
-      gl_nir_link_assign_xfb_resources(ctx, shProg);
    }
 
    for (stage = 0; stage < ARRAY_SIZE(shProg->_LinkedShaders); stage++) {
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 39203435515..280a7782170 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -687,15 +687,12 @@ st_link_nir(struct gl_context *ctx,
     * st_nir_preprocess.
     */
    if (shader_program->data->spirv) {
-      if (!gl_nir_link_uniform_blocks(ctx, shader_program))
+      static const gl_nir_linker_options opts = {
+         .fill_parameters = true,
+      };
+      if (!gl_nir_link(ctx, shader_program, &opts))
          return GL_FALSE;
 
-      if (!gl_nir_link_uniforms(ctx, shader_program, /* fill_parameters */ true))
-         return GL_FALSE;
-
-      gl_nir_link_assign_atomic_counter_resources(ctx, shader_program);
-      gl_nir_link_assign_xfb_resources(ctx, shader_program);
-
       nir_build_program_resource_list(ctx, shader_program);
 
       for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {




More information about the mesa-commit mailing list