gallivm: optimize lp_build_unpack_arith_rgba_aos slightly
authorRoland Scheidegger <sroland@vmware.com>
Wed, 21 Dec 2016 03:55:34 +0000 (04:55 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Thu, 5 Jan 2017 22:59:38 +0000 (23:59 +0100)
commitbc86e829a5c87714a7f3798fe9096c75692e5157
tree1b283557b103dc44557f3c69f21b62177529ef4f
parenta03a2ac6fd3005218eeddeae89e60115fbedde85
gallivm: optimize lp_build_unpack_arith_rgba_aos slightly

This code uses a vector shift which has to be emulated on x86 unless
there's AVX2. Luckily in some cases we can actually avoid the shift
altogether, so do that.
Also make sure we hit the fast lp_build_conv() path when applicable,
albeit that's quite the hack...
That said, this path is taken for AoS sampling for small unorm (smaller
than rgba8) formats, and it is completely hopeless even with those
changes, with or without AVX.
(Probably should have some code similar to the one in the llvmpipe fs
backend code, using bit replication to extend to rgba8888 - rounding
is not quite 100% accurate but if it's good enough there it should be
here as well.)

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