freedreno/ir3: fix FSLT/etc handling to return 0/-1 instead of 0/1.0
authorIlia Mirkin <imirkin@alum.mit.edu>
Wed, 10 Sep 2014 02:52:52 +0000 (22:52 -0400)
committerRob Clark <robclark@freedesktop.org>
Fri, 12 Sep 2014 20:25:47 +0000 (16:25 -0400)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/ir3/ir3_compiler.c

index 25211feb02478b62406c551841d8e2c7200981a7..48cdcb774e0af50070397138a6345090cd84d7b8 100644 (file)
@@ -1411,21 +1411,25 @@ trans_cmp(const struct instr_translater *t,
 
        switch (t->tgsi_opc) {
        case TGSI_OPCODE_SEQ:
-       case TGSI_OPCODE_FSEQ:
        case TGSI_OPCODE_SGE:
-       case TGSI_OPCODE_FSGE:
        case TGSI_OPCODE_SLE:
        case TGSI_OPCODE_SNE:
-       case TGSI_OPCODE_FSNE:
        case TGSI_OPCODE_SGT:
        case TGSI_OPCODE_SLT:
-       case TGSI_OPCODE_FSLT:
                /* cov.u16f16 dst, tmp0 */
                instr = instr_create(ctx, 1, 0);
                instr->cat1.src_type = get_utype(ctx);
                instr->cat1.dst_type = get_ftype(ctx);
                vectorize(ctx, instr, dst, 1, tmp_src, 0);
                break;
+       case TGSI_OPCODE_FSEQ:
+       case TGSI_OPCODE_FSGE:
+       case TGSI_OPCODE_FSNE:
+       case TGSI_OPCODE_FSLT:
+               /* absneg.s dst, (neg)tmp0 */
+               instr = instr_create(ctx, 2, OPC_ABSNEG_S);
+               vectorize(ctx, instr, dst, 1, tmp_src, IR3_REG_NEGATE);
+               break;
        case TGSI_OPCODE_CMP:
                a1 = &inst->Src[1].Register;
                a2 = &inst->Src[2].Register;