[Mesa-dev] [PATCH 2/3] isl: add MCS width constraint 16 samples

Lionel Landwerlin lionel.g.landwerlin at intel.com
Mon Feb 20 18:33:50 UTC 2017


On 20/02/17 18:09, Jason Ekstrand wrote:
> From: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
>
> v3 (Jason Ekstrand): Add a comment explaining why
>
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
>   src/intel/isl/isl.c | 10 ++++++++++
>   1 file changed, 10 insertions(+)
>
> diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c
> index 1a47da5..6979063 100644
> --- a/src/intel/isl/isl.c
> +++ b/src/intel/isl/isl.c
> @@ -1417,6 +1417,16 @@ isl_surf_get_mcs_surf(const struct isl_device *dev,
>      assert(surf->levels == 1);
>      assert(surf->logical_level0_px.depth == 1);
>   
> +   /* The "Auxiliary Surface Pitch" field in RENDER_SURFACE_STATE is only 9
> +    * bits which means the maximum pitch of a compression surface is 512
> +    * tiles or 64KB (since MCS is always Y-tiled).  Since a 16x MCS buffer is
> +    * 64bpp, this gives us a maximum width of 8192 pixels.  We can create
> +    * larger multisampled surfaces, we just can't compress them.   For 2x, 4x,
> +    * and 8x, we have enough room for the full 16k supported by the hardware.
> +    */
> +   if (surf->samples == 16 && surf->width > 8192)
> +      return false;
> +

I was about to write something like this :

    struct isl_tile_info tile_info;
    isl_surf_get_tile_info(dev, surf, &tile_info);
    if ((surf->row_pitch / tile_info.phys_extent_B.width) > 512)
       return false;


>      enum isl_format mcs_format;
>      switch (surf->samples) {
>      case 2:  mcs_format = ISL_FORMAT_MCS_2X;  break;




More information about the mesa-dev mailing list