From f9ea435ebc9360e186e44fc4e9c155dc073fe8ac Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 23 Sep 2013 21:41:34 +0200 Subject: [PATCH] radeonsi: bypass alpha-test for integer colorbuffers MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fixes spec/EXT_texture_integer/fbo-blending. Reviewed-by: Michel Dänzer --- src/gallium/drivers/radeonsi/si_state.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 8f7edafcf35..b5d625aa7a3 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -2352,7 +2352,16 @@ static INLINE void si_shader_selector_key(struct pipe_context *ctx, } if (rctx->queued.named.dsa) { key->ps.alpha_func = rctx->queued.named.dsa->alpha_func; - key->ps.alpha_ref = rctx->queued.named.dsa->alpha_ref; + + /* Alpha-test should be disabled if colorbuffer 0 is integer. */ + if (rctx->framebuffer.nr_cbufs && + rctx->framebuffer.cbufs[0] && + util_format_is_pure_integer(rctx->framebuffer.cbufs[0]->texture->format)) + key->ps.alpha_func = PIPE_FUNC_ALWAYS; + + if (key->ps.alpha_func != PIPE_FUNC_ALWAYS && + key->ps.alpha_func != PIPE_FUNC_NEVER) + key->ps.alpha_ref = rctx->queued.named.dsa->alpha_ref; } else { key->ps.alpha_func = PIPE_FUNC_ALWAYS; } -- 2.30.2