diff --git a/src/compiler/glsl/gl_nir_linker.c b/src/compiler/glsl/gl_nir_linker.c index 70a671a1358..6b7455f96f4 100644 --- a/src/compiler/glsl/gl_nir_linker.c +++ b/src/compiler/glsl/gl_nir_linker.c @@ -1677,6 +1677,18 @@ gl_nir_link_glsl(const struct gl_constants *consts, MESA_TRACE_FUNC(); + for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { + if (prog->_LinkedShaders[i] == NULL) + continue; + + gl_nir_detect_recursion_linked(prog, + prog->_LinkedShaders[i]->Program->nir); + if (!prog->data->LinkStatus) + return false; + + gl_nir_inline_functions(prog->_LinkedShaders[i]->Program->nir); + } + resize_tes_inputs(consts, prog); /* Validate the inputs of each stage with the output of the preceding diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index a2084f03eb0..548bcb8976f 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -542,12 +542,6 @@ st_link_glsl_to_nir(struct gl_context *ctx, } prog->nir = glsl_to_nir(&st->ctx->Const, shader_program, shader->Stage, options); - - gl_nir_detect_recursion_linked(shader_program, prog->nir); - if (!shader_program->data->LinkStatus) - return GL_FALSE; - - gl_nir_inline_functions(prog->nir); } memcpy(prog->nir->info.source_sha1, shader->linked_source_sha1,