glsl/ir_builder: Add helpers for making if-statements

Add two overloaded variants of
    ir_if *if_tree()

The new functions allow one to chain together if-trees within a single C++
expression that resembles a real if-statement.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
This commit is contained in:
Chad Versace 2013-01-11 15:53:11 -08:00
parent a32bc53029
commit f859e4fbd1
2 changed files with 35 additions and 0 deletions

View file

@ -333,4 +333,33 @@ u2f(operand a)
return expr(ir_unop_u2f, a);
}
ir_if*
if_tree(operand condition,
ir_instruction *then_branch)
{
assert(then_branch != NULL);
void *mem_ctx = ralloc_parent(condition.val);
ir_if *result = new(mem_ctx) ir_if(condition.val);
result->then_instructions.push_tail(then_branch);
return result;
}
ir_if*
if_tree(operand condition,
ir_instruction *then_branch,
ir_instruction *else_branch)
{
assert(then_branch != NULL);
assert(else_branch != NULL);
void *mem_ctx = ralloc_parent(condition.val);
ir_if *result = new(mem_ctx) ir_if(condition.val);
result->then_instructions.push_tail(then_branch);
result->else_instructions.push_tail(else_branch);
return result;
}
} /* namespace ir_builder */

View file

@ -174,4 +174,10 @@ ir_swizzle *swizzle_xy(operand a);
ir_swizzle *swizzle_xyz(operand a);
ir_swizzle *swizzle_xyzw(operand a);
ir_if *if_tree(operand condition,
ir_instruction *then_branch);
ir_if *if_tree(operand condition,
ir_instruction *then_branch,
ir_instruction *else_branch);
} /* namespace ir_builder */