glsl: Ensure that sampler declarations are always uniform or "in" parameters.
authorPaul Berry <stereotype441@gmail.com>
Tue, 12 Jul 2011 19:03:02 +0000 (12:03 -0700)
committerPaul Berry <stereotype441@gmail.com>
Mon, 18 Jul 2011 17:48:27 +0000 (10:48 -0700)
commitf07221056e1822187546b76387714b3172f9b2c5
tree7682a4551154360bc607b2d86755c7600bfb18f7
parentddc1c96390b685bb95f7431e862c3a64fcefa085
glsl: Ensure that sampler declarations are always uniform or "in" parameters.

This brings us into compliance with page 17 (page 22 of the PDF) of
the GLSL 1.20 spec:

    "[Sampler types] can only be declared as function parameters or
    uniform variables (see Section 4.3.5 "Uniform"). ... [Samplers]
    cannot be used as out or inout function parameters."

The spec isn't explicit about whether this rule applies to
structs/arrays containing shaders, but the intent seems to be to
ensure that it can always be determined at compile time which sampler
is being used in each texture lookup.  So to avoid creating a
loophole, the rule needs to apply to structs/arrays containing shaders
as well.

Fixes piglit tests spec/glsl-1.10/compiler/samplers/*.frag, and fixes
bug 38987.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=38987
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/glsl/ast_to_hir.cpp