glsl: Correctly return progress from lower_variable_index_to_cond_assign
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 26 Jul 2011 01:33:40 +0000 (18:33 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 26 Jul 2011 01:45:46 +0000 (18:45 -0700)
commitc1e591eed41b45c0fcf1dcac8b1b8aaeb6237a38
tree9cae74ae8285bb2d64689294ab33e3de9956ef63
parent99fba503b112a69a2fc14b7dd40684d9a6a1972a
glsl: Correctly return progress from lower_variable_index_to_cond_assign

lower_variable_index_to_cond_assign runs until it can't make any more
progress.  It then returns the result of the last pass which will
always be false.  This caused the lowering loop in
_mesa_ir_link_shader to end before doing one last round of
lower_if_to_cond_assign.  This caused several if-statements (resulting
from lower_variable_index_to_cond_assign) to be left in the IR.

In addition to this change, lower_variable_index_to_cond_assign should
take a flag indicating whether or not it should even generate
if-statements.  This is easily controlled by
switch_generator::linear_sequence_max_length.  This would generate
much better code on architectures without any flow contol.

Fixes i915 piglit regressions glsl-texcoord-array and
glsl-fs-vec4-indexing-temp-src.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/glsl/lower_variable_index_to_cond_assign.cpp