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