Mesa (master): r300g: fix blending when SRC_ALPHA_SATURATE is used
Corbin Simpson
csimpson at kemper.freedesktop.org
Wed Jan 6 20:49:32 UTC 2010
Module: Mesa
Branch: master
Commit: 717c28055a9093e4fea37450d6db787e5b61e254
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=717c28055a9093e4fea37450d6db787e5b61e254
Author: Marek Olšák <maraeo at gmail.com>
Date: Sun Dec 20 04:28:30 2009 +0100
r300g: fix blending when SRC_ALPHA_SATURATE is used
---
src/gallium/drivers/r300/r300_state.c | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c
index 534c1b5..1dbf0bb 100644
--- a/src/gallium/drivers/r300/r300_state.c
+++ b/src/gallium/drivers/r300/r300_state.c
@@ -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*/
More information about the mesa-commit
mailing list