[Mesa-dev] [PATCH v2 15/21] compiler/link: move add_program_resource to linker_util

Timothy Arceri tarceri at itsqueeze.com
Sun May 13 23:10:47 UTC 2018


Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>

On 12/05/18 19:40, Alejandro Piñeiro wrote:
> So it could be used by the GLSL and NIR linker.
> 
> v2: (Timothy Arceri)
>     * Moved from compiler to compiler/glsl
>     * Method renamed to link_util_add_program_resource
> ---
>   src/compiler/Makefile.sources     |  1 +
>   src/compiler/glsl/linker.cpp      | 76 +++++++++++----------------------------
>   src/compiler/glsl/linker_util.cpp | 64 +++++++++++++++++++++++++++++++++
>   src/compiler/glsl/linker_util.h   |  5 +++
>   src/compiler/glsl/meson.build     |  1 +
>   5 files changed, 91 insertions(+), 56 deletions(-)
>   create mode 100644 src/compiler/glsl/linker_util.cpp
> 
> diff --git a/src/compiler/Makefile.sources b/src/compiler/Makefile.sources
> index 27c135e913b..8104dd32002 100644
> --- a/src/compiler/Makefile.sources
> +++ b/src/compiler/Makefile.sources
> @@ -75,6 +75,7 @@ LIBGLSL_FILES = \
>   	glsl/linker.cpp \
>   	glsl/linker.h \
>   	glsl/linker_util.h \
> +	glsl/linker_util.cpp \
>   	glsl/link_atomics.cpp \
>   	glsl/link_functions.cpp \
>   	glsl/link_interface_blocks.cpp \
> diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
> index f060c5316fa..f201a566c29 100644
> --- a/src/compiler/glsl/linker.cpp
> +++ b/src/compiler/glsl/linker.cpp
> @@ -3613,42 +3613,6 @@ should_add_buffer_variable(struct gl_shader_program *shProg,
>      return false;
>   }
>   
> -static bool
> -add_program_resource(struct gl_shader_program *prog,
> -                     struct set *resource_set,
> -                     GLenum type, const void *data, uint8_t stages)
> -{
> -   assert(data);
> -
> -   /* If resource already exists, do not add it again. */
> -   if (_mesa_set_search(resource_set, data))
> -      return true;
> -
> -   prog->data->ProgramResourceList =
> -      reralloc(prog->data,
> -               prog->data->ProgramResourceList,
> -               gl_program_resource,
> -               prog->data->NumProgramResourceList + 1);
> -
> -   if (!prog->data->ProgramResourceList) {
> -      linker_error(prog, "Out of memory during linking.\n");
> -      return false;
> -   }
> -
> -   struct gl_program_resource *res =
> -      &prog->data->ProgramResourceList[prog->data->NumProgramResourceList];
> -
> -   res->Type = type;
> -   res->Data = data;
> -   res->StageReferences = stages;
> -
> -   prog->data->NumProgramResourceList++;
> -
> -   _mesa_set_add(resource_set, data);
> -
> -   return true;
> -}
> -
>   /* Function checks if a variable var is a packed varying and
>    * if given name is part of packed varying's list.
>    *
> @@ -3942,8 +3906,8 @@ add_shader_variable(const struct gl_context *ctx,
>         if (!sha_v)
>            return false;
>   
> -      return add_program_resource(shProg, resource_set,
> -                                  programInterface, sha_v, stage_mask);
> +      return link_util_add_program_resource(shProg, resource_set,
> +                                            programInterface, sha_v, stage_mask);
>      }
>      }
>   }
> @@ -4372,9 +4336,9 @@ build_program_resource_list(struct gl_context *ctx,
>         /* Add transform feedback varyings. */
>         if (linked_xfb->NumVarying > 0) {
>            for (int i = 0; i < linked_xfb->NumVarying; i++) {
> -            if (!add_program_resource(shProg, resource_set,
> -                                      GL_TRANSFORM_FEEDBACK_VARYING,
> -                                      &linked_xfb->Varyings[i], 0))
> +            if (!link_util_add_program_resource(shProg, resource_set,
> +                                                GL_TRANSFORM_FEEDBACK_VARYING,
> +                                                &linked_xfb->Varyings[i], 0))
>               return;
>            }
>         }
> @@ -4383,9 +4347,9 @@ build_program_resource_list(struct gl_context *ctx,
>         for (unsigned i = 0; i < ctx->Const.MaxTransformFeedbackBuffers; i++) {
>            if ((linked_xfb->ActiveBuffers >> i) & 1) {
>               linked_xfb->Buffers[i].Binding = i;
> -            if (!add_program_resource(shProg, resource_set,
> -                                      GL_TRANSFORM_FEEDBACK_BUFFER,
> -                                      &linked_xfb->Buffers[i], 0))
> +            if (!link_util_add_program_resource(shProg, resource_set,
> +                                                GL_TRANSFORM_FEEDBACK_BUFFER,
> +                                                &linked_xfb->Buffers[i], 0))
>               return;
>            }
>         }
> @@ -4421,29 +4385,29 @@ build_program_resource_list(struct gl_context *ctx,
>                                            &shProg->data->UniformStorage[i]);
>         }
>   
> -      if (!add_program_resource(shProg, resource_set, type,
> -                                &shProg->data->UniformStorage[i], stageref))
> +      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 (!add_program_resource(shProg, resource_set, GL_UNIFORM_BLOCK,
> -          &shProg->data->UniformBlocks[i], 0))
> +      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 (!add_program_resource(shProg, resource_set, GL_SHADER_STORAGE_BLOCK,
> -          &shProg->data->ShaderStorageBlocks[i], 0))
> +      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 (!add_program_resource(shProg, resource_set, GL_ATOMIC_COUNTER_BUFFER,
> -                                &shProg->data->AtomicBuffers[i], 0))
> +      if (!link_util_add_program_resource(shProg, resource_set, GL_ATOMIC_COUNTER_BUFFER,
> +                                          &shProg->data->AtomicBuffers[i], 0))
>            return;
>      }
>   
> @@ -4459,8 +4423,8 @@ build_program_resource_list(struct gl_context *ctx,
>   
>            type = _mesa_shader_stage_to_subroutine_uniform((gl_shader_stage)j);
>            /* add shader subroutines */
> -         if (!add_program_resource(shProg, resource_set,
> -                                   type, &shProg->data->UniformStorage[i], 0))
> +         if (!link_util_add_program_resource(shProg, resource_set,
> +                                             type, &shProg->data->UniformStorage[i], 0))
>               return;
>         }
>      }
> @@ -4472,8 +4436,8 @@ build_program_resource_list(struct gl_context *ctx,
>   
>         GLuint type = _mesa_shader_stage_to_subroutine((gl_shader_stage)i);
>         for (unsigned j = 0; j < p->sh.NumSubroutineFunctions; j++) {
> -         if (!add_program_resource(shProg, resource_set,
> -                                   type, &p->sh.SubroutineFunctions[j], 0))
> +         if (!link_util_add_program_resource(shProg, resource_set,
> +                                             type, &p->sh.SubroutineFunctions[j], 0))
>               return;
>         }
>      }
> diff --git a/src/compiler/glsl/linker_util.cpp b/src/compiler/glsl/linker_util.cpp
> new file mode 100644
> index 00000000000..0e6f4166d64
> --- /dev/null
> +++ b/src/compiler/glsl/linker_util.cpp
> @@ -0,0 +1,64 @@
> +/*
> + * Copyright © 2018 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 "main/mtypes.h"
> +#include "linker_util.h"
> +#include "util/set.h"
> +
> +/* Utility methods shared between the GLSL IR and the NIR */
> +
> +bool
> +link_util_add_program_resource(struct gl_shader_program *prog,
> +                               struct set *resource_set,
> +                               GLenum type, const void *data, uint8_t stages)
> +{
> +   assert(data);
> +
> +   /* If resource already exists, do not add it again. */
> +   if (_mesa_set_search(resource_set, data))
> +      return true;
> +
> +   prog->data->ProgramResourceList =
> +      reralloc(prog->data,
> +               prog->data->ProgramResourceList,
> +               gl_program_resource,
> +               prog->data->NumProgramResourceList + 1);
> +
> +   if (!prog->data->ProgramResourceList) {
> +      linker_error(prog, "Out of memory during linking.\n");
> +      return false;
> +   }
> +
> +   struct gl_program_resource *res =
> +      &prog->data->ProgramResourceList[prog->data->NumProgramResourceList];
> +
> +   res->Type = type;
> +   res->Data = data;
> +   res->StageReferences = stages;
> +
> +   prog->data->NumProgramResourceList++;
> +
> +   _mesa_set_add(resource_set, data);
> +
> +   return true;
> +}
> diff --git a/src/compiler/glsl/linker_util.h b/src/compiler/glsl/linker_util.h
> index 162db3e532f..17da92fca99 100644
> --- a/src/compiler/glsl/linker_util.h
> +++ b/src/compiler/glsl/linker_util.h
> @@ -36,6 +36,11 @@ linker_error(struct gl_shader_program *prog, const char *fmt, ...);
>   void
>   linker_warning(struct gl_shader_program *prog, const char *fmt, ...);
>   
> +bool
> +link_util_add_program_resource(struct gl_shader_program *prog,
> +                               struct set *resource_set,
> +                               GLenum type, const void *data, uint8_t stages);
> +
>   #ifdef __cplusplus
>   }
>   #endif
> diff --git a/src/compiler/glsl/meson.build b/src/compiler/glsl/meson.build
> index 2605fef9585..88a49c6997e 100644
> --- a/src/compiler/glsl/meson.build
> +++ b/src/compiler/glsl/meson.build
> @@ -116,6 +116,7 @@ files_libglsl = files(
>     'linker.cpp',
>     'linker.h',
>     'linker_util.h',
> +  'linker_util.cpp',
>     'link_atomics.cpp',
>     'link_functions.cpp',
>     'link_interface_blocks.cpp',
> 


More information about the mesa-dev mailing list