mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 13:40:16 +01:00
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>
This commit is contained in:
parent
99fba503b1
commit
c1e591eed4
1 changed files with 3 additions and 1 deletions
|
|
@ -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
|
* matrix columns of an array of matrix), each pass will only lower one
|
||||||
* level of indirection.
|
* level of indirection.
|
||||||
*/
|
*/
|
||||||
|
bool progress_ever = false;
|
||||||
do {
|
do {
|
||||||
v.progress = false;
|
v.progress = false;
|
||||||
visit_list_elements(&v, instructions);
|
visit_list_elements(&v, instructions);
|
||||||
|
progress_ever = v.progress || progress_ever;
|
||||||
} while (v.progress);
|
} while (v.progress);
|
||||||
|
|
||||||
return v.progress;
|
return progress_ever;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue