[Piglit] [PATCH] glsl-1.20: add test to trip a nir assert

Chris Forbes chrisf at ijw.co.nz
Sun Nov 1 17:38:14 PST 2015


That's reasonably subtle..

Reviewed-by: Chris Forbes <chrisf at ijw.co.nz>

On Sat, Oct 31, 2015 at 11:24 PM, Timothy Arceri <t_arceri at yahoo.com.au>
wrote:

> Trips an assert in nir when a chance to have optimised out a
> redundant assignment of a function inout array element is missed.
> ---
>  ...unction-inout-array-self-assignment.shader_test | 50
> ++++++++++++++++++++++
>  1 file changed, 50 insertions(+)
>  create mode 100644
> tests/spec/glsl-1.20/execution/vs-function-inout-array-self-assignment.shader_test
>
> diff --git
> a/tests/spec/glsl-1.20/execution/vs-function-inout-array-self-assignment.shader_test
> b/tests/spec/glsl-1.20/execution/vs-function-inout-array-self-assignment.shader_test
> new file mode 100644
> index 0000000..42c9d42
> --- /dev/null
> +++
> b/tests/spec/glsl-1.20/execution/vs-function-inout-array-self-assignment.shader_test
> @@ -0,0 +1,50 @@
> +// Tests a scenario in Mesa with function inout parameters which only
> +// seems to appear when an assignment is done to an array element
> followed by
> +// an assignment to another element where the element itself is either
> +// multiplied or divided by 1.
> +//
> +// The result is we end up with an assignment in the IR where the lhs and
> rhs
> +// are referencing the same variable. This ends up tripping an assert,
> +// presumably the assignment should just be detected and optimised out.
> +[require]
> +GLSL >= 1.20
> +
> +[vertex shader]
> +#version 120
> +varying vec4 color;
> +
> +void array_mod(inout int b[2])
> +{
> +  b[0] = int(2);
> +  b[1] = b[1] * int(1);
> +}
> +
> +void main()
> +{
> +  int a[2];
> +
> +  a[0] = int(1);
> +  a[1] = int(2);
> +  array_mod(a);
> +
> +  if (a[0] == int(2) && a[1] == int(2)) {
> +    color = vec4(0, 1, 0, 1);
> +  } else {
> +    color = vec4(1, 0, 0, 1);
> +  }
> +
> +  gl_Position = gl_Vertex;
> +}
> +
> +[fragment shader]
> +#version 120
> +varying vec4 color;
> +
> +void main()
> +{
> +  gl_FragColor = color;
> +}
> +
> +[test]
> +draw rect -1 -1 2 2
> +probe all rgb 0 1 0
> --
> 2.4.3
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20151102/2be2dfda/attachment.html>


More information about the Piglit mailing list