Mesa (main): glsl/nir/linker: avoid passing gl_context inside gl_nir linker

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jan 7 06:54:16 UTC 2022


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Fri Jan  7 11:20:14 2022 +1000

glsl/nir/linker: avoid passing gl_context inside gl_nir linker

Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14433>

---

 src/compiler/glsl/gl_nir_link_uniform_blocks.c     |  8 ++-
 .../glsl/gl_nir_link_uniform_initializers.c        |  4 +-
 src/compiler/glsl/gl_nir_link_uniforms.c           | 60 +++++++++++-----------
 src/compiler/glsl/gl_nir_link_xfb.c                |  4 +-
 src/compiler/glsl/gl_nir_linker.c                  | 49 +++++++++---------
 src/compiler/glsl/gl_nir_linker.h                  | 19 +++----
 src/mesa/state_tracker/st_glsl_to_nir.cpp          |  7 +--
 7 files changed, 77 insertions(+), 74 deletions(-)

diff --git a/src/compiler/glsl/gl_nir_link_uniform_blocks.c b/src/compiler/glsl/gl_nir_link_uniform_blocks.c
index d62aae10861..3cf6d806158 100644
--- a/src/compiler/glsl/gl_nir_link_uniform_blocks.c
+++ b/src/compiler/glsl/gl_nir_link_uniform_blocks.c
@@ -542,7 +542,6 @@ fill_block(struct gl_uniform_block *block,
  */
 static void
 link_linked_shader_uniform_blocks(void *mem_ctx,
-                                  struct gl_context *ctx,
                                   struct gl_shader_program *prog,
                                   struct gl_linked_shader *shader,
                                   struct gl_uniform_block **blocks,
@@ -584,8 +583,7 @@ link_linked_shader_uniform_blocks(void *mem_ctx,
 }
 
 bool
-gl_nir_link_uniform_blocks(struct gl_context *ctx,
-                           struct gl_shader_program *prog)
+gl_nir_link_uniform_blocks(struct gl_shader_program *prog)
 {
    void *mem_ctx = ralloc_context(NULL);
    bool ret = false;
@@ -599,11 +597,11 @@ gl_nir_link_uniform_blocks(struct gl_context *ctx,
       if (!linked)
          continue;
 
-      link_linked_shader_uniform_blocks(mem_ctx, ctx, prog, linked,
+      link_linked_shader_uniform_blocks(mem_ctx, prog, linked,
                                         &ubo_blocks, &num_ubo_blocks,
                                         BLOCK_UBO);
 
-      link_linked_shader_uniform_blocks(mem_ctx, ctx, prog, linked,
+      link_linked_shader_uniform_blocks(mem_ctx, prog, linked,
                                         &ssbo_blocks, &num_ssbo_blocks,
                                         BLOCK_SSBO);
 
diff --git a/src/compiler/glsl/gl_nir_link_uniform_initializers.c b/src/compiler/glsl/gl_nir_link_uniform_initializers.c
index 488bdba0bca..50bb6f5b07e 100644
--- a/src/compiler/glsl/gl_nir_link_uniform_initializers.c
+++ b/src/compiler/glsl/gl_nir_link_uniform_initializers.c
@@ -255,7 +255,7 @@ set_uniform_initializer(struct set_uniform_initializer_closure *data,
 }
 
 void
-gl_nir_set_uniform_initializers(struct gl_context *ctx,
+gl_nir_set_uniform_initializers(const struct gl_constants *consts,
                                 struct gl_shader_program *prog)
 {
    for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
@@ -273,7 +273,7 @@ gl_nir_set_uniform_initializers(struct gl_context *ctx,
                .prog = sh->Program,
                .var = var,
                .location = var->data.location,
-               .boolean_true = ctx->Const.UniformBooleanTrue
+               .boolean_true = consts->UniformBooleanTrue
             };
             set_uniform_initializer(&data,
                                     var->type,
diff --git a/src/compiler/glsl/gl_nir_link_uniforms.c b/src/compiler/glsl/gl_nir_link_uniforms.c
index a7a211bfe57..839a38ad8e1 100644
--- a/src/compiler/glsl/gl_nir_link_uniforms.c
+++ b/src/compiler/glsl/gl_nir_link_uniforms.c
@@ -174,7 +174,7 @@ update_array_sizes(struct gl_shader_program *prog, nir_variable *var,
 }
 
 static void
-nir_setup_uniform_remap_tables(struct gl_context *ctx,
+nir_setup_uniform_remap_tables(const struct gl_constants *consts,
                                struct gl_shader_program *prog)
 {
    unsigned total_entries = prog->NumExplicitUniformLocations;
@@ -296,10 +296,10 @@ nir_setup_uniform_remap_tables(struct gl_context *ctx,
    /* Verify that total amount of entries for explicit and implicit locations
     * is less than MAX_UNIFORM_LOCATIONS.
     */
-   if (total_entries > ctx->Const.MaxUserAssignableUniformLocations) {
+   if (total_entries > consts->MaxUserAssignableUniformLocations) {
       linker_error(prog, "count of uniform locations > MAX_UNIFORM_LOCATIONS"
                    "(%u > %u)", total_entries,
-                   ctx->Const.MaxUserAssignableUniformLocations);
+                   consts->MaxUserAssignableUniformLocations);
    }
 
    /* Reserve all the explicit locations of the active subroutine uniforms. */
@@ -635,7 +635,7 @@ struct nir_link_uniforms_state {
 
 static void
 add_parameter(struct gl_uniform_storage *uniform,
-              struct gl_context *ctx,
+              const struct gl_constants *consts,
               struct gl_shader_program *prog,
               const struct glsl_type *type,
               struct nir_link_uniforms_state *state)
@@ -662,7 +662,7 @@ add_parameter(struct gl_uniform_storage *uniform,
    int base_index = params->NumParameters;
    _mesa_reserve_parameter_storage(params, num_params, num_params);
 
-   if (ctx->Const.PackedDriverUniformStorage) {
+   if (consts->PackedDriverUniformStorage) {
       for (unsigned i = 0; i < num_params; i++) {
          unsigned dmul = glsl_type_is_64bit(glsl_without_array(type)) ? 2 : 1;
          unsigned comps = glsl_get_vector_elements(glsl_without_array(type)) * dmul;
@@ -870,7 +870,7 @@ update_uniforms_shader_info(struct gl_shader_program *prog,
 }
 
 static bool
-find_and_update_named_uniform_storage(struct gl_context *ctx,
+find_and_update_named_uniform_storage(const struct gl_constants *consts,
                                       struct gl_shader_program *prog,
                                       struct nir_link_uniforms_state *state,
                                       nir_variable *var, char **name,
@@ -918,7 +918,7 @@ find_and_update_named_uniform_storage(struct gl_context *ctx,
                ralloc_asprintf_rewrite_tail(name, &new_length, "[%u]", i);
          }
 
-         result = find_and_update_named_uniform_storage(ctx, prog, state,
+         result = find_and_update_named_uniform_storage(consts, prog, state,
                                                         var, name, new_length,
                                                         field_type, stage,
                                                         first_element);
@@ -959,7 +959,7 @@ find_and_update_named_uniform_storage(struct gl_context *ctx,
             uniform->active_shader_mask |= 1 << stage;
 
          if (!state->var_is_in_block)
-            add_parameter(uniform, ctx, prog, type, state);
+            add_parameter(uniform, consts, prog, type, state);
 
          return true;
       }
@@ -983,7 +983,7 @@ find_and_update_named_uniform_storage(struct gl_context *ctx,
  *
  */
 static bool
-find_and_update_previous_uniform_storage(struct gl_context *ctx,
+find_and_update_previous_uniform_storage(const struct gl_constants *consts,
                                          struct gl_shader_program *prog,
                                          struct nir_link_uniforms_state *state,
                                          nir_variable *var, char *name,
@@ -993,7 +993,7 @@ find_and_update_previous_uniform_storage(struct gl_context *ctx,
    if (!prog->data->spirv) {
       bool first_element = true;
       char *name_tmp = ralloc_strdup(NULL, name);
-      bool r = find_and_update_named_uniform_storage(ctx, prog, state, var,
+      bool r = find_and_update_named_uniform_storage(consts, prog, state, var,
                                                      &name_tmp,
                                                      strlen(name_tmp), type,
                                                      stage, &first_element);
@@ -1055,7 +1055,7 @@ find_and_update_previous_uniform_storage(struct gl_context *ctx,
 
          struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i];
          var->data.location = uniform - prog->data->UniformStorage;
-         add_parameter(uniform, ctx, prog, var->type, state);
+         add_parameter(uniform, consts, prog, var->type, state);
          return true;
       }
    }
@@ -1121,7 +1121,7 @@ hash_free_uniform_name(struct hash_entry *entry)
 
 static void
 enter_record(struct nir_link_uniforms_state *state,
-             struct gl_context *ctx,
+             const struct gl_constants *consts,
              const struct glsl_type *type,
              bool row_major)
 {
@@ -1129,7 +1129,7 @@ enter_record(struct nir_link_uniforms_state *state,
    if (!state->var_is_in_block)
       return;
 
-   bool use_std430 = ctx->Const.UseSTD430AsDefaultPacking;
+   bool use_std430 = consts->UseSTD430AsDefaultPacking;
    const enum glsl_interface_packing packing =
       glsl_get_internal_ifc_packing(state->current_var->interface_type,
                                     use_std430);
@@ -1144,7 +1144,7 @@ enter_record(struct nir_link_uniforms_state *state,
 
 static void
 leave_record(struct nir_link_uniforms_state *state,
-             struct gl_context *ctx,
+             const struct gl_constants *consts,
              const struct glsl_type *type,
              bool row_major)
 {
@@ -1152,7 +1152,7 @@ leave_record(struct nir_link_uniforms_state *state,
    if (!state->var_is_in_block)
       return;
 
-   bool use_std430 = ctx->Const.UseSTD430AsDefaultPacking;
+   bool use_std430 = consts->UseSTD430AsDefaultPacking;
    const enum glsl_interface_packing packing =
       glsl_get_internal_ifc_packing(state->current_var->interface_type,
                                     use_std430);
@@ -1170,7 +1170,7 @@ leave_record(struct nir_link_uniforms_state *state,
  * the number of locations used or -1 on failure.
  */
 static int
-nir_link_uniform(struct gl_context *ctx,
+nir_link_uniform(const struct gl_constants *consts,
                  struct gl_shader_program *prog,
                  struct gl_program *stage_program,
                  gl_shader_stage stage,
@@ -1221,7 +1221,7 @@ nir_link_uniform(struct gl_context *ctx,
          length = 1;
 
       if (glsl_type_is_struct(type) && !prog->data->spirv)
-         enter_record(state, ctx, type, row_major);
+         enter_record(state, consts, type, row_major);
 
       for (unsigned i = 0; i < length; i++) {
          const struct glsl_type *field_type;
@@ -1275,7 +1275,7 @@ nir_link_uniform(struct gl_context *ctx,
                ralloc_asprintf_rewrite_tail(name, &new_length, "[%u]", i);
          }
 
-         int entries = nir_link_uniform(ctx, prog, stage_program, stage,
+         int entries = nir_link_uniform(consts, prog, stage_program, stage,
                                         field_type, i, location,
                                         state, name, new_length,
                                         field_row_major);
@@ -1292,7 +1292,7 @@ nir_link_uniform(struct gl_context *ctx,
       }
 
       if (glsl_type_is_struct(type) && !prog->data->spirv)
-         leave_record(state, ctx, type, row_major);
+         leave_record(state, consts, type, row_major);
 
       state->current_type = old_type;
 
@@ -1393,7 +1393,7 @@ nir_link_uniform(struct gl_context *ctx,
          }
 
          if (!prog->data->spirv) {
-            bool use_std430 = ctx->Const.UseSTD430AsDefaultPacking;
+            bool use_std430 = consts->UseSTD430AsDefaultPacking;
             const enum glsl_interface_packing packing =
                glsl_get_internal_ifc_packing(state->current_var->interface_type,
                                              use_std430);
@@ -1447,7 +1447,7 @@ nir_link_uniform(struct gl_context *ctx,
             }
 
             /* Compute the next offset. */
-            bool use_std430 = ctx->Const.UseSTD430AsDefaultPacking;
+            bool use_std430 = consts->UseSTD430AsDefaultPacking;
             const enum glsl_interface_packing packing =
                glsl_get_internal_ifc_packing(state->current_var->interface_type,
                                              use_std430);
@@ -1486,7 +1486,7 @@ nir_link_uniform(struct gl_context *ctx,
          state->max_uniform_location = uniform->remap_location + entries;
 
       if (!state->var_is_in_block)
-         add_parameter(uniform, ctx, prog, type, state);
+         add_parameter(uniform, consts, prog, type, state);
 
       if (name) {
          _mesa_hash_table_insert(state->uniform_hash, strdup(*name),
@@ -1503,7 +1503,7 @@ nir_link_uniform(struct gl_context *ctx,
 }
 
 bool
-gl_nir_link_uniforms(struct gl_context *ctx,
+gl_nir_link_uniforms(const struct gl_constants *consts,
                      struct gl_shader_program *prog,
                      bool fill_parameters)
 {
@@ -1810,7 +1810,7 @@ gl_nir_link_uniforms(struct gl_context *ctx,
           * other stage. If so, validate they are compatible and update
           * the active stage mask.
           */
-         if (find_and_update_previous_uniform_storage(ctx, prog, &state, var,
+         if (find_and_update_previous_uniform_storage(consts, prog, &state, var,
                                                       name, type, shader_type)) {
             ralloc_free(name);
             free_type_tree(type_tree);
@@ -1825,7 +1825,7 @@ gl_nir_link_uniforms(struct gl_context *ctx,
 
          bool row_major =
             var->data.matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR;
-         int res = nir_link_uniform(ctx, prog, sh->Program, shader_type, type,
+         int res = nir_link_uniform(consts, prog, sh->Program, shader_type, type,
                                     0, location,
                                     &state,
                                     !prog->data->spirv ? &name : NULL,
@@ -1845,18 +1845,18 @@ gl_nir_link_uniforms(struct gl_context *ctx,
       }
 
       if (state.num_shader_samplers >
-          ctx->Const.Program[shader_type].MaxTextureImageUnits) {
+          consts->Program[shader_type].MaxTextureImageUnits) {
          linker_error(prog, "Too many %s shader texture samplers\n",
                       _mesa_shader_stage_to_string(shader_type));
          continue;
       }
 
       if (state.num_shader_images >
-          ctx->Const.Program[shader_type].MaxImageUniforms) {
+          consts->Program[shader_type].MaxImageUniforms) {
          linker_error(prog, "Too many %s shader image uniforms (%u > %u)\n",
                       _mesa_shader_stage_to_string(shader_type),
                       state.num_shader_images,
-                      ctx->Const.Program[shader_type].MaxImageUniforms);
+                      consts->Program[shader_type].MaxImageUniforms);
          continue;
       }
 
@@ -1878,8 +1878,8 @@ gl_nir_link_uniforms(struct gl_context *ctx,
    if (prog->data->spirv)
       prog->NumUniformRemapTable = state.max_uniform_location;
 
-   nir_setup_uniform_remap_tables(ctx, prog);
-   gl_nir_set_uniform_initializers(ctx, prog);
+   nir_setup_uniform_remap_tables(consts, prog);
+   gl_nir_set_uniform_initializers(consts, prog);
 
    _mesa_hash_table_destroy(state.uniform_hash, hash_free_uniform_name);
 
diff --git a/src/compiler/glsl/gl_nir_link_xfb.c b/src/compiler/glsl/gl_nir_link_xfb.c
index 09d3bba3e14..cd7c3c09f30 100644
--- a/src/compiler/glsl/gl_nir_link_xfb.c
+++ b/src/compiler/glsl/gl_nir_link_xfb.c
@@ -33,7 +33,7 @@
  */
 
 void
-gl_nir_link_assign_xfb_resources(struct gl_context *ctx,
+gl_nir_link_assign_xfb_resources(const struct gl_constants *consts,
                                  struct gl_shader_program *prog)
 {
    /*
@@ -178,7 +178,7 @@ gl_nir_link_assign_xfb_resources(struct gl_context *ctx,
     * tracking the number of buffers doesn't overflow.
     */
    unsigned buffers = 0;
-   assert(ctx->Const.MaxTransformFeedbackBuffers <= sizeof(buffers) * 8);
+   assert(consts->MaxTransformFeedbackBuffers <= sizeof(buffers) * 8);
 
    for (unsigned buf = 0; buf < MAX_FEEDBACK_BUFFERS; buf++) {
       if (xfb_info->buffers[buf].stride > 0) {
diff --git a/src/compiler/glsl/gl_nir_linker.c b/src/compiler/glsl/gl_nir_linker.c
index 63cff620974..b282547876d 100644
--- a/src/compiler/glsl/gl_nir_linker.c
+++ b/src/compiler/glsl/gl_nir_linker.c
@@ -173,7 +173,7 @@ create_shader_variable(struct gl_shader_program *shProg,
 }
 
 static bool
-add_shader_variable(const struct gl_context *ctx,
+add_shader_variable(const struct gl_constants *consts,
                     struct gl_shader_program *shProg,
                     struct set *resource_set,
                     unsigned stage_mask,
@@ -243,7 +243,7 @@ add_shader_variable(const struct gl_context *ctx,
             glsl_get_struct_field_data(type, i);
 
          char *field_name = ralloc_asprintf(shProg, "%s.%s", name, field->name);
-         if (!add_shader_variable(ctx, shProg, resource_set,
+         if (!add_shader_variable(consts, shProg, resource_set,
                                   stage_mask, programInterface,
                                   var, field_name, field_type,
                                   use_implicit_location, field_location,
@@ -279,7 +279,7 @@ add_shader_variable(const struct gl_context *ctx,
                            glsl_count_attribute_slots(array_type, false);
          for (unsigned i = 0; i < glsl_get_length(type); i++) {
             char *elem = ralloc_asprintf(shProg, "%s[%d]", name, i);
-            if (!add_shader_variable(ctx, shProg, resource_set,
+            if (!add_shader_variable(consts, shProg, resource_set,
                                      stage_mask, programInterface,
                                      var, elem, array_type,
                                      use_implicit_location, elem_location,
@@ -313,7 +313,7 @@ add_shader_variable(const struct gl_context *ctx,
 }
 
 static bool
-add_vars_with_modes(const struct gl_context *ctx,
+add_vars_with_modes(const struct gl_constants *consts,
                     struct gl_shader_program *prog, struct set *resource_set,
                     nir_shader *nir, nir_variable_mode modes,
                     unsigned stage, GLenum programInterface)
@@ -379,7 +379,7 @@ add_vars_with_modes(const struct gl_context *ctx,
             (stage == MESA_SHADER_FRAGMENT &&
              var->data.mode == nir_var_shader_out);
 
-         if (!add_shader_variable(ctx, prog, resource_set,
+         if (!add_shader_variable(consts, prog, resource_set,
                                   1 << stage, programInterface,
                                   var, var->name, var->type,
                                   vs_input_or_fs_output,
@@ -394,7 +394,7 @@ add_vars_with_modes(const struct gl_context *ctx,
 }
 
 static bool
-add_interface_variables(const struct gl_context *ctx,
+add_interface_variables(const struct gl_constants *consts,
                         struct gl_shader_program *prog,
                         struct set *resource_set,
                         unsigned stage, GLenum programInterface)
@@ -408,12 +408,12 @@ add_interface_variables(const struct gl_context *ctx,
 
    switch (programInterface) {
    case GL_PROGRAM_INPUT: {
-      return add_vars_with_modes(ctx, prog, resource_set,
+      return add_vars_with_modes(consts, prog, resource_set,
                                  nir, nir_var_shader_in | nir_var_system_value,
                                  stage, programInterface);
    }
    case GL_PROGRAM_OUTPUT:
-      return add_vars_with_modes(ctx, prog, resource_set,
+      return add_vars_with_modes(consts, prog, resource_set,
                                  nir, nir_var_shader_out,
                                  stage, programInterface);
    default:
@@ -429,7 +429,7 @@ add_interface_variables(const struct gl_context *ctx,
  * to check if they could be refactored, and reduce code duplication somehow
  */
 void
-nir_build_program_resource_list(struct gl_context *ctx,
+nir_build_program_resource_list(const struct gl_constants *consts,
                                 struct gl_shader_program *prog,
                                 bool rebuild_resourse_list)
 {
@@ -461,12 +461,12 @@ nir_build_program_resource_list(struct gl_context *ctx,
    struct set *resource_set = _mesa_pointer_set_create(NULL);
 
    /* Add inputs and outputs to the resource list. */
-   if (!add_interface_variables(ctx, prog, resource_set, input_stage,
+   if (!add_interface_variables(consts, prog, resource_set, input_stage,
                                 GL_PROGRAM_INPUT)) {
       return;
    }
 
-   if (!add_interface_variables(ctx, prog, resource_set, output_stage,
+   if (!add_interface_variables(consts, prog, resource_set, output_stage,
                                 GL_PROGRAM_OUTPUT)) {
       return;
    }
@@ -487,7 +487,7 @@ nir_build_program_resource_list(struct gl_context *ctx,
       }
 
       /* Add buffers. */
-      for (unsigned i = 0; i < ctx->Const.MaxTransformFeedbackBuffers; i++) {
+      for (unsigned i = 0; i < consts->MaxTransformFeedbackBuffers; i++) {
          if ((linked_xfb->ActiveBuffers >> i) & 1) {
             linked_xfb->Buffers[i].Binding = i;
             if (!link_util_add_program_resource(prog, resource_set,
@@ -600,7 +600,8 @@ nir_build_program_resource_list(struct gl_context *ctx,
 }
 
 bool
-gl_nir_link_spirv(struct gl_context *ctx, struct gl_shader_program *prog,
+gl_nir_link_spirv(const struct gl_constants *consts,
+                  struct gl_shader_program *prog,
                   const struct gl_nir_linker_options *options)
 {
    for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
@@ -615,14 +616,14 @@ gl_nir_link_spirv(struct gl_context *ctx, struct gl_shader_program *prog,
       }
    }
 
-   if (!gl_nir_link_uniform_blocks(ctx, prog))
+   if (!gl_nir_link_uniform_blocks(prog))
       return false;
 
-   if (!gl_nir_link_uniforms(ctx, prog, options->fill_parameters))
+   if (!gl_nir_link_uniforms(consts, prog, options->fill_parameters))
       return false;
 
-   gl_nir_link_assign_atomic_counter_resources(&ctx->Const, prog);
-   gl_nir_link_assign_xfb_resources(ctx, prog);
+   gl_nir_link_assign_atomic_counter_resources(consts, prog);
+   gl_nir_link_assign_xfb_resources(consts, prog);
 
    return true;
 }
@@ -668,7 +669,9 @@ check_image_resources(const struct gl_constants *consts,
 }
 
 bool
-gl_nir_link_glsl(struct gl_context *ctx, struct gl_shader_program *prog)
+gl_nir_link_glsl(const struct gl_constants *consts,
+                 const struct gl_extensions *exts,
+                 struct gl_shader_program *prog)
 {
    for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
       struct gl_linked_shader *shader = prog->_LinkedShaders[i];
@@ -682,15 +685,15 @@ gl_nir_link_glsl(struct gl_context *ctx, struct gl_shader_program *prog)
       }
    }
 
-   if (!gl_nir_link_uniforms(ctx, prog, true))
+   if (!gl_nir_link_uniforms(consts, prog, true))
       return false;
 
    link_util_calculate_subroutine_compat(prog);
-   link_util_check_uniform_resources(&ctx->Const, prog);
+   link_util_check_uniform_resources(consts, prog);
    link_util_check_subroutine_resources(prog);
-   check_image_resources(&ctx->Const, &ctx->Extensions, prog);
-   gl_nir_link_assign_atomic_counter_resources(&ctx->Const, prog);
-   gl_nir_link_check_atomic_counter_resources(&ctx->Const, prog);
+   check_image_resources(consts, exts, prog);
+   gl_nir_link_assign_atomic_counter_resources(consts, prog);
+   gl_nir_link_check_atomic_counter_resources(consts, prog);
 
    if (prog->data->LinkStatus == LINKING_FAILURE)
       return false;
diff --git a/src/compiler/glsl/gl_nir_linker.h b/src/compiler/glsl/gl_nir_linker.h
index b652ebc696b..211909294ca 100644
--- a/src/compiler/glsl/gl_nir_linker.h
+++ b/src/compiler/glsl/gl_nir_linker.h
@@ -28,8 +28,8 @@
 extern "C" {
 #endif
 
-struct gl_context;
 struct gl_constants;
+struct gl_extensions;
 struct gl_shader_program;
 
 struct gl_nir_linker_options {
@@ -42,20 +42,22 @@ struct gl_nir_linker_options {
                                                 nir_var_mem_ssbo | \
                                                 nir_var_image)
 
-bool gl_nir_link_spirv(struct gl_context *ctx,
+bool gl_nir_link_spirv(const struct gl_constants *consts,
                        struct gl_shader_program *prog,
                        const struct gl_nir_linker_options *options);
 
-bool gl_nir_link_glsl(struct gl_context *ctx, struct gl_shader_program *prog);
+bool gl_nir_link_glsl(const struct gl_constants *consts,
+                      const struct gl_extensions *exts,
+                      struct gl_shader_program *prog);
 
-bool gl_nir_link_uniforms(struct gl_context *ctx,
+bool gl_nir_link_uniforms(const struct gl_constants *consts,
                           struct gl_shader_program *prog,
                           bool fill_parameters);
 
-void gl_nir_set_uniform_initializers(struct gl_context *ctx,
+void gl_nir_set_uniform_initializers(const struct gl_constants *consts,
                                      struct gl_shader_program *prog);
 
-void nir_build_program_resource_list(struct gl_context *ctx,
+void nir_build_program_resource_list(const struct gl_constants *consts,
                                      struct gl_shader_program *prog,
                                      bool rebuild_resourse_list);
 
@@ -65,11 +67,10 @@ void gl_nir_link_assign_atomic_counter_resources(const struct gl_constants *cons
 void gl_nir_link_check_atomic_counter_resources(const struct gl_constants *consts,
                                                 struct gl_shader_program *prog);
 
-void gl_nir_link_assign_xfb_resources(struct gl_context *ctx,
+void gl_nir_link_assign_xfb_resources(const struct gl_constants *consts,
                                       struct gl_shader_program *prog);
 
-bool gl_nir_link_uniform_blocks(struct gl_context *ctx,
-                                struct gl_shader_program *prog);
+bool gl_nir_link_uniform_blocks(struct gl_shader_program *prog);
 
 #ifdef __cplusplus
 } /* extern "C" */
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 1ac2e8404cb..1e3800a7c89 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -796,10 +796,11 @@ st_link_nir(struct gl_context *ctx,
       static const gl_nir_linker_options opts = {
          true /*fill_parameters */
       };
-      if (!gl_nir_link_spirv(ctx, shader_program, &opts))
+      if (!gl_nir_link_spirv(&ctx->Const, shader_program, &opts))
          return GL_FALSE;
    } else {
-      if (!gl_nir_link_glsl(ctx, shader_program))
+      if (!gl_nir_link_glsl(&ctx->Const, &ctx->Extensions,
+                            shader_program))
          return GL_FALSE;
    }
 
@@ -809,7 +810,7 @@ st_link_nir(struct gl_context *ctx,
       _mesa_update_shader_textures_used(shader_program, prog);
    }
 
-   nir_build_program_resource_list(ctx, shader_program,
+   nir_build_program_resource_list(&ctx->Const, shader_program,
                                    shader_program->data->spirv);
 
    for (unsigned i = 0; i < num_shaders; i++) {



More information about the mesa-commit mailing list