gallivm: use correct rounding for nearest wrap mode (in the aos int path)
authorRoland Scheidegger <sroland@vmware.com>
Sat, 15 Feb 2014 02:45:00 +0000 (03:45 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Fri, 14 Mar 2014 18:41:18 +0000 (19:41 +0100)
commit9954f0149799b726b8d57d723328ee5bec2b5070
tree6751265c6ba131fc8652ac7fcfeb825a614bbb55
parent88637e5764d475aa7ad140e20bdd12bcbe61cf18
gallivm: use correct rounding for nearest wrap mode (in the aos int path)

The previous code used coords which were calculated as
(int) (f_coord * tex_size * 256) >> 8.
This is not only unnecessarily complex but can give the wrong texel due to
rounding for negative coords (as an example, after denormalization coords
from -1.0 to 0.0 should give -1, but this will give -1 for numbers from
-1.0-1/256 - 0.0-1/256.
Instead, juse use ifloor, dropping the shift stuff.
Unfortunately, this will most likely be slower - with arch rounding available
it shouldn't be too bad (trades a int shift for a round but also saves an int
mul (which is shared by all coords) but otherwise it's a mess.
src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c