diff options
author | Kenneth Graunke <[email protected]> | 2012-07-12 11:25:58 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2012-07-12 13:35:46 -0700 |
commit | 86e401b771ce4a6f9a728f76c5061c339f012d0a (patch) | |
tree | be142dab4d8d1dac280824efd9229deebff5cb5e /src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | |
parent | 16060531baa837304eb7a427d0cdbeccd95cf09a (diff) |
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 <[email protected]>
Signed-off-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_fs_visitor.cpp')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 12 |
1 files changed, 5 insertions, 7 deletions
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; |