[Mesa-dev] [PATCH 03/11] i965/gen6: Fix blending state when no color buffer is bound.
Kenneth Graunke
kenneth at whitecape.org
Fri May 13 16:35:48 PDT 2011
On 05/12/2011 09:05 PM, Eric Anholt wrote:
> This is part of fixing fbo-alphatest-nocolor -- a regression in
> 35e8fe5c99b285f348cb8a1bba2931f120f7c0a1 after the initial regression,
> that had us using a garbage BLEND_STATE[0] (in particular, the alpha
> test enable) if no color buffer was bound.
> ---
> src/mesa/drivers/dri/i965/gen6_cc.c | 12 +++++++++++-
> 1 files changed, 11 insertions(+), 1 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/gen6_cc.c b/src/mesa/drivers/dri/i965/gen6_cc.c
> index 66357f0..2b16d6c 100644
> --- a/src/mesa/drivers/dri/i965/gen6_cc.c
> +++ b/src/mesa/drivers/dri/i965/gen6_cc.c
> @@ -39,8 +39,18 @@ prepare_blend_state(struct brw_context *brw)
> struct gen6_blend_state *blend;
> int b;
> int nr_draw_buffers = ctx->DrawBuffer->_NumColorDrawBuffers;
> - int size = sizeof(*blend) * nr_draw_buffers;
> -
> + int size;
> +
> + /* We need at least one BLEND_STATE written, because we might do
> + * thread dispatch even if _NumColorDrawBuffers is 0 (for example
> + * for computed depth or alpha test), which will do an FB write
The above comment mentions depth or alpha...
> + * with render target 0, which will reference BLEND_STATE[0] for
> + * alpha test enable.
> + */
> + if (nr_draw_buffers == 0&& ctx->Color.AlphaEnabled)
> + nr_draw_buffers = 1;
...but this doesn't do anything with depth? Does it need to?
> + size = sizeof(*blend) * nr_draw_buffers;
> blend = brw_state_batch(brw, size, 64,&brw->cc.blend_state_offset);
>
> memset(blend, 0, size);
I'm not familiar enough with this code to offer a Reviewed-by, sorry.
--Kenneth
More information about the mesa-dev
mailing list