diff options
author | Eric Anholt <eric@anholt.net> | 2010-04-02 02:13:43 -1000 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-04-02 11:22:41 -0700 |
commit | dc58b3f8ccd817fdee390a3df5b8e0fb29d5397c (patch) | |
tree | 99a3fdc0b09dff4c924b3b587eae0b58b7f20ef5 | |
parent | 106d122318b94188b0e00115cd5242e0e679f807 (diff) |
Add conversion of bool to float as an IR operation to match int to float.
-rw-r--r-- | ast_function.cpp | 2 | ||||
-rw-r--r-- | ast_to_hir.cpp | 3 | ||||
-rw-r--r-- | ir.cpp | 2 | ||||
-rw-r--r-- | ir.h | 2 | ||||
-rw-r--r-- | ir_print_visitor.cpp | 2 |
5 files changed, 9 insertions, 2 deletions
diff --git a/ast_function.cpp b/ast_function.cpp index 91d4f15a3b..2ca8976d50 100644 --- a/ast_function.cpp +++ b/ast_function.cpp @@ -139,7 +139,7 @@ convert_component(ir_rvalue *src, const glsl_type *desired_type) case GLSL_TYPE_INT: return new ir_expression(ir_unop_i2f, desired_type, src, NULL); case GLSL_TYPE_BOOL: - assert(!"FINISHME: Convert bool to float."); + return new ir_expression(ir_unop_b2f, desired_type, src, NULL); } break; case GLSL_TYPE_BOOL: { diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp index 5e0dcaae22..dd84674004 100644 --- a/ast_to_hir.cpp +++ b/ast_to_hir.cpp @@ -120,7 +120,8 @@ apply_implicit_conversion(const glsl_type *to, ir_rvalue * &from, from = new ir_expression(ir_unop_u2f, to, from, NULL); break; case GLSL_TYPE_BOOL: - assert(!"FINISHME: Convert bool to float."); + from = new ir_expression(ir_unop_b2f, to, from, NULL); + break; default: assert(0); } @@ -64,6 +64,8 @@ ir_expression::get_num_operands(void) 1, /* ir_unop_log2 */ 1, /* ir_unop_f2i */ 1, /* ir_unop_i2f */ + 1, /* ir_unop_f2b */ + 1, /* ir_unop_b2f */ 1, /* ir_unop_u2f */ 1, /* ir_unop_trunc */ @@ -316,6 +316,8 @@ enum ir_expression_operation { ir_unop_log2, ir_unop_f2i, /**< Float-to-integer conversion. */ ir_unop_i2f, /**< Integer-to-float conversion. */ + ir_unop_f2b, /**< Float-to-boolean conversion */ + ir_unop_b2f, /**< Boolean-to-float conversion */ ir_unop_u2f, /**< Unsigned-to-float conversion. */ /** diff --git a/ir_print_visitor.cpp b/ir_print_visitor.cpp index b207262044..e3aeb69a1e 100644 --- a/ir_print_visitor.cpp +++ b/ir_print_visitor.cpp @@ -100,6 +100,8 @@ void ir_print_visitor::visit(ir_expression *ir) "log2", "f2i", "i2f", + "f2b", + "b2f", "u2f", "trunc", "ceil", |