summaryrefslogtreecommitdiffstats
path: root/src/glsl/ir_constant_folding.cpp
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2010-08-31 14:44:13 -0700
committerIan Romanick <[email protected]>2010-08-31 14:44:13 -0700
commita6c3cd5ca6822da2ec6e869c7bc2b8ac64c177f2 (patch)
tree6a9eee74ff5b3fc1cd3eaa261ebc9f411430b01e /src/glsl/ir_constant_folding.cpp
parent99f3c9caa39fbe9dfa7561c919202395720e9472 (diff)
glsl2: Write vector constructor constants in a single assignment
Make two passes over the constructor parameters. Write all of the constants in a single write, then write the non-constants one at a time. This causes the fragment shader varying float g; void main() { gl_FragColor = vec4(0.0, g, 0.0, 1.0); } to generate (function main (signature void (parameters ) ( (declare (temporary ) vec4 vec_ctor@0x8580058) (assign (constant bool (1)) (xzw) (var_ref vec_ctor@0x8580058) (constant vec4 (0.000000 0.000000 0.000000 1.000000)) ) (assign (constant bool (1)) (y) (var_ref vec_ctor@0x8580058) (swiz xxxx (var_ref g@0x8580218) )) (assign (constant bool (1)) (xyzw) (var_ref gl_FragColor@0x84d32a0) (var_ref vec_ctor@0x8580058) ) )) ) instead of (function main (signature void (parameters ) ( (declare (temporary ) vec4 vec_ctor@0x8580058) (assign (constant bool (1)) (x) (var_ref vec_ctor@0x8580058) (constant vec4 (0.000000 0.000000 0.000000 1.000000)) ) (assign (constant bool (1)) (y) (var_ref vec_ctor@0x8580058) (swiz xxxx (var_ref g@0x8580218) )) (assign (constant bool (1)) (z) (var_ref vec_ctor@0x8580058) (constant vec4 (0.000000 0.000000 0.000000 1.000000)) ) (assign (constant bool (1)) (w) (var_ref vec_ctor@0x8580058) (constant vec4 (0.000000 0.000000 0.000000 1.000000)) ) (assign (constant bool (1)) (xyzw) (var_ref gl_FragColor@0x84d32a0) (var_ref vec_ctor@0x8580058) ) )) ) A similar optimization could be done for matrix constructors, but it is a little more complicate there.
Diffstat (limited to 'src/glsl/ir_constant_folding.cpp')
0 files changed, 0 insertions, 0 deletions