st/nine: Clamp RCP when 0*inf!=0
authorAxel Davy <davyaxel0@gmail.com>
Fri, 27 Jan 2017 22:13:29 +0000 (23:13 +0100)
committerAxel Davy <davyaxel0@gmail.com>
Tue, 25 Sep 2018 20:05:23 +0000 (22:05 +0200)
commit7ee5e5e239a5528c6eed2d1bb47b48434de74a6e
tree56db9a65c6ffe93a5fa70ca1c0322b15bf495ea1
parent1f3fe4aaebea5e2f0a1c35c9731372502e4b34cd
st/nine: Clamp RCP when 0*inf!=0

Tests done on several devices of all 3 vendors and
of different generations showed that there are several
ways of handling infs and NaN for d3d9.

Tests showed Intel on windows does always clamp
RCP, RSQ and LOG (thus preventing inf/nan generation),
for all shader versions (some vendor behaviours vary
with shader versions).
Doing this in nine avoids 0*inf issues for drivers
that can't generate 0*inf=0 (which is controled by
TGSI's MUL_ZERO_WINS).

For now clamp for all drivers. An ulterior optimization
would be to avoid clamping for drivers with MUL_ZERO_WINS
for the specific shader versions where NV or AMD don't
clamp.

LOG and RSQ being already clamped, this patch only
clamps RCP.

Fixes: https://github.com/iXit/Mesa-3D/issues/316
Signed-off-by: Axel Davy <davyaxel0@gmail.com>
CC: <mesa-stable@lists.freedesktop.org>
src/gallium/state_trackers/nine/nine_shader.c