[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