mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-15 16:28:04 +02:00
glsl: When lowering non-constant array indexing, respect existing conditions
If the non-constant index was in the LHS of an assignment, any
existing condititon on that assignment would be lost.
Fixes i965 piglit:
fs-temp-array-mat[234]-col-row-wr
fs-temp-array-mat[234]-index-col-row-wr
fs-temp-array-mat[234]-index-col-wr
fs-temp-array-mat[234]-index-row-wr
vs-varying-array-mat[234]-index-col-wr
Reviewed-by: Eric Anholt <eric@anholt.net>
(cherry picked from commit 5f83dfe5b7)
This commit is contained in:
parent
977db7cc65
commit
aad12d15bb
1 changed files with 18 additions and 3 deletions
|
|
@ -417,9 +417,24 @@ public:
|
|||
|
||||
switch_generator sg(ag, index, 4, 4);
|
||||
|
||||
exec_list list;
|
||||
sg.generate(0, length, &list);
|
||||
base_ir->insert_before(&list);
|
||||
/* If the original assignment has a condition, respect that original
|
||||
* condition! This is acomplished by wrapping the new conditional
|
||||
* assignments in an if-statement that uses the original condition.
|
||||
*/
|
||||
if ((orig_assign != NULL) && (orig_assign->condition != NULL)) {
|
||||
/* No need to clone the condition because the IR that it hangs on is
|
||||
* going to be removed from the instruction sequence.
|
||||
*/
|
||||
ir_if *if_stmt = new(mem_ctx) ir_if(orig_assign->condition);
|
||||
|
||||
sg.generate(0, length, &if_stmt->then_instructions);
|
||||
base_ir->insert_before(if_stmt);
|
||||
} else {
|
||||
exec_list list;
|
||||
|
||||
sg.generate(0, length, &list);
|
||||
base_ir->insert_before(&list);
|
||||
}
|
||||
|
||||
return var;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue