llvmpipe: fix snorm blending
authorRoland Scheidegger <sroland@vmware.com>
Sat, 18 Nov 2017 05:23:35 +0000 (06:23 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Tue, 21 Nov 2017 03:06:29 +0000 (04:06 +0100)
commitb5957cee920cd7a62e4e726538dbbe44c12e33ab
tree18f8df358fe595c18b033f83d0e896aebeaa651e
parent464c2d80834e4ccf7f28fb62b82a2fa13e6445fb
llvmpipe: fix snorm blending

The blend math gets a bit funky due to inverse blend factors being
in range [0,2] rather than [-1,1], our normalized math can't really
cover this.
src_alpha_saturate blend factor has a similar problem too.
(Note that piglit fbo-blending-formats test is mostly useless for
anything but unorm formats, since not just all src/dst values are
between [0,1], but the tests are crafted in a way that the results
are between [0,1] too.)

v2: some formatting fixes, and fix a fairly obscure (to debug)
issue with alpha-only formats (not related to snorm at all), where
blend optimization would think it could simplify the blend equation
if the blend factors were complementary, however was using the
completely unrelated rgb blend factors instead of the alpha ones...

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_arit.c
src/gallium/auxiliary/gallivm/lp_bld_arit.h
src/gallium/drivers/llvmpipe/lp_bld_blend.c
src/gallium/drivers/llvmpipe/lp_bld_blend_aos.c