[Mesa-dev] [PATCH] i965/msaa: Disable alpha-to-{coverage, one} when drawbuffer zero is in integer format

Ian Romanick idr at freedesktop.org
Wed Jul 18 10:46:21 PDT 2012


On 07/17/2012 03:16 PM, Anuj Phogat wrote:
> OpenGL specification 3.3 (page 196), section 4.1.3 says:
> If drawbuffer zero is not NONE and the buffer it references has an
> integer format, the SAMPLE_ALPHA_TO_COVERAGE and SAMPLE_ALPHA_TO_ONE
> operations are skipped."
> This should work properly even if there are other draw buffers that
> are not in integer format.
>
> This patch makes following piglit tests pass on mesa:
> int-draw-buffers-alpha-to-coverage
> int-draw-buffers-alpha-to-one
>
> Note: Patches for these piglit tests are under review on piglit mailing
> list.
>
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>

The content of the patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

but...

> ---
>   src/mesa/drivers/dri/i965/gen6_cc.c |   29 ++++++++++++++++++++++-------
>   1 files changed, 22 insertions(+), 7 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/gen6_cc.c b/src/mesa/drivers/dri/i965/gen6_cc.c
> index e0523ef..427cca9 100644
> --- a/src/mesa/drivers/dri/i965/gen6_cc.c
> +++ b/src/mesa/drivers/dri/i965/gen6_cc.c
> @@ -35,6 +35,7 @@
>   static void
>   gen6_upload_blend_state(struct brw_context *brw)
>   {
> +   bool is_buffer_zero_integer_format =  false;

Whitespace errors.

>      struct gl_context *ctx = &brw->intel.ctx;
>      struct gen6_blend_state *blend;
>      int b;
> @@ -76,6 +77,9 @@ gen6_upload_blend_state(struct brw_context *brw)
>         */
>         integer = (rb_type == GL_INT || rb_type == GL_UNSIGNED_INT);
>
> +      if(b == 0  && integer)
> +         is_buffer_zero_integer_format = true;
> +

Whitespace errors.

>         /* _NEW_COLOR */
>         if (ctx->Color.ColorLogicOpEnabled) {
>   	 /* Floating point RTs should have no effect from LogicOp,
> @@ -161,13 +165,24 @@ gen6_upload_blend_state(struct brw_context *brw)
>         blend[b].blend1.write_disable_g = !ctx->Color.ColorMask[b][1];
>         blend[b].blend1.write_disable_b = !ctx->Color.ColorMask[b][2];
>         blend[b].blend1.write_disable_a = !ctx->Color.ColorMask[b][3];
> -
> -      /* _NEW_MULTISAMPLE */
> -      blend[b].blend1.alpha_to_coverage =
> -         ctx->Multisample._Enabled && ctx->Multisample.SampleAlphaToCoverage;
> -      blend[b].blend1.alpha_to_one =
> -         ctx->Multisample._Enabled && ctx->Multisample.SampleAlphaToOne;
> -      blend[b].blend1.alpha_to_coverage_dither = (brw->intel.gen >= 7);
> +
> +      /* OpenGL specification 3.3 (page 196), section 4.1.3 says:
> +       * "If drawbuffer zero is not NONE and the buffer it references has an
> +       * integer format, the SAMPLE_ALPHA_TO_COVERAGE and SAMPLE_ALPHA_TO_ONE
> +       * operations are skipped."
> +       */
> +      if(!is_buffer_zero_integer_format) {

Whitespace errors.

> +         /* _NEW_MULTISAMPLE */
> +         blend[b].blend1.alpha_to_coverage =
> +            ctx->Multisample._Enabled && ctx->Multisample.SampleAlphaToCoverage;
> +         blend[b].blend1.alpha_to_one =
> +            ctx->Multisample._Enabled && ctx->Multisample.SampleAlphaToOne;
> +         blend[b].blend1.alpha_to_coverage_dither = (brw->intel.gen >= 7);
> +      }
> +      else {
> +         blend[b].blend1.alpha_to_coverage = false;
> +	 blend[b].blend1.alpha_to_one = false;

Whitespace errors.


> +      }
>      }
>
>      brw->state.dirty.cache |= CACHE_NEW_BLEND_STATE;
>


More information about the mesa-dev mailing list