[Mesa-dev] [PATCH v4 17/17] glsl linker: compare interface blocks during interstage linking
Jordan Justen
jljusten at gmail.com
Tue May 21 11:44:18 PDT 2013
On Tue, May 21, 2013 at 12:11 AM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> On 05/16/2013 05:44 PM, Jordan Justen wrote:
>>
>> Verify that interface blocks match when linking separate shader
>> stages into a program.
>>
>> Fixes piglit glsl-1.50 tests:
>> * linker/interface-blocks-vs-fs-member-count-mismatch.shader_test
>> * linker/interface-blocks-vs-fs-member-order-mismatch.shader_test
>>
>> Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
>> ---
>> src/glsl/interface_blocks.cpp | 47
>> +++++++++++++++++++++++++++++++++++++++--
>> src/glsl/interface_blocks.h | 4 ++++
>> src/glsl/linker.cpp | 6 ++++++
>> 3 files changed, 55 insertions(+), 2 deletions(-)
>
>
> I have a few annoying spec questions:
>
> 1. What happens if the producer has output interfaces not used by the next
> stage? Is that legal (like unused varyings)?
>
> For example,
> [vertex shader]
> out foo { vec4 a };
> out bar { int b };
>
> [fragment shader]
> in foo { vec4 a };
> // FS does not reference bar
I'd been assuming this was allowed, similar to unused varyings.
> 2. What happens if the consumer has input interfaces not declared in the
> previous stage? Is that legal? If so, does it get populated with undefined
> values?
>
> For example,
> [vertex shader]
> out foo { vec4 a };
> // VS does not declare/write bar
>
> [fragment shader]
> in foo { vec4 a };
> in bar { int b };
>
> The text in the spec is really obnoxious...it's so hand-wavy and full of
> examples and prose...
I'd been assuming that this would be a link error.
Do you think these assumptions are reasonable, or should I investigate
the behavior of other drivers?
-Jordan
More information about the mesa-dev
mailing list