mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 10:20:09 +01:00
glsl2: Add declarations for temporaries to instruction stream
Temporary variables added for &&, ||, and ?: were not being added to the instruction stream. This resulted in either test failures or Valgrind being angry after the original IR tree was destroyed by talloc_free. The talloc_free caused the ir_variables to be destroyed even though they were still referenced.
This commit is contained in:
parent
288733f600
commit
0b9ae3befb
1 changed files with 3 additions and 0 deletions
|
|
@ -821,6 +821,7 @@ ast_expression::hir(exec_list *instructions,
|
|||
|
||||
ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type,
|
||||
"and_tmp");
|
||||
instructions->push_tail(tmp);
|
||||
|
||||
ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp);
|
||||
ir_assignment *const then_assign =
|
||||
|
|
@ -873,6 +874,7 @@ ast_expression::hir(exec_list *instructions,
|
|||
|
||||
ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type,
|
||||
"or_tmp");
|
||||
instructions->push_tail(tmp);
|
||||
|
||||
op[1] = this->subexpressions[1]->hir(&stmt->then_instructions, state);
|
||||
|
||||
|
|
@ -1048,6 +1050,7 @@ ast_expression::hir(exec_list *instructions,
|
|||
result = (cond_val->value.b[0]) ? then_val : else_val;
|
||||
} else {
|
||||
ir_variable *const tmp = new(ctx) ir_variable(type, "conditional_tmp");
|
||||
instructions->push_tail(tmp);
|
||||
|
||||
ir_if *const stmt = new(ctx) ir_if(op[0]);
|
||||
instructions->push_tail(stmt);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue