gallivm: fix gather implementation a bit
authorRoland Scheidegger <sroland@vmware.com>
Sat, 9 Sep 2017 00:58:21 +0000 (02:58 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Sat, 9 Sep 2017 01:06:10 +0000 (03:06 +0200)
commitdcf2feadc336a1d81bf1b03d0b9c6dd68ea61441
tree59bece628754e812638ba754c1d2cb5836570980
parent30682fba77ffe8e3c6b50f8dfa3633d0cd90cbc3
gallivm: fix gather implementation a bit

gather is defined in terms of bilinear filtering, just without the filtering
part. However, there's actually some subtle differences required in our
implementation, because we use some tricks to simplify coord wrapping for the
two coords per direction.
For bilinear filtering, we don't care if we end up with an incorrect
texel, as long as the filter weight is 0.0 for it. Likewise, the order of
the texels doesn't actually matter (as long as they still have the correct
filter weight).
But for gather, these tricks lead to incorrect results.
Fix this for CLAMP_TO_EDGE, and add some comments to the other wrap functions
which look broken (the 3 mirror_clamp plus mirror_repeat) (too complex to fix
right now, and noone really seems to care...).

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