ir_to_mesa: Add ir_unop_f2i -> OPCODE_TRUNC.
authorEric Anholt <eric@anholt.net>
Thu, 6 May 2010 22:52:05 +0000 (15:52 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 24 Jun 2010 22:05:20 +0000 (15:05 -0700)
ir_to_mesa.cpp
mesa_codegen.brg

index b28747e..77a8822 100644 (file)
@@ -365,9 +365,12 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
       this->result = this->create_tree(MB_TERM_rsq_vec4, ir, op[0], op[1]);
       break;
    case ir_unop_i2f:
-      /* Mesa IR lacks types, ints are stored as floats. */
+      /* Mesa IR lacks types, ints are stored as truncated floats. */
       this->result = op[0];
       break;
+   case ir_unop_f2i:
+      this->result = this->create_tree(MB_TERM_trunc_vec4, ir, op[0], NULL);
+      break;
    default:
       break;
    }
index e8d499f..5e7953b 100644 (file)
@@ -62,6 +62,7 @@
 %term sqrt_vec4
 %term rsq_vec4
 %term swizzle_vec4
+%term trunc_vec4
 
 # Each tree will produce stmt.  Currently, the only production for
 # stmt is from an assign rule -- every statement tree from
@@ -245,4 +246,11 @@ vec4: log2_vec4(vec4) 1
                                   tree->left->src_reg);
 }
 
+vec4: trunc_vec4(vec4) 1
+{
+       ir_to_mesa_emit_scalar_op1(tree, OPCODE_TRUNC,
+                                  tree->dst_reg,
+                                  tree->left->src_reg);
+}
+
 %%