glsl: Implement rules for geometry shader input sizes.
authorPaul Berry <stereotype441@gmail.com>
Wed, 31 Jul 2013 04:13:48 +0000 (21:13 -0700)
committerPaul Berry <stereotype441@gmail.com>
Fri, 2 Aug 2013 03:24:39 +0000 (20:24 -0700)
commit7cfefe6965d50d8b1b494396d7b3b16d87bb2060
tree789a59eac0c0568b5c53d8c79cad3dca5b2ea1d8
parent20ae8e0c9168d900246d5940e07cf668dba8f0ce
glsl: Implement rules for geometry shader input sizes.

Section 4.3.8.1 (Input Layout Qualifiers) of the GLSL 1.50 spec
contains some tricky rules for how the sizes of geometry shader input
arrays are related to the input layout specification.  In essence,
those rules boil down to the following:

- If an input array declaration does not specify a size, and it
  follows an input layout declaration, it is sized according to the
  input layout.

- If an input layout declaration follows an input array declaration
  that didn't specify a size, the input array declaration is given a
  size at the time the input layout declaration appears.

- All input layout declarations and input array sizes must ultimately
  match.  Inconsistencies are reported as soon as they are detected,
  at compile time if the inconsistency is within one compilation unit,
  otherwise at link time.

- At least one compilation unit must contain an input layout
  declaration.

(Note: the geom_array_resize_visitor class was contributed by Bryan
Cain <bryancain3@gmail.com>.)

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/ast_to_hir.cpp
src/glsl/glsl_parser_extras.h
src/glsl/linker.cpp