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

Kenneth Graunke kenneth at whitecape.org
Fri Jan 24 10:40:12 PST 2014


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;
}

> 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.


More information about the Piglit mailing list