glsl: validate IR after linking (debug builds only)
authorPaul Berry <stereotype441@gmail.com>
Wed, 3 Aug 2011 22:37:01 +0000 (15:37 -0700)
committerPaul Berry <stereotype441@gmail.com>
Mon, 8 Aug 2011 19:44:02 +0000 (12:44 -0700)
commitc148ef6ddb3dbf256c26d82ed2f45f1fde55a231
tree09766d23e8abbe5c5469b35ff97ed1885c1d5856
parent01a851c296347d8e9d2166b3c83eab97404c0670
glsl: validate IR after linking (debug builds only)

At least one of the invariants verified by IR validation concerns the
relative ordering of toplevel constructs in the IR: references to
global variables must come after the declarations of those global
variables.

Since linking affects the ordering of toplevel constructs in the IR,
it's possible that a bug in the linker will cause invalid IR to be
generated, even if all the pre-linked shaders are valid.  (In fact,
such a bug was fixed by the previous commit.)

Bugs like this are easily masked by further optimization passes,
particularly inlining.  So to make them easier to track down, this
patch addes an IR validation step right after linking, and before
final optimization occurs.  The validation only occurs on debug
builds.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/linker.cpp