[Mesa-dev] [PATCH] st/mesa: only enable MSAA coverage options when we have a MSAA buffer

Ilia Mirkin imirkin at alum.mit.edu
Fri Sep 16 16:58:31 UTC 2016


FTR, the new piglit test passed as-is on NVIDIA hw (at least nv50 and
nvc0). I'm not opposed to this new state dependency if Marek isn't
(he's analyzed these things a whole lot more than I suspect anyone
else), but just wanted to point it out in case the preference is to
instead change how gallium is supposed to behave.

Cheers,

  -ilia

On Thu, Sep 15, 2016 at 5:20 PM, Brian Paul <brianp at vmware.com> wrote:
> Regardless of whether GL_MULTISAMPLE is enabled (it's enabled by default)
> we should not set the alpha_to_coverage or alpha_to_one flags if the
> current drawing buffer does not do MSAA.
>
> This fixes the new piglit gl-1.3-alpha_to_coverage_nop test.
> ---
>  src/mesa/state_tracker/st_atom_blend.c | 9 ++++++---
>  src/mesa/state_tracker/st_context.c    | 3 ++-
>  2 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_atom_blend.c b/src/mesa/state_tracker/st_atom_blend.c
> index 65de67b..222267e 100644
> --- a/src/mesa/state_tracker/st_atom_blend.c
> +++ b/src/mesa/state_tracker/st_atom_blend.c
> @@ -265,9 +265,12 @@ update_blend( struct st_context *st )
>
>     blend->dither = ctx->Color.DitherFlag;
>
> -   if (ctx->Multisample.Enabled) {
> -      /* unlike in gallium/d3d10 these operations are only performed
> -         if msaa is enabled */
> +   if (ctx->Multisample.Enabled &&
> +       ctx->DrawBuffer &&
> +       ctx->DrawBuffer->Visual.sampleBuffers > 0) {
> +      /* Unlike in gallium/d3d10 these operations are only performed
> +       * if both msaa is enabled and we have a multisample buffer.
> +       */
>        blend->alpha_to_coverage = ctx->Multisample.SampleAlphaToCoverage;
>        blend->alpha_to_one = ctx->Multisample.SampleAlphaToOne;
>     }
> diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
> index ddc11a4..81b3387 100644
> --- a/src/mesa/state_tracker/st_context.c
> +++ b/src/mesa/state_tracker/st_context.c
> @@ -166,7 +166,8 @@ void st_invalidate_state(struct gl_context * ctx, GLbitfield new_state)
>     struct st_context *st = st_context(ctx);
>
>     if (new_state & _NEW_BUFFERS) {
> -      st->dirty |= ST_NEW_DSA |
> +      st->dirty |= ST_NEW_BLEND |
> +                   ST_NEW_DSA |
>                     ST_NEW_FB_STATE |
>                     ST_NEW_SAMPLE_MASK |
>                     ST_NEW_SAMPLE_SHADING |
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list