[Piglit] [PATCH] glsl: Try some chained assignments

Ian Romanick idr at freedesktop.org
Fri Jan 24 11:00:51 PST 2014


On 01/24/2014 10:40 AM, Kenneth Graunke wrote:
> On 01/24/2014 10:28 AM, Ian Romanick wrote:
>> From: Ian Romanick <ian.d.romanick at intel.com>
>>
>> Mesa currently passes the chained-assignment.vert, but it fails
>> chained-assignment-with-array-deref.vert with:
>>
>> 0:5(12): error: value of type vec4 cannot be assigned to variable of type float
>>
>> It seems the type checker is getting confused by the array
>> dereference.
>>
>> I have been told that cases similar to
>> chained-assignment-with-array-deref pass on all other known desktop
>> OpenGL implementations.
>>
>> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
>> ---
>>  .../chained-assignment-with-array-deref.vert                   | 10 ++++++++++
>>  .../compiler/assignment-operators/chained-assignment.vert      | 10 ++++++++++
>>  2 files changed, 20 insertions(+)
>>  create mode 100644 tests/spec/glsl-1.10/compiler/assignment-operators/chained-assignment-with-array-deref.vert
>>  create mode 100644 tests/spec/glsl-1.10/compiler/assignment-operators/chained-assignment.vert
>>
>> diff --git a/tests/spec/glsl-1.10/compiler/assignment-operators/chained-assignment-with-array-deref.vert b/tests/spec/glsl-1.10/compiler/assignment-operators/chained-assignment-with-array-deref.vert
>> new file mode 100644
>> index 0000000..1e3a450
>> --- /dev/null
>> +++ b/tests/spec/glsl-1.10/compiler/assignment-operators/chained-assignment-with-array-deref.vert
>> @@ -0,0 +1,10 @@
>> +/* [config]
>> + * expect_result: pass
>> + * glsl_version: 1.10
>> + * [end config]
>> + */
>> +
>> +void foo(inout vec4 a, float b)
>> +{
>> +	a[0] = a[1] = a[2] = b;
>> +}
> 
> You're only assigning three components of a vec4, which is a bit
> odd...and the "inout" is not necessary/related.
> 
> How about this instead?  (Or, additionally?)
> 
> void splat(vec2 v, float f)
> {
>     v[0] = v[1] = f;
> }

Yeah, that sounds good.

I think I also want a couple other variations:

   v.x = v.y = f;

and

   v[i] = v[j] = f;

>> diff --git a/tests/spec/glsl-1.10/compiler/assignment-operators/chained-assignment.vert b/tests/spec/glsl-1.10/compiler/assignment-operators/chained-assignment.vert
>> new file mode 100644
>> index 0000000..5a4c02b
>> --- /dev/null
>> +++ b/tests/spec/glsl-1.10/compiler/assignment-operators/chained-assignment.vert
>> @@ -0,0 +1,10 @@
>> +/* [config]
>> + * expect_result: pass
>> + * glsl_version: 1.10
>> + * [end config]
>> + */
>> +
>> +void foo(inout float a, inout float b, float c)
>> +{
>> +	a = b = c;
>> +}
> 
> Not sure this is too useful, but it definitely ought to work.

We currently have zero tests of chained assignments, and I wanted a
walk-before-you-run sort of test.  Since this passes, that gives some
information about the source of the error in the second.

I'll drop inout from this case too.



More information about the Piglit mailing list