r300g: fix blending when SRC_ALPHA_SATURATE is used
This commit is contained in:
parent
a6d91a141f
commit
717c28055a
|
@ -66,7 +66,11 @@ static void* r300_create_blend_state(struct pipe_context* pipe,
|
|||
( r300_translate_blend_factor(srcRGB) << R300_SRC_BLEND_SHIFT) |
|
||||
( r300_translate_blend_factor(dstRGB) << R300_DST_BLEND_SHIFT);
|
||||
|
||||
/* optimization: some operations do not require the destination color */
|
||||
/* Optimization: some operations do not require the destination color.
|
||||
*
|
||||
* When SRC_ALPHA_SATURATE is used, colorbuffer reads must be enabled,
|
||||
* otherwise blending gives incorrect results. It seems to be
|
||||
* a hardware bug. */
|
||||
if (eqRGB == PIPE_BLEND_MIN || eqA == PIPE_BLEND_MIN ||
|
||||
eqRGB == PIPE_BLEND_MAX || eqA == PIPE_BLEND_MAX ||
|
||||
dstRGB != PIPE_BLENDFACTOR_ZERO ||
|
||||
|
@ -78,7 +82,8 @@ static void* r300_create_blend_state(struct pipe_context* pipe,
|
|||
srcA == PIPE_BLENDFACTOR_DST_COLOR ||
|
||||
srcA == PIPE_BLENDFACTOR_DST_ALPHA ||
|
||||
srcA == PIPE_BLENDFACTOR_INV_DST_COLOR ||
|
||||
srcA == PIPE_BLENDFACTOR_INV_DST_ALPHA)
|
||||
srcA == PIPE_BLENDFACTOR_INV_DST_ALPHA ||
|
||||
srcRGB == PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE)
|
||||
blend->blend_control |= R300_READ_ENABLE;
|
||||
|
||||
/* XXX implement the optimization with DISCARD_SRC_PIXELS*/
|
||||
|
|
Loading…
Reference in New Issue