OSDN Git Service

nv50/ir: use round toward 0 when converting doubles to integers
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 6 Jun 2016 19:12:15 +0000 (21:12 +0200)
committerEmil Velikov <emil.l.velikov@gmail.com>
Tue, 14 Jun 2016 14:48:38 +0000 (15:48 +0100)
Like floats, we should use the round toward 0 mode instead of the
nearest one (which is the default) for doubles to integers.

This fixes all arb_gpu_shader_fp64 piglits which convert doubles to
integers (16 tests).

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: "11.2 12.0" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 08ddfe7b2fa9f577ba00c8c05c5604460942f5a8)

src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp

index 1ebcd25..382fdb1 100644 (file)
@@ -3597,7 +3597,9 @@ Converter::handleInstruction(const struct tgsi_full_instruction *insn)
          src0 = fetchSrc(0, pos);
          src1 = fetchSrc(0, pos + 1);
          mkOp2(OP_MERGE, TYPE_U64, dreg, src0, src1);
-         mkCvt(OP_CVT, dstTy, dst0[c], srcTy, dreg);
+         Instruction *cvt = mkCvt(OP_CVT, dstTy, dst0[c], srcTy, dreg);
+         if (!isFloatType(dstTy))
+            cvt->rnd = ROUND_Z;
          pos += 2;
       }
       break;