diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index 6d97256705d..a4b233c74ac 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -3100,18 +3100,6 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) if (!interstage_cross_validate_uniform_blocks(prog, true)) goto done; - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (prog->_LinkedShaders[i] == NULL) - continue; - - detect_recursion_linked(prog, prog->_LinkedShaders[i]->ir); - if (!prog->data->LinkStatus) - goto done; - } - - /* Check and validate stream emissions in geometry shaders */ - validate_geometry_shader_emissions(consts, prog); - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { if (prog->_LinkedShaders[i] == NULL) continue; @@ -3119,6 +3107,10 @@ 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; + lower_vector_derefs(shader); lower_packing_builtins(ir, ctx->Extensions.ARB_shading_language_packing, @@ -3131,6 +3123,9 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) do_vec_index_to_cond_assign(ir); } + /* Check and validate stream emissions in geometry shaders */ + validate_geometry_shader_emissions(consts, prog); + done: for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { free(shader_list[i]);