glsl: Move and refine test for unsized arrays in GLSL ES
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 9 Aug 2013 00:23:01 +0000 (17:23 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 14 Aug 2013 00:53:33 +0000 (17:53 -0700)
commit42624b1c8145375f987e380bb78456658f845a17
tree612cd7e8c8a7feb9db0785101015698791893f71
parentd5aee174b88878e6d47dc1fadd3935f535fd85f0
glsl: Move and refine test for unsized arrays in GLSL ES

GLSL ES does not allow unsized arrays, and GLSL ES 1.00 does not allow
array initializers.  However, GLSL ES 3.00 allows array initializers,
and the initializer can explicitly size the array.  The specification
even includes some examples of this:

    float x[] = float[2] (1.0, 2.0);     // declares an array of size 2
    float y[] = float[] (1.0, 2.0, 3.0); // declares an array of size 3

    float a[5];
    float b[] = a;

Move the unsized array check to after the initializer has been
processed.  If the array is still unsized, generate the error.  This
should have no effect in GLSL ES 1.00 because, as previously mentioned,
array initializers are not allowed.

Fixes piglit "glsl-es-3.00 compiler array-sized-by-initializer.vert".

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: "9.1 9.2" <mesa-stable@lists.freedesktop.org>
src/glsl/ast_to_hir.cpp