mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
glsl: Avoid making a temporary for lower_mat_op_to_vec if not needed.
Our copy propagation tends to be bad at handling the later array accesses of the matrix argument we moved to a temporary. Generally we don't need to move it to a temporary, though, so this avoids needing more copy propagation complexity. Reduces instruction count of some Unigine Tropics and Sanctuary fragment shaders that do operations on uniform matrix arrays by 5.9% on gen6. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
8fad8637ef
commit
487dd96c27
1 changed files with 11 additions and 0 deletions
|
|
@ -329,7 +329,18 @@ ir_mat_op_to_vec_visitor::visit_leave(ir_assignment *orig_assign)
|
|||
*/
|
||||
for (i = 0; i < orig_expr->get_num_operands(); i++) {
|
||||
ir_assignment *assign;
|
||||
ir_dereference *deref = orig_expr->operands[i]->as_dereference();
|
||||
|
||||
/* Avoid making a temporary if we don't need to to avoid aliasing. */
|
||||
if (deref &&
|
||||
deref->variable_referenced() != result->variable_referenced()) {
|
||||
op[i] = deref;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Otherwise, store the operand in a temporary generally if it's
|
||||
* not a dereference.
|
||||
*/
|
||||
ir_variable *var = new(mem_ctx) ir_variable(orig_expr->operands[i]->type,
|
||||
"mat_op_to_vec",
|
||||
ir_var_temporary);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue