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

Jason Ekstrand jason at jlekstrand.net
Mon Feb 20 19:12:18 UTC 2017


On Mon, Feb 20, 2017 at 10:33 AM, Lionel Landwerlin <
lionel.g.landwerlin at intel.com> wrote:

> 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;
>

That would work too and it is a bit more general.  However, ISL currently
doesn't touch the isl_surf if creation fails.  I wouldn't mind keeping
that.  Also, I like that the end result of the restriction is clearly
spelled out with the old check.  I can't say that I care all that much one
way or the other so long as both the effect (16x 16k surfaces not working)
and the reason (pitch) are documented.


>      enum isl_format mcs_format;
>>      switch (surf->samples) {
>>      case 2:  mcs_format = ISL_FORMAT_MCS_2X;  break;
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170220/1abef050/attachment.html>


More information about the mesa-dev mailing list