gallium: Add TGSI_OPCODE_F2U to gallivm backend.
authorPaul Berry <stereotype441@gmail.com>
Wed, 13 Jun 2012 22:46:27 +0000 (15:46 -0700)
committerPaul Berry <stereotype441@gmail.com>
Fri, 15 Jun 2012 15:58:55 +0000 (08:58 -0700)
Note: for the moment TGSI_OPCODE_F2U is implemented using
lp_build_itrunc() (the same function used to implement
TGSI_OPCODE_F2I).  In the long run, we should create an
lp_build_utrunc() function to do the proper conversion.  But this
should allow us to limp along with mostly correct behaviour for now.

src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c

index e0a518092190ae0564524d8ae4f2f57c1ec2618c..cbc59459d44e34be852eb57b785a30a99403b863 100644 (file)
@@ -984,6 +984,18 @@ f2i_emit_cpu(
                                                         emit_data->args[0]);
 }
 
+/* TGSI_OPCODE_F2U (CPU Only) */
+static void
+f2u_emit_cpu(
+   const struct lp_build_tgsi_action * action,
+   struct lp_build_tgsi_context * bld_base,
+   struct lp_build_emit_data * emit_data)
+{
+   /* FIXME: implement and use lp_build_utrunc() */
+   emit_data->output[emit_data->chan] = lp_build_itrunc(&bld_base->base,
+                                                        emit_data->args[0]);
+}
+
 /* TGSI_OPCODE_FLR (CPU Only) */
 
 static void
@@ -1561,6 +1573,7 @@ lp_set_default_actions_cpu(
    bld_base->op_actions[TGSI_OPCODE_EX2].emit = ex2_emit_cpu;
    bld_base->op_actions[TGSI_OPCODE_EXP].emit = exp_emit_cpu;
    bld_base->op_actions[TGSI_OPCODE_F2I].emit = f2i_emit_cpu;
+   bld_base->op_actions[TGSI_OPCODE_F2U].emit = f2u_emit_cpu;
    bld_base->op_actions[TGSI_OPCODE_FLR].emit = flr_emit_cpu;
 
    bld_base->op_actions[TGSI_OPCODE_I2F].emit = i2f_emit_cpu;