gallivm: implement fully accurate corner filtering for seamless cube maps
authorRoland Scheidegger <sroland@vmware.com>
Wed, 23 Oct 2013 17:13:21 +0000 (19:13 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Thu, 24 Oct 2013 23:29:14 +0000 (01:29 +0200)
commit2b2fc03beb6ff6a5e87f16afbd687ac9addc3824
tree045d467f2b73a5e53c8ce4991dabea18921e1e3b
parentdde9260fdc1fb6792df24a4790ea1c255ad9284a
gallivm: implement fully accurate corner filtering for seamless cube maps

d3d10 requires that cube corners are filtered with accurate weights (that
is, the weight of the non-existing corner texel should be evenly distributed
to the other 3 texels). OpenGL does not require this (but recommends it).
This requires us to use different filtering code, since we need per-texel
weights which our 2d lerp doesn't (and can't) do. And of course the (now
per element) weights need to be adjusted too for it to work.
Invoke the new filtering code whenever there's an edge to keep things simpler,
as it will work for edges too not just corners but of course it's only needed
with corners.
More ugly code for not much gain but at least a hacked up cubemap demo
shows very nice corners now... Not sure yet if and how this should be
configurable...

v2: incorporate feedback from Jose, only use special corner filtering code
when there's a corner not when there's only an edge (as corner filtering code
is slower, though a perf difference was only measureable when always
forcing edge code). Plus some minor style fixes.

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