Floating point division shouldn't signal on division by zero, it should just return an appropriately-signed infinity, which seems like a sane thing to do, and way better than just returning 0. So we shouldn't do this with fdiv. I guess 0 is as good a result as any for the integer division, though -- there aren't really any great choices.
On Tue, Feb 27, 2018 at 10:07 PM, Timothy Arceri <[email protected]> wrote: > From the GLSL 4.60 spec Section 5.9 (Expressions): > > "Dividing by zero does not cause an exception but does result in > an unspecified value." > > Fixes: 89285e4d47a6 "nir: add new constant folding infrastructure" > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105271 > --- > src/compiler/nir/nir_opcodes.py | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/src/compiler/nir/nir_opcodes.py b/src/compiler/nir/nir_opcodes.py > index 278562b2bd..dcc5b07d05 100644 > --- a/src/compiler/nir/nir_opcodes.py > +++ b/src/compiler/nir/nir_opcodes.py > @@ -403,9 +403,9 @@ binop("imul_high", tint32, commutative, > binop("umul_high", tuint32, commutative, > "(uint32_t)(((uint64_t) src0 * (uint64_t) src1) >> 32)") > > -binop("fdiv", tfloat, "", "src0 / src1") > -binop("idiv", tint, "", "src0 / src1") > -binop("udiv", tuint, "", "src0 / src1") > +binop("fdiv", tfloat, "", "src1 == 0 ? 0 : (src0 / src1)") > +binop("idiv", tint, "", "src1 == 0 ? 0 : (src0 / src1)") > +binop("udiv", tuint, "", "src1 == 0 ? 0 : (src0 / src1)") > > # returns a boolean representing the carry resulting from the addition of > # the two unsigned arguments. > -- > 2.14.3 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
