Mesa (master): glsl: use nir linker to link atomics

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jan 6 23:11:26 UTC 2020


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

Author: Timothy Arceri <tarceri at itsqueeze.com>
Date:   Mon Dec 23 11:37:57 2019 +1100

glsl: use nir linker to link atomics

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

---

 src/compiler/glsl/linker.cpp              | 7 +++++--
 src/mesa/state_tracker/st_context.c       | 5 +++++
 src/mesa/state_tracker/st_glsl_to_nir.cpp | 6 +++++-
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 63f4b46bd6b..cc770c4d7b1 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -4537,8 +4537,11 @@ link_and_validate_uniforms(struct gl_context *ctx,
    check_resources(ctx, prog);
    check_subroutine_resources(prog);
    check_image_resources(ctx, prog);
-   link_assign_atomic_counter_resources(ctx, prog);
-   link_check_atomic_counter_resources(ctx, prog);
+
+   if (!ctx->Const.UseNIRGLSLLinker) {
+      link_assign_atomic_counter_resources(ctx, prog);
+      link_check_atomic_counter_resources(ctx, prog);
+   }
 }
 
 static bool
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index 992f9fe00c9..72e1a50bca3 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -765,6 +765,11 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
 
    ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].PositionAlwaysInvariant = options->vs_position_always_invariant;
 
+   enum pipe_shader_ir preferred_ir = (enum pipe_shader_ir)
+      screen->get_shader_param(screen, PIPE_SHADER_VERTEX,
+                               PIPE_SHADER_CAP_PREFERRED_IR);
+   ctx->Const.UseNIRGLSLLinker = preferred_ir == PIPE_SHADER_IR_NIR;
+
    if (ctx->Const.GLSLVersion < 400) {
       for (i = 0; i < MESA_SHADER_STAGES; i++)
          ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectSampler = true;
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 11b6db490b9..c92b1c365a7 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -736,8 +736,12 @@ st_link_nir(struct gl_context *ctx,
    if (num_shaders == 1)
       st_nir_opts(linked_shader[0]->Program->nir);
 
-   if (!shader_program->data->spirv)
+   if (!shader_program->data->spirv) {
+      if (!gl_nir_link_glsl(ctx, shader_program))
+         return GL_FALSE;
+
       nir_build_program_resource_list(ctx, shader_program, false);
+   }
 
    for (unsigned i = 0; i < num_shaders; i++) {
       struct gl_linked_shader *shader = linked_shader[i];




More information about the mesa-commit mailing list