r300: Don't disable destination read if the src blend factor needs it

The read can remain disabled if the src alpha factor needs it because
the result would still be zero.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=57984

NOTE: This is a candidate for stable release branches.

Signed-off-by: Marek Olšák <maraeo@gmail.com>
(cherry picked from commit ff5a9868c8)
This commit is contained in:
Stefan Dösinger 2012-12-07 17:38:35 +01:00 committed by Marek Olšák
parent e1cb624a43
commit 9311e55c8a

View file

@ -287,7 +287,11 @@ static void* r300_create_blend_state(struct pipe_context* pipe,
dstRGB == PIPE_BLENDFACTOR_ZERO) &&
(dstA == PIPE_BLENDFACTOR_SRC_COLOR ||
dstA == PIPE_BLENDFACTOR_SRC_ALPHA ||
dstA == PIPE_BLENDFACTOR_ZERO)) {
dstA == PIPE_BLENDFACTOR_ZERO) &&
(srcRGB != PIPE_BLENDFACTOR_DST_COLOR &&
srcRGB != PIPE_BLENDFACTOR_DST_ALPHA &&
srcRGB != PIPE_BLENDFACTOR_INV_DST_COLOR &&
srcRGB != PIPE_BLENDFACTOR_INV_DST_ALPHA)) {
blend_control |= R500_SRC_ALPHA_0_NO_READ;
}
@ -296,7 +300,11 @@ static void* r300_create_blend_state(struct pipe_context* pipe,
dstRGB == PIPE_BLENDFACTOR_ZERO) &&
(dstA == PIPE_BLENDFACTOR_INV_SRC_COLOR ||
dstA == PIPE_BLENDFACTOR_INV_SRC_ALPHA ||
dstA == PIPE_BLENDFACTOR_ZERO)) {
dstA == PIPE_BLENDFACTOR_ZERO) &&
(srcRGB != PIPE_BLENDFACTOR_DST_COLOR &&
srcRGB != PIPE_BLENDFACTOR_DST_ALPHA &&
srcRGB != PIPE_BLENDFACTOR_INV_DST_COLOR &&
srcRGB != PIPE_BLENDFACTOR_INV_DST_ALPHA)) {
blend_control |= R500_SRC_ALPHA_1_NO_READ;
}
}