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

Ian Romanick idr at freedesktop.org
Wed May 18 03:24:22 UTC 2016


On 05/17/2016 04:40 PM, Timothy Arceri wrote:
> 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.

I'm a little bit torn.  I thought about using MESA_SHADER_VERTEX, but
that's not really the information that's important.  What's important is
always executing at the loop bound (which is 0) even when there's no
shader there.

I think I'd want to either leave both i comparisons with zero or change
both to MESA_SHADER_VERTEX.  Do you have an opinion?

> 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