vc4: Add support for the TGSI TRUNC opcode.
authorEric Anholt <eric@anholt.net>
Tue, 5 Aug 2014 20:33:50 +0000 (13:33 -0700)
committerEric Anholt <eric@anholt.net>
Sat, 9 Aug 2014 01:59:47 +0000 (18:59 -0700)
v2: Rebase on helpers.

src/gallium/drivers/vc4/vc4_program.c
src/gallium/drivers/vc4/vc4_qir.c
src/gallium/drivers/vc4/vc4_qir.h
src/gallium/drivers/vc4/vc4_qpu_emit.c

index 3f52588ada88f0f63407cc6f1c9f28c0ce6553e7..307eda02cbed0c4f2059458c04f9d78fd292c32f 100644 (file)
@@ -292,6 +292,16 @@ tgsi_to_qir_pow(struct tgsi_to_qir *trans,
                                     qir_LOG2(c, src[0 * 4 + 0])));
 }
 
+static struct qreg
+tgsi_to_qir_trunc(struct tgsi_to_qir *trans,
+                struct tgsi_full_instruction *tgsi_inst,
+                enum qop op, struct qreg *src, int i)
+{
+        struct qcompile *c = trans->c;
+        return qir_ITOF(c, qir_FTOI(c, src[0 * 4 + i]));
+}
+
+
 static struct qreg
 tgsi_to_qir_dp(struct tgsi_to_qir *trans,
                struct tgsi_full_instruction *tgsi_inst,
@@ -413,6 +423,7 @@ emit_tgsi_instruction(struct tgsi_to_qir *trans,
                 [TGSI_OPCODE_LIT] = { 0, tgsi_to_qir_lit },
                 [TGSI_OPCODE_LRP] = { 0, tgsi_to_qir_lrp },
                 [TGSI_OPCODE_POW] = { 0, tgsi_to_qir_pow },
+                [TGSI_OPCODE_TRUNC] = { 0, tgsi_to_qir_trunc },
         };
         static int asdf = 0;
         uint32_t tgsi_op = tgsi_inst->Instruction.Opcode;
index 71f6e87578dab57d94d2d39b47cbdc61cb8fcfcc..495d16e2a256bcd176fa8b61c430e77557e248b9 100644 (file)
@@ -52,6 +52,7 @@ static const struct qir_op_info qir_op_info[] = {
         [QOP_CMP] = { "cmp", 1, 3 },
 
         [QOP_FTOI] = { "ftoi", 1, 1 },
+        [QOP_ITOF] = { "itof", 1, 1 },
         [QOP_RCP] = { "rcp", 1, 1 },
         [QOP_RSQ] = { "rsq", 1, 1 },
         [QOP_EXP2] = { "exp2", 1, 2 },
index 491748ff05d632d49a263bdf333a5f68b08249db..753f82e5021f6f019620263f17f8a76f78bb38b8 100644 (file)
@@ -59,6 +59,7 @@ enum qop {
         QOP_CMP,
 
         QOP_FTOI,
+        QOP_ITOF,
         QOP_RCP,
         QOP_RSQ,
         QOP_EXP2,
@@ -186,6 +187,7 @@ QIR_ALU2(FMAX)
 QIR_ALU2(FMINABS)
 QIR_ALU2(FMAXABS)
 QIR_ALU1(FTOI)
+QIR_ALU1(ITOF)
 QIR_ALU1(RCP)
 QIR_ALU1(RSQ)
 QIR_ALU1(EXP2)
index fff086e26e9408072354af6c470a42703630a713..847f9babb2526852694e443bcfb9d8992b5868bd 100644 (file)
@@ -249,6 +249,7 @@ vc4_generate_code(struct qcompile *c)
                         A(FMINABS),
                         A(FMAXABS),
                         A(FTOI),
+                        A(ITOF),
 
                         M(FMUL),
                 };