glsl: don't allow non-flat integral types in varying structs/arrays.
authorPaul Berry <stereotype441@gmail.com>
Thu, 7 Feb 2013 00:09:39 +0000 (16:09 -0800)
committerPaul Berry <stereotype441@gmail.com>
Wed, 13 Feb 2013 15:58:01 +0000 (07:58 -0800)
commit93c913485ea16d09b2d753c872607e79c0b68f6b
treeb1bf3d9f68533cffc9d2ebd91a08314fa0dfc71a
parentd5948f2f5e37d1abc0d433ddf43407d87b2d1227
glsl: don't allow non-flat integral types in varying structs/arrays.

In the GLSL 1.30 spec, section 4.3.6 ("Outputs") says:

    "If a vertex output is a signed or unsigned integer or integer
    vector, then it must be qualified with the interpolation qualifier
    flat."

The GLSL ES 3.00 spec further clarifies, in section 4.3.6 ("Output
Variables"):

    "Vertex shader outputs that are, *or contain*, signed or unsigned
    integers or integer vectors must be qualified with the
    interpolation qualifier flat."

(Emphasis mine.)

The language in the GLSL ES 3.00 spec is clearly correct and should be
applied to all shading language versions, since varyings that contain
ints can't be interpolated, regardless of which shading language
version is in use.

(Note that in GLSL 1.50 the restriction is changed to apply to
fragment shader inputs rather than vertex shader outputs, to
accommodate the fact that in the presence of geometry shaders, vertex
shader outputs are not necessarily interpolated.  That will be
addressed by a future patch).

NOTE: This is a candidate for stable branches.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
src/glsl/ast_to_hir.cpp
src/glsl/glsl_types.cpp
src/glsl/glsl_types.h