[Mesa-dev] [PATCH] glsl/linker: Check the subroutine associated functions names
Ian Romanick
idr at freedesktop.org
Fri Oct 5 13:55:48 UTC 2018
On 10/03/2018 11:52 PM, Iago Toral wrote:
> On Wed, 2018-10-03 at 16:24 +0300, Vadim Shovkoplias wrote:
>> Hi Iago,
>>
>> I also think that compiler is the best place for the fix. But from my
>> understanding compiler fix will be limited to distinct shader objects
>> (not the shader stage).
>> In GLSL spec mentioned: "A program will fail to compile or link if any
>> *shader or stage* contains two or more functions with the same name if
>> the name is
>> associated with a subroutine type".
>> So if I understand the spec correctly such restriction for the shader
>> stage can be fixed only in linker. E.g. consider the use case when
>> fragment shader is linked from
>> two fragment shader objects. One object contains function foo() which
>> is associated with subroutine type and second shader object has some
>> regular foo() function
>> with the same name. I suppose compiler fix won't be able to detect this.
>
> Yes, that is correct, good point.
>
>> IMHO the best way to fix this is to implement 2 patches:
>> 1) One patch for linker to implement restriction for the shader stages
>> (already done in this patch)
>> 2) Another one for compiler to check the restriction for distinct
>> shader objects.
>>
>> What do you think ?
>
> Since we need to keep the link-time check, any compile-time checks we
> add would be redundant with that, so I think we should just go with the
> link-time check only (your original patch)
The spec quotation is pretty clear: "A program will fail to compile ...
if any shader ... contains two or more functions with the same name if
the name is associated with a subroutine type." To be strictly correct,
both checks are necessary. Before doing that extra work, someone should
check that glslang has the compile-time check.
More information about the mesa-dev
mailing list