st/glsl_to_nir: make use of nir linker for linking uniforms
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4395>
This commit is contained in:

committed by
Marge Bot

parent
0f79e0f7c6
commit
95f555a93a
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user