ir_to_mesa: Implement neg expression.
authorEric Anholt <eric@anholt.net>
Wed, 19 May 2010 22:54:28 +0000 (15:54 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 24 Jun 2010 22:05:20 +0000 (15:05 -0700)
ir_to_mesa.cpp
ir_to_mesa.h

index 205e2fc8c9557b30312c0b87666efceed70a614c..722e93a7977879cee04f96219fd406d1492531a3 100644 (file)
@@ -47,7 +47,7 @@ extern "C" {
 }
 
 ir_to_mesa_src_reg ir_to_mesa_undef = {
-   PROGRAM_UNDEFINED, 0, SWIZZLE_NOOP, false,
+   PROGRAM_UNDEFINED, 0, SWIZZLE_NOOP, NEGATE_NONE, false,
 };
 
 ir_to_mesa_dst_reg ir_to_mesa_undef_dst = {
@@ -184,6 +184,7 @@ ir_to_mesa_visitor::create_tree(int op,
    tree->right = right;
    tree->v = this;
    tree->src_reg.swizzle = SWIZZLE_XYZW;
+   tree->src_reg.negate = 0;
    tree->dst_reg.writemask = WRITEMASK_XYZW;
    ir_to_mesa_set_tree_reg(tree, PROGRAM_UNDEFINED, 0);
    tree->ir = ir;
@@ -418,6 +419,10 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
       this->result = this->create_tree(MB_TERM_seq_vec4_vec4, ir,
                                       op[0], this->result);
       break;
+   case ir_unop_neg:
+      op[0]->src_reg.negate = ~op[0]->src_reg.negate;
+      this->result = op[0];
+      break;
    case ir_unop_exp:
       this->result = this->create_tree(MB_TERM_exp_vec4, ir, op[0], NULL);
       break;
index 515feb19a3822f3d13b4cb8394073622de87c81b..0535bc08a2a24ec03eb484b4140d858b454b2ecc 100644 (file)
@@ -40,6 +40,7 @@ typedef struct ir_to_mesa_src_reg {
    int file; /**< PROGRAM_* from Mesa */
    int index; /**< temporary index, VERT_ATTRIB_*, FRAG_ATTRIB_*, etc. */
    int swizzle; /**< SWIZZLE_XYZWONEZERO swizzles from Mesa. */
+   int negate; /**< NEGATE_XYZW mask from mesa */
    bool reladdr; /**< Register index should be offset by address reg. */
 } ir_to_mesa_src_reg;