From c45b615a379e5b9cbcf951f9d738a1be77a5964b Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 19 May 2010 15:54:28 -0700 Subject: ir_to_mesa: Implement neg expression. --- ir_to_mesa.cpp | 7 ++++++- ir_to_mesa.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ir_to_mesa.cpp b/ir_to_mesa.cpp index 205e2fc8c9..722e93a797 100644 --- a/ir_to_mesa.cpp +++ b/ir_to_mesa.cpp @@ -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; diff --git a/ir_to_mesa.h b/ir_to_mesa.h index 515feb19a3..0535bc08a2 100644 --- a/ir_to_mesa.h +++ b/ir_to_mesa.h @@ -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; -- cgit v1.2.3