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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Dec 18 17:26:47 2023 +1100

glsl: remove some unused linker code

These were missed when removing code in 72ad0db50566.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26747>

---

 src/compiler/glsl/link_uniform_blocks.cpp | 122 ------------------------------
 src/compiler/glsl/linker.cpp              | 111 ---------------------------
 src/compiler/glsl/linker.h                |   6 --
 src/compiler/glsl/meson.build             |   1 -
 4 files changed, 240 deletions(-)

diff --git a/src/compiler/glsl/link_uniform_blocks.cpp 
b/src/compiler/glsl/link_uniform_blocks.cpp
deleted file mode 100644
index 0da7ec43dfd..00000000000
--- a/src/compiler/glsl/link_uniform_blocks.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright © 2012 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-#include "ir.h"
-#include "main/shader_types.h"
-
-static bool
-link_uniform_blocks_are_compatible(const gl_uniform_block *a,
-                                   const gl_uniform_block *b)
-{
-   assert(strcmp(a->name.string, b->name.string) == 0);
-
-   /* Page 35 (page 42 of the PDF) in section 4.3.7 of the GLSL 1.50 spec says:
-    *
-    *    Matched block names within an interface (as defined above) must match
-    *    in terms of having the same number of declarations with the same
-    *    sequence of types and the same sequence of member names, as well as
-    *    having the same member-wise layout qualification....if a matching
-    *    block is declared as an array, then the array sizes must also
-    *    match... Any mismatch will generate a link error.
-    *
-    * Arrays are not yet supported, so there is no check for that.
-    */
-   if (a->NumUniforms != b->NumUniforms)
-      return false;
-
-   if (a->_Packing != b->_Packing)
-      return false;
-
-   if (a->_RowMajor != b->_RowMajor)
-      return false;
-
-   if (a->Binding != b->Binding)
-      return false;
-
-   for (unsigned i = 0; i < a->NumUniforms; i++) {
-      if (strcmp(a->Uniforms[i].Name, b->Uniforms[i].Name) != 0)
-         return false;
-
-      if (a->Uniforms[i].Type != b->Uniforms[i].Type)
-         return false;
-
-      if (a->Uniforms[i].RowMajor != b->Uniforms[i].RowMajor)
-         return false;
-   }
-
-   return true;
-}
-
-/**
- * Merges a uniform block into an array of uniform blocks that may or
- * may not already contain a copy of it.
- *
- * Returns the index of the new block in the array.
- */
-int
-link_cross_validate_uniform_block(void *mem_ctx,
-                                  struct gl_uniform_block **linked_blocks,
-                                  unsigned int *num_linked_blocks,
-                                  struct gl_uniform_block *new_block)
-{
-   for (unsigned int i = 0; i < *num_linked_blocks; i++) {
-      struct gl_uniform_block *old_block = &(*linked_blocks)[i];
-
-      if (strcmp(old_block->name.string, new_block->name.string) == 0)
-         return link_uniform_blocks_are_compatible(old_block, new_block)
-            ? i : -1;
-   }
-
-   *linked_blocks = reralloc(mem_ctx, *linked_blocks,
-                             struct gl_uniform_block,
-                             *num_linked_blocks + 1);
-   int linked_block_index = (*num_linked_blocks)++;
-   struct gl_uniform_block *linked_block = 
&(*linked_blocks)[linked_block_index];
-
-   memcpy(linked_block, new_block, sizeof(*new_block));
-   linked_block->Uniforms = ralloc_array(*linked_blocks,
-                                         struct gl_uniform_buffer_variable,
-                                         linked_block->NumUniforms);
-
-   memcpy(linked_block->Uniforms,
-          new_block->Uniforms,
-          sizeof(*linked_block->Uniforms) * linked_block->NumUniforms);
-
-   linked_block->name.string = ralloc_strdup(*linked_blocks, 
linked_block->name.string);
-   resource_name_updated(&linked_block->name);
-
-   for (unsigned int i = 0; i < linked_block->NumUniforms; i++) {
-      struct gl_uniform_buffer_variable *ubo_var =
-         &linked_block->Uniforms[i];
-
-      if (ubo_var->Name == ubo_var->IndexName) {
-         ubo_var->Name = ralloc_strdup(*linked_blocks, ubo_var->Name);
-         ubo_var->IndexName = ubo_var->Name;
-      } else {
-         ubo_var->Name = ralloc_strdup(*linked_blocks, ubo_var->Name);
-         ubo_var->IndexName = ralloc_strdup(*linked_blocks, 
ubo_var->IndexName);
-      }
-   }
-
-   return linked_block_index;
-}
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 6b4defaa3a3..cd1cba74630 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -1109,109 +1109,6 @@ cross_validate_uniforms(const struct gl_constants 
*consts,
    }
 }
 
-/**
- * Accumulates the array of buffer blocks and checks that all definitions of
- * blocks agree on their contents.
- */
-static bool
-interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog,
-                                         bool validate_ssbo)
-{
-   int *ifc_blk_stage_idx[MESA_SHADER_STAGES];
-   struct gl_uniform_block *blks = NULL;
-   unsigned *num_blks = validate_ssbo ? &prog->data->NumShaderStorageBlocks :
-      &prog->data->NumUniformBlocks;
-
-   unsigned max_num_buffer_blocks = 0;
-   for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
-      if (prog->_LinkedShaders[i]) {
-         if (validate_ssbo) {
-            max_num_buffer_blocks +=
-               prog->_LinkedShaders[i]->Program->info.num_ssbos;
-         } else {
-            max_num_buffer_blocks +=
-               prog->_LinkedShaders[i]->Program->info.num_ubos;
-         }
-      }
-   }
-
-   for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
-      struct gl_linked_shader *sh = prog->_LinkedShaders[i];
-
-      ifc_blk_stage_idx[i] =
-         (int *) malloc(sizeof(int) * max_num_buffer_blocks);
-      for (unsigned int j = 0; j < max_num_buffer_blocks; j++)
-         ifc_blk_stage_idx[i][j] = -1;
-
-      if (sh == NULL)
-         continue;
-
-      unsigned sh_num_blocks;
-      struct gl_uniform_block **sh_blks;
-      if (validate_ssbo) {
-         sh_num_blocks = prog->_LinkedShaders[i]->Program->info.num_ssbos;
-         sh_blks = sh->Program->sh.ShaderStorageBlocks;
-      } else {
-         sh_num_blocks = prog->_LinkedShaders[i]->Program->info.num_ubos;
-         sh_blks = sh->Program->sh.UniformBlocks;
-      }
-
-      for (unsigned int j = 0; j < sh_num_blocks; j++) {
-         int index = link_cross_validate_uniform_block(prog->data, &blks,
-                                                       num_blks, sh_blks[j]);
-
-         if (index == -1) {
-            linker_error(prog, "buffer block `%s' has mismatching "
-                         "definitions\n", sh_blks[j]->name.string);
-
-            for (unsigned k = 0; k <= i; k++) {
-               free(ifc_blk_stage_idx[k]);
-            }
-
-            /* Reset the block count. This will help avoid various segfaults
-             * from api calls that assume the array exists due to the count
-             * being non-zero.
-             */
-            *num_blks = 0;
-            return false;
-         }
-
-         ifc_blk_stage_idx[i][index] = j;
-      }
-   }
-
-   /* Update per stage block pointers to point to the program list.
-    * FIXME: We should be able to free the per stage blocks here.
-    */
-   for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
-      for (unsigned j = 0; j < *num_blks; j++) {
-         int stage_index = ifc_blk_stage_idx[i][j];
-
-         if (stage_index != -1) {
-            struct gl_linked_shader *sh = prog->_LinkedShaders[i];
-
-            struct gl_uniform_block **sh_blks = validate_ssbo ?
-               sh->Program->sh.ShaderStorageBlocks :
-               sh->Program->sh.UniformBlocks;
-
-            blks[j].stageref |= sh_blks[stage_index]->stageref;
-            sh_blks[stage_index] = &blks[j];
-         }
-      }
-   }
-
-   for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
-      free(ifc_blk_stage_idx[i]);
-   }
-
-   if (validate_ssbo)
-      prog->data->ShaderStorageBlocks = blks;
-   else
-      prog->data->UniformBlocks = blks;
-
-   return true;
-}
-
 /**
  * Verifies the invariance of built-in special variables.
  */
@@ -3086,14 +2983,6 @@ link_shaders(struct gl_context *ctx, struct 
gl_shader_program *prog)
       }
    }
 
-   /* Process UBOs */
-   if (!interstage_cross_validate_uniform_blocks(prog, false))
-      goto done;
-
-   /* Process SSBOs */
-   if (!interstage_cross_validate_uniform_blocks(prog, true))
-      goto done;
-
    for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
       if (prog->_LinkedShaders[i] == NULL)
          continue;
diff --git a/src/compiler/glsl/linker.h b/src/compiler/glsl/linker.h
index ca201684a6e..24ed672b25a 100644
--- a/src/compiler/glsl/linker.h
+++ b/src/compiler/glsl/linker.h
@@ -35,12 +35,6 @@ extern bool
 link_function_calls(gl_shader_program *prog, gl_linked_shader *main,
                     gl_shader **shader_list, unsigned num_shaders);
 
-extern int
-link_cross_validate_uniform_block(void *mem_ctx,
-                                  struct gl_uniform_block **linked_blocks,
-                                  unsigned int *num_linked_blocks,
-                                  struct gl_uniform_block *new_block);
-
 bool
 validate_intrastage_arrays(struct gl_shader_program *prog,
                            ir_variable *const var,
diff --git a/src/compiler/glsl/meson.build b/src/compiler/glsl/meson.build
index 416a29ff70f..66c11be9de4 100644
--- a/src/compiler/glsl/meson.build
+++ b/src/compiler/glsl/meson.build
@@ -190,7 +190,6 @@ files_libglsl = files(
   'linker_util.cpp',
   'link_functions.cpp',
   'link_interface_blocks.cpp',
-  'link_uniform_blocks.cpp',
   'list.h',
   'lower_builtins.cpp',
   'lower_discard_flow.cpp',

Reply via email to