glsl: Create an ir_builder helper for hand-generating IR.
authorEric Anholt <eric@anholt.net>
Mon, 19 Mar 2012 20:27:06 +0000 (13:27 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 13 Apr 2012 23:59:45 +0000 (16:59 -0700)
commit599aac95ff2149d881177ed75a48d97d3dcf47bd
tree818c68d35f968e443bf03e3ef73c24e7c706bfe9
parent0e8ad4cc749626eebbc7f916e551bbfd80b75023
glsl: Create an ir_builder helper for hand-generating IR.

The C++ constructors with placement new, while functional, are
extremely verbose, leading to generation of simple GLSL IR expressions
like (a * b + c * d) expanding to many lines of code and using lots of
temporary variables.  By creating a new ir_builder.h that puts simple
generators in our namespace and taking advantage of ralloc_parent(),
we can generate much more compact code, at a minor runtime cost.

v2: Replace ir_instruction usage with just ir_rvalue.
v3: Drop remaining missed as_rvalue() in v2.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/Makefile.sources
src/glsl/ir_builder.cpp [new file with mode: 0644]
src/glsl/ir_builder.h [new file with mode: 0644]
src/mesa/main/ff_fragment_shader.cpp