Mesa (main): compiler/glsl: Remove the dead parts of build_program_resource_list().

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu May 5 23:11:15 UTC 2022


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

Author: Emma Anholt <emma at anholt.net>
Date:   Fri Apr  8 17:54:24 2022 -0700

compiler/glsl: Remove the dead parts of build_program_resource_list().

These have all moved to NIR linking.

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8044>

---

 src/compiler/glsl/linker.cpp             | 246 +------------------------------
 src/compiler/glsl/program.h              |   3 +-
 src/mesa/state_tracker/st_glsl_to_ir.cpp |   2 +-
 3 files changed, 3 insertions(+), 248 deletions(-)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index f963e747801..e0fafa3f772 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -3829,68 +3829,6 @@ inout_has_same_location(const ir_variable *var, unsigned stage)
       return false;
 }
 
-static bool
-add_interface_variables(struct gl_shader_program *shProg,
-                        struct set *resource_set,
-                        unsigned stage, GLenum programInterface)
-{
-   exec_list *ir = shProg->_LinkedShaders[stage]->ir;
-
-   foreach_in_list(ir_instruction, node, ir) {
-      ir_variable *var = node->as_variable();
-
-      if (!var || var->data.how_declared == ir_var_hidden)
-         continue;
-
-      int loc_bias;
-
-      switch (var->data.mode) {
-      case ir_var_system_value:
-      case ir_var_shader_in:
-         if (programInterface != GL_PROGRAM_INPUT)
-            continue;
-         loc_bias = (stage == MESA_SHADER_VERTEX) ? int(VERT_ATTRIB_GENERIC0)
-                                                  : int(VARYING_SLOT_VAR0);
-         break;
-      case ir_var_shader_out:
-         if (programInterface != GL_PROGRAM_OUTPUT)
-            continue;
-         loc_bias = (stage == MESA_SHADER_FRAGMENT) ? int(FRAG_RESULT_DATA0)
-                                                    : int(VARYING_SLOT_VAR0);
-         break;
-      default:
-         continue;
-      };
-
-      if (var->data.patch)
-         loc_bias = int(VARYING_SLOT_PATCH0);
-
-      /* Skip packed varyings, packed varyings are handled separately
-       * by add_packed_varyings.
-       */
-      if (strncmp(var->name, "packed:", 7) == 0)
-         continue;
-
-      /* Skip fragdata arrays, these are handled separately
-       * by add_fragdata_arrays.
-       */
-      if (strncmp(var->name, "gl_out_FragData", 15) == 0)
-         continue;
-
-      const bool vs_input_or_fs_output =
-         (stage == MESA_SHADER_VERTEX && var->data.mode == ir_var_shader_in) ||
-         (stage == MESA_SHADER_FRAGMENT && var->data.mode == ir_var_shader_out);
-
-      if (!add_shader_variable(shProg, resource_set,
-                               1 << stage, programInterface,
-                               var, var->name, var->type, vs_input_or_fs_output,
-                               var->data.location - loc_bias,
-                               inout_has_same_location(var, stage)))
-         return false;
-   }
-   return true;
-}
-
 static bool
 add_packed_varyings(struct gl_shader_program *shProg,
                     struct set *resource_set,
@@ -3931,39 +3869,13 @@ add_packed_varyings(struct gl_shader_program *shProg,
    return true;
 }
 
-static bool
-add_fragdata_arrays(struct gl_shader_program *shProg,
-                    struct set *resource_set)
-{
-   struct gl_linked_shader *sh = shProg->_LinkedShaders[MESA_SHADER_FRAGMENT];
-
-   if (!sh || !sh->fragdata_arrays)
-      return true;
-
-   foreach_in_list(ir_instruction, node, sh->fragdata_arrays) {
-      ir_variable *var = node->as_variable();
-      if (var) {
-         assert(var->data.mode == ir_var_shader_out);
-
-         if (!add_shader_variable(shProg, resource_set,
-                                  1 << MESA_SHADER_FRAGMENT,
-                                  GL_PROGRAM_OUTPUT, var, var->name, var->type,
-                                  true, var->data.location - FRAG_RESULT_DATA0,
-                                  false))
-            return false;
-      }
-   }
-   return true;
-}
-
 /**
  * Builds up a list of program resources that point to existing
  * resource data.
  */
 void
 build_program_resource_list(const struct gl_constants *consts,
-                            struct gl_shader_program *shProg,
-                            bool add_packed_varyings_only)
+                            struct gl_shader_program *shProg)
 {
    /* Rebuild resource list. */
    if (shProg->data->ProgramResourceList) {
@@ -4003,162 +3915,6 @@ build_program_resource_list(const struct gl_constants *consts,
          return;
    }
 
-   if (add_packed_varyings_only) {
-      _mesa_set_destroy(resource_set, NULL);
-      return;
-   }
-
-   if (!add_fragdata_arrays(shProg, resource_set))
-      return;
-
-   /* Add inputs and outputs to the resource list. */
-   if (!add_interface_variables(shProg, resource_set,
-                                input_stage, GL_PROGRAM_INPUT))
-      return;
-
-   if (!add_interface_variables(shProg, resource_set,
-                                output_stage, GL_PROGRAM_OUTPUT))
-      return;
-
-   if (shProg->last_vert_prog) {
-      struct gl_transform_feedback_info *linked_xfb =
-         shProg->last_vert_prog->sh.LinkedTransformFeedback;
-
-      /* Add transform feedback varyings. */
-      if (linked_xfb->NumVarying > 0) {
-         for (int i = 0; i < linked_xfb->NumVarying; i++) {
-            if (!link_util_add_program_resource(shProg, resource_set,
-                                                GL_TRANSFORM_FEEDBACK_VARYING,
-                                                &linked_xfb->Varyings[i], 0))
-            return;
-         }
-      }
-
-      /* Add transform feedback buffers. */
-      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(shProg, resource_set,
-                                                GL_TRANSFORM_FEEDBACK_BUFFER,
-                                                &linked_xfb->Buffers[i], 0))
-            return;
-         }
-      }
-   }
-
-   int top_level_array_base_offset = -1;
-   int top_level_array_size_in_bytes = -1;
-   int second_element_offset = -1;
-   int buffer_block_index = -1;
-
-   /* Add uniforms from uniform storage. */
-   for (unsigned i = 0; i < shProg->data->NumUniformStorage; i++) {
-      /* Do not add uniforms internally used by Mesa. */
-      if (shProg->data->UniformStorage[i].hidden)
-         continue;
-
-      bool is_shader_storage =
-        shProg->data->UniformStorage[i].is_shader_storage;
-      GLenum type = is_shader_storage ? GL_BUFFER_VARIABLE : GL_UNIFORM;
-      if (!link_util_should_add_buffer_variable(shProg,
-                                                &shProg->data->UniformStorage[i],
-                                                top_level_array_base_offset,
-                                                top_level_array_size_in_bytes,
-                                                second_element_offset,
-                                                buffer_block_index))
-         continue;
-
-      if (is_shader_storage) {
-         /* From the OpenGL 4.6 specification, 7.3.1.1 Naming Active Resources:
-          *
-          *    "For an active shader storage block member declared as an array
-          *    of an aggregate type, an entry will be generated only for the
-          *    first array element, regardless of its type. Such block members
-          *    are referred to as top-level arrays. If the block member is an
-          *    aggregate type, the enumeration rules are then applied
-          *    recursively."
-          *
-          * Below we update our tracking values used by
-          * link_util_should_add_buffer_variable(). We only want to reset the
-          * offsets once we have moved past the first element.
-          */
-         if (shProg->data->UniformStorage[i].offset >= second_element_offset) {
-            top_level_array_base_offset =
-               shProg->data->UniformStorage[i].offset;
-
-            top_level_array_size_in_bytes =
-               shProg->data->UniformStorage[i].top_level_array_size *
-               shProg->data->UniformStorage[i].top_level_array_stride;
-
-            /* Set or reset the second element offset. For non arrays this
-             * will be set to -1.
-             */
-            second_element_offset = top_level_array_size_in_bytes ?
-               top_level_array_base_offset +
-               shProg->data->UniformStorage[i].top_level_array_stride : -1;
-         }
-
-         buffer_block_index = shProg->data->UniformStorage[i].block_index;
-      }
-
-      uint8_t stageref = shProg->data->UniformStorage[i].active_shader_mask;
-      if (!link_util_add_program_resource(shProg, resource_set, type,
-                                          &shProg->data->UniformStorage[i], stageref))
-         return;
-   }
-
-   /* Add program uniform blocks. */
-   for (unsigned i = 0; i < shProg->data->NumUniformBlocks; i++) {
-      if (!link_util_add_program_resource(shProg, resource_set, GL_UNIFORM_BLOCK,
-                                          &shProg->data->UniformBlocks[i], 0))
-         return;
-   }
-
-   /* Add program shader storage blocks. */
-   for (unsigned i = 0; i < shProg->data->NumShaderStorageBlocks; i++) {
-      if (!link_util_add_program_resource(shProg, resource_set, GL_SHADER_STORAGE_BLOCK,
-                                          &shProg->data->ShaderStorageBlocks[i], 0))
-         return;
-   }
-
-   /* Add atomic counter buffers. */
-   for (unsigned i = 0; i < shProg->data->NumAtomicBuffers; i++) {
-      if (!link_util_add_program_resource(shProg, resource_set, GL_ATOMIC_COUNTER_BUFFER,
-                                          &shProg->data->AtomicBuffers[i], 0))
-         return;
-   }
-
-   for (unsigned i = 0; i < shProg->data->NumUniformStorage; i++) {
-      GLenum type;
-      if (!shProg->data->UniformStorage[i].hidden)
-         continue;
-
-      for (int j = MESA_SHADER_VERTEX; j < MESA_SHADER_STAGES; j++) {
-         if (!shProg->data->UniformStorage[i].opaque[j].active ||
-             !shProg->data->UniformStorage[i].type->is_subroutine())
-            continue;
-
-         type = _mesa_shader_stage_to_subroutine_uniform((gl_shader_stage)j);
-         /* add shader subroutines */
-         if (!link_util_add_program_resource(shProg, resource_set,
-                                             type, &shProg->data->UniformStorage[i], 0))
-            return;
-      }
-   }
-
-   unsigned mask = shProg->data->linked_stages;
-   while (mask) {
-      const int i = u_bit_scan(&mask);
-      struct gl_program *p = shProg->_LinkedShaders[i]->Program;
-
-      GLuint type = _mesa_shader_stage_to_subroutine((gl_shader_stage)i);
-      for (unsigned j = 0; j < p->sh.NumSubroutineFunctions; j++) {
-         if (!link_util_add_program_resource(shProg, resource_set,
-                                             type, &p->sh.SubroutineFunctions[j], 0))
-            return;
-      }
-   }
-
    _mesa_set_destroy(resource_set, NULL);
 }
 
diff --git a/src/compiler/glsl/program.h b/src/compiler/glsl/program.h
index 9abff9f9f92..919ee92f3a6 100644
--- a/src/compiler/glsl/program.h
+++ b/src/compiler/glsl/program.h
@@ -46,8 +46,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog);
 
 extern void
 build_program_resource_list(const struct gl_constants *consts,
-                            struct gl_shader_program *shProg,
-                            bool add_packed_varyings_only);
+                            struct gl_shader_program *shProg);
 
 extern long
 parse_program_resource_name(const GLchar *name, const size_t len,
diff --git a/src/mesa/state_tracker/st_glsl_to_ir.cpp b/src/mesa/state_tracker/st_glsl_to_ir.cpp
index 4279c732935..37cf1c8d74e 100644
--- a/src/mesa/state_tracker/st_glsl_to_ir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_ir.cpp
@@ -140,7 +140,7 @@ link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
       validate_ir_tree(ir);
    }
 
-   build_program_resource_list(&ctx->Const, prog, true);
+   build_program_resource_list(&ctx->Const, prog);
 
    ret = st_link_nir(ctx, prog);
 



More information about the mesa-commit mailing list