From: Kenneth Graunke Date: Thu, 12 Jul 2012 18:25:58 +0000 (-0700) Subject: i965: Always emit alpha when nr_color_buffers == 0. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=86e401b771ce4a6f9a728f76c5061c339f012d0a;p=mesa.git i965: Always emit alpha when nr_color_buffers == 0. If alpha-testing is enabled, we need to send alpha down the pipeline even if nr_color_buffers == 0. However, tracking whether alpha-testing is enabled in the WM program key is expensive: it causes us to compile multiple specializations of the same shader, using program cache space. This patch removes the check for alpha-testing, and simply emits alpha whenever nr_color_buffers == 0. We believe this will also be necessary for alpha-to-coverage, and it should add minimal overhead to an uncommon case. Saving the recompiles should more than make up the difference. Reviewed-by: Eric Anholt Signed-off-by: Kenneth Graunke --- diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index 7224cbe04f5..08c0130aa3e 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -2141,13 +2141,11 @@ fs_visitor::emit_fb_writes() } if (c->key.nr_color_regions == 0) { - if (c->key.alpha_test) { - /* If the alpha test is enabled but there's no color buffer, - * we still need to send alpha out the pipeline to our null - * renderbuffer. - */ - emit_color_write(0, 3, color_mrf); - } + /* Even if there's no color buffers enabled, we still need to send + * alpha out the pipeline to our null renderbuffer to support + * alpha-testing, alpha-to-coverage, and so on. + */ + emit_color_write(0, 3, color_mrf); fs_inst *inst = emit(FS_OPCODE_FB_WRITE); inst->base_mrf = base_mrf; diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c index 880564619c8..7194a739d08 100644 --- a/src/mesa/drivers/dri/i965/brw_wm.c +++ b/src/mesa/drivers/dri/i965/brw_wm.c @@ -449,10 +449,8 @@ static void brw_wm_populate_key( struct brw_context *brw, /* Build the index for table lookup */ - /* _NEW_COLOR */ - key->alpha_test = ctx->Color.AlphaEnabled; - if (intel->gen < 6) { + /* _NEW_COLOR */ if (fp->program.UsesKill || ctx->Color.AlphaEnabled) lookup |= IZ_PS_KILL_ALPHATEST_BIT; diff --git a/src/mesa/drivers/dri/i965/brw_wm.h b/src/mesa/drivers/dri/i965/brw_wm.h index 2cde2a0f537..b976a605cb6 100644 --- a/src/mesa/drivers/dri/i965/brw_wm.h +++ b/src/mesa/drivers/dri/i965/brw_wm.h @@ -65,7 +65,6 @@ struct brw_wm_prog_key { GLuint flat_shade:1; GLuint nr_color_regions:5; GLuint render_to_fbo:1; - GLuint alpha_test:1; GLuint clamp_fragment_color:1; GLuint line_aa:2;