Module: Mesa
Branch: main
Commit: 5147e9a26e723841f8d3cbd9df010c69a2216aa5
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5147e9a26e723841f8d3cbd9df010c69a2216aa5

Author: Timothy Arceri <[email protected]>
Date:   Mon Dec 11 16:17:18 2023 +1100

glsl: combine shader stage loops in linker

The gs validation that was run between these loops can be run after
merging them without any issue.

Reviewed-by: Marek Olšák <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26628>

---

 src/compiler/glsl/linker.cpp | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

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]);

Reply via email to