From: Ian Romanick Date: Tue, 26 Jul 2011 01:33:40 +0000 (-0700) Subject: glsl: Correctly return progress from lower_variable_index_to_cond_assign X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c1e591eed41b45c0fcf1dcac8b1b8aaeb6237a38;p=mesa.git 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 --- diff --git a/src/glsl/lower_variable_index_to_cond_assign.cpp b/src/glsl/lower_variable_index_to_cond_assign.cpp index 7792e6e624f..f8e4a1de428 100644 --- a/src/glsl/lower_variable_index_to_cond_assign.cpp +++ b/src/glsl/lower_variable_index_to_cond_assign.cpp @@ -525,10 +525,12 @@ lower_variable_index_to_cond_assign(exec_list *instructions, * matrix columns of an array of matrix), each pass will only lower one * level of indirection. */ + bool progress_ever = false; do { v.progress = false; visit_list_elements(&v, instructions); + progress_ever = v.progress || progress_ever; } while (v.progress); - return v.progress; + return progress_ever; }