softpipe: fix seamless cube filtering
authorRoland Scheidegger <sroland@vmware.com>
Sat, 12 Oct 2013 01:09:27 +0000 (03:09 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Sat, 12 Oct 2013 02:05:57 +0000 (04:05 +0200)
commit7681beedd19cf437252fbc1041b19328ad773ea5
treef239fae1017131cdc99fd28257ada51e295c4b70
parent75f1fea14f524ef05e980d825fda3ae226ae2ffe
softpipe: fix seamless cube filtering

Fix coord wrapping (and face selection too) in case of edges.
Unfortunately, the coord wrapping is way more complicated than what
the code did, as it depends on the face and the direction where the
texel falls off the face (the logic needed to get this right in fact
seems utterly ridiculous).
Also fix a bug in (y direction under/overflow) face selection.
And get rid of complicated cube corner handling. Just like edge case,
the coord wrapping was wrong and it seems very difficult to fix.
I'm near certain it can't always work anyway (though ordinary seamless
filtering on edge has actually a similar problem but not as severe)
because we don't have per-pixel face, hence could have multiple corner
texels which would make it very difficult to average the remaining texels
correctly. Hence simply pick a texel which would only have fallen off one
edge but not both instead, which is not quite accurate but actually I think
should be enough to meet OpenGL (but not d3d10) requirements.

v2: small fixes suggested by Brian, add some comments.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/drivers/softpipe/sp_tex_sample.c