[Piglit] [PATCH] glsl-es-1.00: add constant-index-expression indexing test with struct

Matt Turner mattst88 at gmail.com
Sun Mar 29 22:08:30 PDT 2015


On Sun, Mar 29, 2015 at 9:52 PM, Tapani Pälli <tapani.palli at intel.com> wrote:
> On 03/27/2015 06:47 PM, Matt Turner wrote:
>>
>> On Fri, Mar 27, 2015 at 12:27 AM, Tapani Pälli <tapani.palli at intel.com>
>> wrote:
>>>
>>> This test fails with current Mesa HEAD (6264348), see bug
>>> https://bugs.freedesktop.org/show_bug.cgi?id=84225.
>>>
>>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>>> ---
>>>   .../struct-sampler-array-index.frag                | 42
>>> ++++++++++++++++++++++
>>>   1 file changed, 42 insertions(+)
>>>   create mode 100644
>>> tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/struct-sampler-array-index.frag
>>>
>>> diff --git
>>> a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/struct-sampler-array-index.frag
>>> b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/struct-sampler-array-index.frag
>>> new file mode 100644
>>> index 0000000..122a8a4
>>> --- /dev/null
>>> +++
>>> b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/struct-sampler-array-index.frag
>>> @@ -0,0 +1,42 @@
>>> +/* [config]
>>> + * expect_result: pass
>>> + * glsl_version: 1.00
>>> + * [end config]
>>> + *
>>> + * From "Appendix A" of the GLSL ES 1.00 spec:
>>> + *
>>> + *     "GLSL ES 1.00 supports both arrays of samplers and arrays of
>>> + *      structures which contain samplers. In both these cases, for
>>> + *      ES 2.0, support for indexing with a constant-index-expression
>>> + *      is mandated"
>>> + *
>>> + * For additional complexity this test has array of structures
>>> + * that has array of samplers.
>>> + *
>>> + */
>>> +#version 100
>>> +
>>> +struct s_t
>>> +{
>>> +       sampler2D array[1];
>>
>>
>> array[2].
>>
>>> +       sampler2D foo;
>>> +};
>>> +
>>> +uniform s_t array[1];
>>
>>
>> array[2].
>
>
> urgh, thanks for pointing these out
>
>>> +
>>> +void main()
>>> +{
>>> +       highp vec4 color;
>>> +
>>> +       // case 1, sampler in array of structs
>>> +       for (int i = 0; i < 2; i++) {
>>> +               color += texture2D(array[i].foo, vec2(0.0));
>>> +       }
>>> +
>>> +       // case 2, index sampler array in array of structs
>>> +       for (int i = 0; i < 2; i++) {
>>> +               color += texture2D(array[i].array[i], vec2(0.0));
>>> +       }
>>
>>
>> I think these would be better as a doubly-nested loop. I was going to
>> suggest using .length() instead of hardcoded upper bounds, but that's
>> not really possible with two separate loops, the second of which
>> assumes the two arrays are of equal size.
>
>
> I wanted to have clear separation because the first case actually passes and
> only second one fails so there is something different there, not sure if it
> is clear anymore when having doubly-nested loop (?)

I don't have a strong preference for how you change it, but testing
that the array[0].array[0] and array[1].array[1] work without testing
array[0].array[1] or array[1].array[0] seems weird.


More information about the Piglit mailing list