[Mesa-dev] [PATCH 8/8] glsl/linker: Ensure the first stage of an SSO pipeline has input locs assigned

Timothy Arceri timothy.arceri at collabora.com
Tue May 17 23:40:59 UTC 2016


On Tue, 2016-05-17 at 15:11 -0700, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
> 
> Previously an SSO pipeline containing only a tessellation control
> shader
> and a tessellation evaluation shader would not get locations assigned
> for the TCS inputs.  This would lead to assertion failures in some
> piglit tests, such as arb_program_interface_query-resource-query.
> 
> That piglit test still fails on some tessellation related subtests.
> Specifically, these subtests fail:
> 
> 'GL_PROGRAM_INPUT(tcs) active resources' expected 2 but got 3
> 'GL_PROGRAM_INPUT(tcs) max length name' expected 12 but got 16
> 'GL_PROGRAM_INPUT(tcs,tes) active resources' expected 2 but got 3
> 'GL_PROGRAM_INPUT(tcs,tes) max length name' expected 12 but got 16
> 'GL_PROGRAM_OUTPUT(tcs) active resources' expected 15 but got 3
> 'GL_PROGRAM_OUTPUT(tcs) max length name' expected 23 but got 12
> 
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
>  src/compiler/glsl/linker.cpp | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/src/compiler/glsl/linker.cpp
> b/src/compiler/glsl/linker.cpp
> index 34b4a81..d277dd0 100644
> --- a/src/compiler/glsl/linker.cpp
> +++ b/src/compiler/glsl/linker.cpp
> @@ -4790,7 +4790,7 @@ link_shaders(struct gl_context *ctx, struct
> gl_shader_program *prog)
>            */
>           int next = last;
>           for (int i = next - 1; i >= 0; i--) {
> -            if (prog->_LinkedShaders[i] == NULL)
> +            if (prog->_LinkedShaders[i] == NULL && i != 0)

Up to you but I think i != MESA_SHADER_VERTEX makes it slightly easier
to follow.

Otherwise the series is Reviewed-by: Timothy Arceri
<timothy.arceri at collabora.com>


>                 continue;
>  
>              gl_shader *const sh_i = prog->_LinkedShaders[i];
> @@ -4806,8 +4806,11 @@ link_shaders(struct gl_context *ctx, struct
> gl_shader_program *prog)
>                        tfeedback_decls);
>  
>              /* This must be done after all dead varyings are
> eliminated. */
> -            if (!check_against_output_limit(ctx, prog, sh_i))
> -               goto done;
> +            if (sh_i != NULL) {
> +               if (!check_against_output_limit(ctx, prog, sh_i)) {
> +                  goto done;
> +               }
> +            }
>              if (!check_against_input_limit(ctx, prog, sh_next))
>                 goto done;
>  


More information about the mesa-dev mailing list