gallivm: implement accurate corner behavior for textureGather with cube maps
authorRoland Scheidegger <sroland@vmware.com>
Wed, 13 Dec 2017 02:33:07 +0000 (03:33 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Thu, 14 Dec 2017 21:59:55 +0000 (22:59 +0100)
commit1ae48963f7648bb4e98faacfa3dd63906b26a518
treeaf63fbb0a206fb87e836131d521fdd5e61c630ef
parenta485ad0bcdcab865e14a54133a271198c86e41ab
gallivm: implement accurate corner behavior for textureGather with cube maps

The spec says the missing texel (when we wrap around both x and y axis)
should be synthesized as the average of the 3 other texels. For bilinear
filtering however we instead adjusted the filter weights (because, while
the complexity looks similar, there would be 4 times as many color values
to fix up than weights). Obviously this could not work for gather (hence
accurate corner filtering was disabled with gather).
Implement this by just doing it as the spec implies - calculate the 4th
texel as the average of the other 3. With gather of course there's only
one color to worry about, so it's not all that many instructions neither
(albeit surely the whole cube map filtering is hilariously complex).

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