On 20/02/17 19:12, Jason Ekstrand wrote:
On Mon, Feb 20, 2017 at 10:33 AM, Lionel Landwerlin <[email protected] <mailto:[email protected]>> wrote:

    On 20/02/17 18:09, Jason Ekstrand wrote:

        From: Lionel Landwerlin <[email protected]
        <mailto:[email protected]>>

        v3 (Jason Ekstrand): Add a comment explaining why

        Signed-off-by: Lionel Landwerlin
        <[email protected]
        <mailto:[email protected]>>
        Reviewed-by: Jason Ekstrand <[email protected]
        <mailto:[email protected]>>
        ---
          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.

Whichever :)

Reviewed-by: Lionel Landwerlin <[email protected]>

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





_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to