From: Timothy Arceri Date: Tue, 7 Jan 2020 03:38:14 +0000 (+1100) Subject: st/glsl_to_nir: make use of nir linker for linking uniforms X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=95f555a93a8891ebba2a291eecd984eb2364d636;p=mesa.git st/glsl_to_nir: make use of nir linker for linking uniforms Reviewed-by: Alejandro PiƱeiro Part-of: --- diff --git a/src/compiler/glsl/gl_nir_linker.c b/src/compiler/glsl/gl_nir_linker.c index c8cb6457f96..fb8b3e0c340 100644 --- a/src/compiler/glsl/gl_nir_linker.c +++ b/src/compiler/glsl/gl_nir_linker.c @@ -622,6 +622,9 @@ check_image_resources(struct gl_context *ctx, struct gl_shader_program *prog) bool gl_nir_link_glsl(struct gl_context *ctx, struct gl_shader_program *prog) { + if (!gl_nir_link_uniforms(ctx, prog, true)) + return false; + link_util_calculate_subroutine_compat(prog); link_util_check_uniform_resources(ctx, prog); link_util_check_subroutine_resources(prog); diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index 292da60b9d9..72713fa2e66 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -4441,12 +4441,13 @@ link_and_validate_uniforms(struct gl_context *ctx, struct gl_shader_program *prog) { update_array_sizes(prog); - link_assign_uniform_locations(prog, ctx); - - if (prog->data->LinkStatus == LINKING_FAILURE) - return; if (!ctx->Const.UseNIRGLSLLinker) { + link_assign_uniform_locations(prog, ctx); + + if (prog->data->LinkStatus == LINKING_FAILURE) + return; + link_util_calculate_subroutine_compat(prog); link_util_check_uniform_resources(ctx, prog); link_util_check_subroutine_resources(prog); diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index 40560082873..cf27da7e0c7 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -661,18 +661,14 @@ st_link_nir(struct gl_context *ctx, stp->shader_program = shader_program; stp->state.type = PIPE_SHADER_IR_NIR; - if (shader_program->data->spirv) { - prog->Parameters = _mesa_new_parameter_list(); - /* Parameters will be filled during NIR linking. */ + /* Parameters will be filled during NIR linking. */ + prog->Parameters = _mesa_new_parameter_list(); + if (shader_program->data->spirv) { prog->nir = _mesa_spirv_to_nir(ctx, shader_program, shader->Stage, options); } else { validate_ir_tree(shader->ir); - prog->Parameters = _mesa_new_parameter_list(); - _mesa_generate_parameters_list_for_uniforms(ctx, shader_program, shader, - prog->Parameters); - if (ctx->_Shader->Flags & GLSL_DUMP) { _mesa_log("\n"); _mesa_log("GLSL IR for linked %s program %d:\n", @@ -682,9 +678,6 @@ st_link_nir(struct gl_context *ctx, _mesa_log("\n\n"); } - prog->ExternalSamplersUsed = gl_external_samplers(prog); - _mesa_update_shader_textures_used(shader_program, prog); - prog->nir = glsl_to_nir(st->ctx, shader_program, shader->Stage, options); st_nir_preprocess(st, prog, shader_program, shader->Stage); } @@ -738,6 +731,12 @@ st_link_nir(struct gl_context *ctx, if (!gl_nir_link_glsl(ctx, shader_program)) return GL_FALSE; + for (unsigned i = 0; i < num_shaders; i++) { + struct gl_program *prog = linked_shader[i]->Program; + prog->ExternalSamplersUsed = gl_external_samplers(prog); + _mesa_update_shader_textures_used(shader_program, prog); + } + nir_build_program_resource_list(ctx, shader_program, false); }