[Piglit] [PATCH] glsl-1.20: Add tests exposing some crashes with const arrays

Ian Romanick idr at freedesktop.org
Thu Nov 20 16:35:36 PST 2014


On 11/07/2014 10:43 AM, Chris Forbes wrote:
> I stumbled across these while implementing tessellation. In particular,
> the first test is a cutdown version of the tessellation nop.shader_test.
> 
> The crash in array-initializers-1 is caused by the lowering of const arrays to
> uniforms. The hidden uniforms for both are named 'constarray', and a
> later phase in the linker gets horribly confused when it tries to look
> them up by name.
> 
> I have not yet usefully characterized the crash in double-indirect-1,
> other than that it is in the i965 backend rather than in the GLSL
> compiler.

Oof.  These look like good tests to have... it seems like it would be
pretty easy to make them execution tests.  Who knows what dragons may be
there...

> Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
> ---
> 
> Here's a slightly better version of the patch. The first crash turned out to be
> nothing to do with double-indirection.
> 
>  tests/all.py                                        |  4 ++++
>  .../linker/array-initializers-1.shader_test         | 20 ++++++++++++++++++++
>  .../glsl-1.20/linker/double-indirect-1.shader_test  | 21 +++++++++++++++++++++
>  3 files changed, 45 insertions(+)
>  create mode 100644 tests/spec/glsl-1.20/linker/array-initializers-1.shader_test
>  create mode 100644 tests/spec/glsl-1.20/linker/double-indirect-1.shader_test
> 
> diff --git a/tests/all.py b/tests/all.py
> index 4089325..3f004ce 100644
> --- a/tests/all.py
> +++ b/tests/all.py
> @@ -1074,6 +1074,10 @@ spec['glsl-1.20']['execution'] = {}
>  add_shader_test_dir(spec['glsl-1.20']['execution'],
>                      os.path.join(testsDir, 'spec', 'glsl-1.20', 'execution'),
>                      recursive=True)
> +spec['glsl-1.20']['linker'] = {}
> +add_shader_test_dir(spec['glsl-1.20']['linker'],
> +                    os.path.join(testsDir, 'spec', 'glsl-1.20', 'linker'),
> +                    recursive=True)
>  add_shader_test_dir(spec['glsl-1.20']['execution'],
>                      os.path.join(generatedTestDir, 'spec', 'glsl-1.20', 'execution'),
>                      recursive=True)
> diff --git a/tests/spec/glsl-1.20/linker/array-initializers-1.shader_test b/tests/spec/glsl-1.20/linker/array-initializers-1.shader_test
> new file mode 100644
> index 0000000..911acd4
> --- /dev/null
> +++ b/tests/spec/glsl-1.20/linker/array-initializers-1.shader_test
> @@ -0,0 +1,20 @@
> +# Demonstrates a crash in mesa.
> +
> +[require]
> +GLSL >= 1.20
> +
> +[vertex shader]
> +#version 120
> +
> +const int xs[] = int[](1,2,3);
> +const int ys[] = int[](1,2);
> +
> +uniform int n;
> +
> +void main()
> +{
> +  gl_Position = vec4(xs[n]+ys[n], 0, 0, 1);
> +}
> +
> +[test]
> +link success
> diff --git a/tests/spec/glsl-1.20/linker/double-indirect-1.shader_test b/tests/spec/glsl-1.20/linker/double-indirect-1.shader_test
> new file mode 100644
> index 0000000..c1d46e3
> --- /dev/null
> +++ b/tests/spec/glsl-1.20/linker/double-indirect-1.shader_test
> @@ -0,0 +1,21 @@
> +# Demonstrates a crash in i965. The double indirection via const arrays
> +# is required to trigger this.
> +
> +[require]
> +GLSL >= 1.20
> +
> +[vertex shader]
> +#version 120
> +
> +const float a[] = float[](0);
> +const int b[] = int[](0);
> +
> +uniform int n;
> +
> +void main()
> +{
> +  gl_Position = vec4(a[b[n]], 0, 0, 1);
> +}
> +
> +[test]
> +link success
> 



More information about the Piglit mailing list