[Mesa-dev] [PATCH 7/8] i965/msaa: Adjust MCS buffer allocation for 8x MSAA.

Kenneth Graunke kenneth at whitecape.org
Tue Jul 24 12:10:06 PDT 2012


On 07/18/2012 09:21 AM, Paul Berry wrote:
> MCS buffers use 32 bits per pixel in 8x MSAA, and 8 bits per pixel in
> 4x MSAA.  This patch adjusts the format we use to allocate the buffer
> so that enough memory is set aside for 8x MSAA.
> ---
>  src/mesa/drivers/dri/intel/intel_mipmap_tree.c |   27 ++++++++++++++++++++++-
>  1 files changed, 25 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> index d6572cd..f30f92b 100644
> --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> @@ -672,7 +672,30 @@ intel_miptree_alloc_mcs(struct intel_context *intel,
>  {
>     assert(mt->mcs_mt == NULL);
>     assert(intel->gen >= 7); /* MCS only used on Gen7+ */
> -   assert(num_samples == 4); /* TODO: support 8x MSAA */
> +
> +   /* Choose the correct format for the MCS buffer.  All that really matters
> +    * is that we allocate the right buffer size, since we'll always be
> +    * accessing this miptree using MCS-specific hardware mechanisms, which
> +    * infer the correct format based on num_samples.
> +    */
> +   gl_format format;
> +   switch (num_samples) {
> +   case 4:
> +      /* 8 bits/pixel are required for MCS data when using 4x MSAA (2 bits for
> +       * each sample).
> +       */
> +      format = MESA_FORMAT_A8;

I'm surprised to see A8 here...it would be nicer, I think, to use R8.  I
guess all that matters here is that you get an 8-bit, 1-component
format...but the luminance/alpha formats are pretty awful and require
special cases in a lot of places, so I'd rather avoid using them
wherever possible.

That said, I would change it in a separate patch.

> +      break;
> +   case 8:
> +      /* 32 bits/pixel are required for MCS data when using 8x MSAA (3 bits
> +       * for each sample, plus 8 padding bits).
> +       */
> +      format = MESA_FORMAT_R_UINT32;
> +      break;
> +   default:
> +      assert(!"Unrecognized sample count in intel_miptree_alloc_mcs");
> +      break;
> +   };
>  
>     /* From the Ivy Bridge PRM, Vol4 Part1 p76, "MCS Base Address":
>      *
> @@ -684,7 +707,7 @@ intel_miptree_alloc_mcs(struct intel_context *intel,
>      */
>     mt->mcs_mt = intel_miptree_create(intel,
>                                       mt->target,
> -                                     MESA_FORMAT_A8,
> +                                     format,
>                                       mt->first_level,
>                                       mt->last_level,
>                                       mt->width0,
> 



More information about the mesa-dev mailing list