[Mesa-dev] [PATCH 2/7] glsl: only call dead code pass when new inputs/outputs demoted

Juha-Pekka Heikkila juhapekka.heikkila at gmail.com
Mon Nov 23 05:28:07 PST 2015


Reviewed-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>

On 21.11.2015 10:02, Timothy Arceri wrote:
> From: Timothy Arceri <timothy.arceri at collabora.com>
>
> This will help avoid eliminating inputs/outputs needed by SSOs.
>
> Cc: Gregory Hainaut <gregory.hainaut at gmail.com>
> ---
>   src/glsl/linker.cpp | 24 ++++++++++++++----------
>   1 file changed, 14 insertions(+), 10 deletions(-)
>
> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
> index eac2536..5ff433c 100644
> --- a/src/glsl/linker.cpp
> +++ b/src/glsl/linker.cpp
> @@ -4327,13 +4327,14 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
>         do_dead_builtin_varyings(ctx, sh, NULL,
>                                  num_tfeedback_decls, tfeedback_decls);
>
> -      if (!prog->SeparateShader)
> +      if (!prog->SeparateShader) {
>            demote_shader_inputs_and_outputs(sh, ir_var_shader_out);
> -
> -      /* Eliminate code that is now dead due to unused outputs being demoted.
> -       */
> -      while (do_dead_code(sh->ir, false))
> -         ;
> +         /* Eliminate code that is now dead due to unused outputs being
> +          * demoted.
> +          */
> +         while (do_dead_code(sh->ir, false))
> +            ;
> +      }
>      }
>      else if (first == MESA_SHADER_FRAGMENT) {
>         /* If the program only contains a fragment shader...
> @@ -4350,11 +4351,14 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
>                                          0 /* num_tfeedback_decls */,
>                                          NULL /* tfeedback_decls */))
>               goto done;
> -      } else
> +      } else {
>            demote_shader_inputs_and_outputs(sh, ir_var_shader_in);
> -
> -      while (do_dead_code(sh->ir, false))
> -         ;
> +         /* Eliminate code that is now dead due to unused inputs being
> +          * demoted.
> +          */
> +         while (do_dead_code(sh->ir, false))
> +            ;
> +      }
>      }
>
>      next = last;
>



More information about the mesa-dev mailing list