nv50: handle CEIL and TRUNC opcodes
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Thu, 10 Sep 2009 20:42:57 +0000 (22:42 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Tue, 15 Sep 2009 10:13:23 +0000 (12:13 +0200)
src/gallium/drivers/nv50/nv50_program.c

index 14df45a..6f0261e 100644 (file)
@@ -1499,6 +1499,14 @@ nv50_program_tx_insn(struct nv50_pc *pc,
                        emit_add(pc, dst[c], src[0][c], src[1][c]);
                }
                break;
+       case TGSI_OPCODE_CEIL:
+               for (c = 0; c < 4; c++) {
+                       if (!(mask & (1 << c)))
+                               continue;
+                       emit_cvt(pc, dst[c], src[0][c], -1,
+                                CVTOP_CEIL, CVT_F32_F32);
+               }
+               break;
        case TGSI_OPCODE_COS:
                if (mask & 8) {
                        emit_precossin(pc, temp, src[0][3]);
@@ -1678,6 +1686,14 @@ nv50_program_tx_insn(struct nv50_pc *pc,
                emit_tex(pc, dst, mask, src[0], unit,
                         inst->InstructionExtTexture.Texture, TRUE);
                break;
+       case TGSI_OPCODE_TRUNC:
+               for (c = 0; c < 4; c++) {
+                       if (!(mask & (1 << c)))
+                               continue;
+                       emit_cvt(pc, dst[c], src[0][c], -1,
+                                CVTOP_TRUNC, CVT_F32_F32);
+               }
+               break;
        case TGSI_OPCODE_XPD:
                temp = temp_temp(pc);
                if (mask & (1 << 0)) {