diff options
author | Timothy Arceri <[email protected]> | 2020-01-07 14:38:14 +1100 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-04-21 01:57:34 +0000 |
commit | 95f555a93a8891ebba2a291eecd984eb2364d636 (patch) | |
tree | e23d864f888ba3892b04856871e82209085302d9 | |
parent | 0f79e0f7c62d4ac34e6a4a827b5433402cf7c223 (diff) |
st/glsl_to_nir: make use of nir linker for linking uniforms
Reviewed-by: Alejandro PiƱeiro <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4395>
-rw-r--r-- | src/compiler/glsl/gl_nir_linker.c | 3 | ||||
-rw-r--r-- | src/compiler/glsl/linker.cpp | 9 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_glsl_to_nir.cpp | 19 |
3 files changed, 17 insertions, 14 deletions
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); } |