Module: Mesa Branch: main Commit: 32f274768eccceb6ea684c192852f6523b09017b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=32f274768eccceb6ea684c192852f6523b09017b
Author: Timothy Arceri <[email protected]> Date: Wed Dec 6 13:40:03 2023 +1100 glsl: use new nir based block linker Reviewed-by: Alejandro PiƱeiro <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26534> --- src/compiler/glsl/gl_nir_linker.c | 3 ++- src/compiler/glsl/linker.cpp | 43 --------------------------------------- 2 files changed, 2 insertions(+), 44 deletions(-) diff --git a/src/compiler/glsl/gl_nir_linker.c b/src/compiler/glsl/gl_nir_linker.c index a04c0162670..0b38d26de06 100644 --- a/src/compiler/glsl/gl_nir_linker.c +++ b/src/compiler/glsl/gl_nir_linker.c @@ -1476,7 +1476,8 @@ gl_nir_link_glsl(const struct gl_constants *consts, } } - + if (!gl_nir_link_uniform_blocks(consts, prog)) + return false; if (!gl_nir_link_uniforms(consts, prog, true)) return false; diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index 93e6f807494..7f218e72139 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -2296,10 +2296,6 @@ link_intrastage_shaders(void *mem_ctx, unsigned num_shaders, bool allow_missing_main) { - struct gl_uniform_block *ubo_blocks = NULL; - struct gl_uniform_block *ssbo_blocks = NULL; - unsigned num_ubo_blocks = 0; - unsigned num_ssbo_blocks = 0; bool arb_fragment_coord_conventions_enable = false; /* Check that global variables defined in multiple shaders are consistent. @@ -2466,50 +2462,11 @@ link_intrastage_shaders(void *mem_ctx, array_length_to_const_visitor len_v; len_v.run(linked->ir); - /* Link up uniform blocks defined within this stage. */ - link_uniform_blocks(mem_ctx, &ctx->Const, prog, linked, &ubo_blocks, - &num_ubo_blocks, &ssbo_blocks, &num_ssbo_blocks); - - const unsigned max_uniform_blocks = - ctx->Const.Program[linked->Stage].MaxUniformBlocks; - if (num_ubo_blocks > max_uniform_blocks) { - linker_error(prog, "Too many %s uniform blocks (%d/%d)\n", - _mesa_shader_stage_to_string(linked->Stage), - num_ubo_blocks, max_uniform_blocks); - } - - const unsigned max_shader_storage_blocks = - ctx->Const.Program[linked->Stage].MaxShaderStorageBlocks; - if (num_ssbo_blocks > max_shader_storage_blocks) { - linker_error(prog, "Too many %s shader storage blocks (%d/%d)\n", - _mesa_shader_stage_to_string(linked->Stage), - num_ssbo_blocks, max_shader_storage_blocks); - } - if (!prog->data->LinkStatus) { _mesa_delete_linked_shader(ctx, linked); return NULL; } - /* Copy ubo blocks to linked shader list */ - linked->Program->sh.UniformBlocks = - ralloc_array(linked, gl_uniform_block *, num_ubo_blocks); - ralloc_steal(linked, ubo_blocks); - for (unsigned i = 0; i < num_ubo_blocks; i++) { - linked->Program->sh.UniformBlocks[i] = &ubo_blocks[i]; - } - linked->Program->sh.NumUniformBlocks = num_ubo_blocks; - linked->Program->info.num_ubos = num_ubo_blocks; - - /* Copy ssbo blocks to linked shader list */ - linked->Program->sh.ShaderStorageBlocks = - ralloc_array(linked, gl_uniform_block *, num_ssbo_blocks); - ralloc_steal(linked, ssbo_blocks); - for (unsigned i = 0; i < num_ssbo_blocks; i++) { - linked->Program->sh.ShaderStorageBlocks[i] = &ssbo_blocks[i]; - } - linked->Program->info.num_ssbos = num_ssbo_blocks; - /* At this point linked should contain all of the linked IR, so * validate it to make sure nothing went wrong. */
