diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index fbb5d916b16..4acf396161e 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -2840,10 +2840,6 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) struct gl_linked_shader *shader = prog->_LinkedShaders[i]; exec_list *ir = shader->ir; - detect_recursion_linked(prog, ir); - if (!prog->data->LinkStatus) - goto done; - const struct gl_shader_compiler_options *gl_options = &consts->ShaderCompilerOptions[i]; diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index 3e956ba7051..5fe5b170a1a 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -541,6 +541,10 @@ 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); }