gallivm: fix texture wrapping for texture gather for mirror modes
authorRoland Scheidegger <sroland@vmware.com>
Tue, 12 Dec 2017 03:22:28 +0000 (04:22 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Tue, 12 Dec 2017 03:23:02 +0000 (04:23 +0100)
commit84c363fb09167bc45aeba95423b20bee7293f44a
tree238e528af552b76379738dae1964986d6c680074
parent24f019fd6911c360f32ebdb474375212706fff62
gallivm: fix texture wrapping for texture gather for mirror modes

Care must be taken that all coords end up correct, the tests are very
sensitive that everything is correctly rounded. This doesn't matter
for bilinear filter (since picking a wrong texel with weight zero is
ok), and we could also switch the per-sample coords mistakenly.
While here, also optimize the coord_mirror helper a bit (we can do the
mirroring directly by exploiting float rounding, no need for fixing up
odd/even manually).
I did not touch the mirror_clamp and mirror_clamp_to_border modes.
In contrast to mirror_clamp_to_edge and mirror_repeat these are legacy
modes. They are specified against old gl rules, which actually does
the mirroring not per sample (so you get swapped order if the coord
is in the mirrored section). I think the idea though is that they should
follow the respecified mirror_clamp_to_edge rules so the order would be
correct.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c