OSDN Git Service

llvmpipe: fix blending with SRC_ALPHA_SATURATE with some formats without alpha
authorRoland Scheidegger <sroland@vmware.com>
Thu, 18 Jul 2013 00:05:34 +0000 (02:05 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Thu, 18 Jul 2013 17:03:35 +0000 (19:03 +0200)
commite57b98bad33b13ba02b11144709dd09af2ea8c95
tree1c3c497cb01649b0736f2694245b0c87cefb6947
parent0d7f087483d014305ec96a84ce5a28355f843c86
llvmpipe: fix blending with SRC_ALPHA_SATURATE with some formats without alpha

We were fixing up the blend factor to ZERO, however this only works correctly
with fixed point render buffers where the input values are clamped to 0/1
(because src_alpha_saturate is min(As, 1-Ad) so can be negative with unclamped
inputs). Haven't seen any failure anywhere due to that with fixed point SNORM
buffers (which clamp inputs to -1/1) but it should apply there as well (snorm
blending is rare, even opengl 4.3 doesn't require snorm rendertargets at all,
d3d10 requires them but they are not blendable).
Doesn't look like piglit hits this though (some internal testing hits the
float case at least). (With legacy OpenGL we could theoretically still use the
fixup to zero if the fragment color clamp is enabled, but we can't detect that
easily since we don't support native clamping hence it gets baked into the
shader.)

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Reviewed-by: Zack Rusin <zackr@vmware.com>
src/gallium/drivers/llvmpipe/lp_bld_blend_aos.c
src/gallium/drivers/llvmpipe/lp_state_fs.c