[Piglit] [PATCH] arb_gpu_shader_fp64: verify function parameter overloads

Ian Romanick idr at freedesktop.org
Mon Jun 22 09:34:19 PDT 2015


On 06/22/2015 09:25 AM, Ilia Mirkin wrote:
> On Mon, Jun 22, 2015 at 12:22 PM, Ian Romanick <idr at freedesktop.org> wrote:
>> On 06/17/2015 12:43 PM, Ilia Mirkin wrote:
>>> fp64 adds variants of all sorts of functions. make sure that we're still
>>> able to resolve otherwise-ambiguous calls in the presence of gs5.
>>>
>>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>>> ---
>>>  .../compiler/implicit-conversions-func.vert        | 22 ++++++++++++++++++++++
>>>  1 file changed, 22 insertions(+)
>>>  create mode 100644 tests/spec/arb_gpu_shader_fp64/compiler/implicit-conversions-func.vert
>>>
>>> diff --git a/tests/spec/arb_gpu_shader_fp64/compiler/implicit-conversions-func.vert b/tests/spec/arb_gpu_shader_fp64/compiler/implicit-conversions-func.vert
>>> new file mode 100644
>>> index 0000000..224aecb
>>> --- /dev/null
>>> +++ b/tests/spec/arb_gpu_shader_fp64/compiler/implicit-conversions-func.vert
>>> @@ -0,0 +1,22 @@
>>> +// [config]
>>> +// expect_result: pass
>>> +// glsl_version: 1.50
>>> +// require_extensions: GL_ARB_gpu_shader_fp64 GL_ARB_gpu_shader5
>>> +// [end config]
>>> +
>>> +// Test that overloaded function selection still works in the presence
>>> +// of new double variants. ARB_gpu_shader5 provides the overload
>>> +// selection rules that allow the implementatino to pick one of the
>>                                      implementation
>>
>>> +// candidates.
>>> +
>>> +#version 150
>>> +#extension GL_ARB_gpu_shader_fp64: enable
>>> +#extension GL_ARB_gpu_shader5: enable
>>> +
>>> +void foo(double a);
>>> +void foo(float a);
>>> +
>>> +void test() {
>>> +  mod(5, 6);
>>> +  foo(5);
>>> +}
>>>
>>
>> Which overload does the spec say is supposed to be used for foo(5)?  We
>> should provide an implementation for that overload, and make this a
>> linker test.
> 
> The float one, I think. From ARB_gpu_shader5, see point #3:

That was going to be my guess... mostly since that means the selected
overload wouldn't "change" with the addition of ARB_gpu_shader_fp64.
You can imagine a shader like:

#version 150
#extension GL_ARB_gpu_shader_fp64: enable
#extension GL_ARB_gpu_shader5: enable

#ifdef GL_ARB_gpu_shader_fp64
void foo(double a)
{
    ...
}
#endif

void foo(float a)
{
    ...
}

void main()
{
   foo(5);
}

It should be the same whether ARB_gpu_shader_fp64 is supported or not.

>      To determine whether the conversion for a single argument in one match is
>      better than that for another match, the following rules are applied, in
>      order:
> 
>        1. An exact match is better than a match involving any implicit
>           conversion.
> 
>        2. A match involving an implicit conversion from float to double is
>           better than a match involving any other implicit conversion.
> 
>        3. A match involving an implicit conversion from either int or uint to
>           float is better than a match involving an implicit conversion from
>           either int or uint to double.
> 



More information about the Piglit mailing list