ir_to_mesa: Add logic_or and logic_and to get CorrectFunction1.vert working.
authorEric Anholt <eric@anholt.net>
Fri, 7 May 2010 19:20:58 +0000 (12:20 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 24 Jun 2010 22:05:20 +0000 (15:05 -0700)
ir_to_mesa.cpp

index 3ae848a21bcce82d8830a80f5a6b1968c4242758..f45421057b22fc4d4e1dd18f3642145e5aa62b4c 100644 (file)
@@ -415,6 +415,19 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
       this->result = this->create_tree(MB_TERM_sne_vec4_vec4, ir, op[0], op[1]);
       break;
 
+   case ir_binop_logic_or:
+      /* This could be a saturated add. */
+      this->result = this->create_tree(MB_TERM_add_vec4_vec4, ir, op[0], op[1]);
+      this->result = this->create_tree(MB_TERM_sne_vec4_vec4, ir,
+                                      this->create_tree_for_float(ir, 0.0),
+                                      this->result);
+      break;
+
+   case ir_binop_logic_and:
+      /* the bool args are stored as float 0.0 or 1.0, so "mul" gives us "and". */
+      this->result = this->create_tree(MB_TERM_mul_vec4_vec4, ir, op[0], op[1]);
+      break;
+
    case ir_binop_dot:
       if (ir->operands[0]->type == vec4_type) {
         assert(ir->operands[1]->type == vec4_type);