diff options
| -rw-r--r-- | ir_to_mesa.cpp | 31 | ||||
| -rw-r--r-- | ir_to_mesa.h | 1 | 
2 files changed, 32 insertions, 0 deletions
| diff --git a/ir_to_mesa.cpp b/ir_to_mesa.cpp index 487e24986f..8858d4be68 100644 --- a/ir_to_mesa.cpp +++ b/ir_to_mesa.cpp @@ -195,6 +195,27 @@ ir_to_mesa_visitor::create_tree(int op,     return tree;  } +struct mbtree * +ir_to_mesa_visitor::create_tree_for_float(ir_instruction *ir, float val) +{ +   struct mbtree *tree = (struct mbtree *)calloc(sizeof(struct mbtree), 1); + +   tree = this->create_tree(MB_TERM_reference_vec4, ir, NULL, NULL); + +   /* FINISHME: This will end up being _mesa_add_unnamed_constant, +    * which handles sharing values and sharing channels of vec4 +    * constants for small values. +    */ +   /* FINISHME: Do something with the constant values for now. +    */ +   (void)val; +   ir_to_mesa_set_tree_reg(tree, PROGRAM_CONSTANT, this->next_constant++); +   tree->src_reg.swizzle = SWIZZLE_NOOP; + +   this->result = tree; +   return tree; +} +  /**   * In the initial pass of codegen, we assign temporary numbers to   * intermediate results.  (not SSA -- variable assignments will reuse @@ -344,6 +365,11 @@ ir_to_mesa_visitor::visit(ir_expression *ir)     this->result = NULL;     switch (ir->operation) { +   case ir_unop_logic_not: +      this->result = this->create_tree_for_float(ir, 0.0); +      this->result = this->create_tree(MB_TERM_seq_vec4_vec4, ir, +				       op[0], this->result); +      break;     case ir_unop_exp:        this->result = this->create_tree(MB_TERM_exp_vec4, ir, op[0], NULL);        break; @@ -416,6 +442,11 @@ ir_to_mesa_visitor::visit(ir_expression *ir)     case ir_unop_f2i:        this->result = this->create_tree(MB_TERM_trunc_vec4, ir, op[0], NULL);        break; +   case ir_unop_f2b: +      this->result = this->create_tree_for_float(ir, 0.0); +      this->result = this->create_tree(MB_TERM_sne_vec4_vec4, ir, +				       op[0], this->result); +      break;     default:        break;     } diff --git a/ir_to_mesa.h b/ir_to_mesa.h index 3aa88bcdc4..43ddd5fe51 100644 --- a/ir_to_mesa.h +++ b/ir_to_mesa.h @@ -108,6 +108,7 @@ public:  			      ir_instruction *ir,  			      struct mbtree *left,  			      struct mbtree *right); +   struct mbtree *create_tree_for_float(ir_instruction *ir, float val);     /**      * \name Visit methods | 
