gallivm: make sampling more robust against bogus coordinates
authorRoland Scheidegger <sroland@vmware.com>
Tue, 26 Apr 2016 02:53:01 +0000 (04:53 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Tue, 26 Apr 2016 02:55:37 +0000 (04:55 +0200)
commitbd07e20d208268382a34dca23ff71a8192bb1525
treedff2bbedc39d7187f562c8971449c56085cbef1f
parentd8edc3e97cfc9ff36c5f6009dc98bc78e2f76389
gallivm: make sampling more robust against bogus coordinates

Some cases (especially these using fract for coord wrapping) did not handle
NaNs (or Infs) correctly - the following code assumed the fract result
could not be outside [0,1], but if the input is a NaN (or +-Inf) the fract
result was NaN - which then could produce out-of-bound offsets.

(Note that the explicit NaN behavior changes for min/max on x86 sse don't
result in actual changes in the generated jit code, but may on other
architectures. Found by looking through all the wrap functions.)

This fixes https://bugs.freedesktop.org/show_bug.cgi?id=94955

No piglit changes.

(v2: fix min/max typo in coord_mirror, add comment)

Cc: "11.1 11.2" <mesa-stable@lists.freedesktop.org>
Tested-by: Bruce Cherniak <bruce.cherniak@intel.com>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_arit.c
src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c
src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c