[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