nv50/ir: disable mul+add to mad for precise instructions

fixes
    missrendering in TombRaider
    KHR-GL44.gpu_shader5.precise_qualifier
    KHR-GL45.gpu_shader5.precise_qualifier

v4: disable opt only for MAD, it's fine for SAD

Signed-off-by: Karol Herbst <karolherbst@gmail.com>
Reviewed-by: Pierre Moreau <pierre.morrow@free.fr>
This commit is contained in:
Karol Herbst 2017-06-23 20:30:29 +02:00 committed by Ilia Mirkin
parent f9bfc93014
commit f98a221f2d

View file

@ -1677,7 +1677,8 @@ AlgebraicOpt::handleADD(Instruction *add)
return false;
bool changed = false;
if (!changed && prog->getTarget()->isOpSupported(OP_MAD, add->dType))
// we can't optimize to MAD if the add is precise
if (!add->precise && prog->getTarget()->isOpSupported(OP_MAD, add->dType))
changed = tryADDToMADOrSAD(add, OP_MAD);
if (!changed && prog->getTarget()->isOpSupported(OP_SAD, add->dType))
changed = tryADDToMADOrSAD(add, OP_SAD);
@ -1713,7 +1714,7 @@ AlgebraicOpt::tryADDToMADOrSAD(Instruction *add, operation toOp)
return false;
if (src->getInsn()->saturate || src->getInsn()->postFactor ||
src->getInsn()->dnz)
src->getInsn()->dnz || src->getInsn()->precise)
return false;
if (toOp == OP_SAD) {