[Mesa-dev] [PATCH 22/27] intel/isl: Apply render target alignment constraints for MCS

Jason Ekstrand jason at jlekstrand.net
Sat Jan 21 00:05:26 UTC 2017


For HiZ, we did this directly in isl_choose_image_alignment_el in isl.c.
Maybe it's better to do it there given that they're all 4x4.

On Mon, Jan 16, 2017 at 1:13 AM, Topi Pohjolainen <
topi.pohjolainen at gmail.com> wrote:

> Otherwise i965 driver will start experiencing failures with
> "texelFetch fs sampler2DMSArray 4 98x1x9-98x129x9 -auto -fbo"
> on IVB, HSW and BDW when starts to use ISL to calculate the
> layout.
>
> The test is fine on SKL because one already hits:
>
>   if (isl_format_is_compressed(info->format)) {
>       /* On Gen9, the meaning of RENDER_SURFACE_STATE's
>        * SurfaceHorizontalAlignment and SurfaceVerticalAlignment changed
> for
>        * compressed formats. They now indicate a multiple of the
> compression
>        * block.  For example, if the compression mode is ETC2 then HALIGN_4
>        * indicates a horizontal alignment of 16 pixels.
>        *
>        * To avoid wasting memory, choose the smallest alignment possible:
>        * HALIGN_4 and VALIGN_4.
>        */
>       *image_align_el = isl_extent3d(4, 4, 1);
>
> in isl_gen9_choose_image_alignment_el().
>
> However, the same fix is applied on Gen9 for consistency sake.
>
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
>  src/intel/isl/isl_gen7.c | 16 ++++++++++++++++
>  src/intel/isl/isl_gen8.c | 16 ++++++++++++++++
>  src/intel/isl/isl_gen9.c | 16 ++++++++++++++++
>  3 files changed, 48 insertions(+)
>
> diff --git a/src/intel/isl/isl_gen7.c b/src/intel/isl/isl_gen7.c
> index b1874c1..776d3bf 100644
> --- a/src/intel/isl/isl_gen7.c
> +++ b/src/intel/isl/isl_gen7.c
> @@ -442,6 +442,22 @@ isl_gen7_choose_image_alignment_el(const struct
> isl_device *dev,
>        }
>     }
>
> +   if (fmtl->txc == ISL_TXC_MCS) {
> +      assert(tiling == ISL_TILING_Y0);
> +
> +      /*
> +       * IvyBrigde PRM Vol 2, Part 1, "11.7 MCS Buffer for Render
> Target(s)":
> +       *
> +       * Height, width, and layout of MCS buffer in this case must match
> with
> +       * Render Target height, width, and layout. MCS buffer is tiledY.
> +       *
> +       * To avoid wasting memory, choose the smallest alignment possible:
> +       * HALIGN_4 and VALIGN_4.
> +       */
> +      *image_align_el = isl_extent3d(4, 4, 1);
> +      return;
> +   }
> +
>     *image_align_el = (struct isl_extent3d) {
>        .w = gen7_choose_halign_el(dev, info),
>        .h = gen7_choose_valign_el(dev, info, tiling),
> diff --git a/src/intel/isl/isl_gen8.c b/src/intel/isl/isl_gen8.c
> index 81c69dc..c4f8f53 100644
> --- a/src/intel/isl/isl_gen8.c
> +++ b/src/intel/isl/isl_gen8.c
> @@ -205,6 +205,22 @@ isl_gen8_choose_image_alignment_el(const struct
> isl_device *dev,
>        return;
>     }
>
> +   if (fmtl->txc == ISL_TXC_MCS) {
> +      assert(tiling == ISL_TILING_Y0);
> +
> +      /*
> +       * Broadwell PRM Vol 7, "MCS Buffer for Render Target(s)":
> +       *
> +       * Height, width, and layout of MCS buffer in this case must match
> with
> +       * Render Target height, width, and layout. MCS buffer is tiledY.
> +       *
> +       * To avoid wasting memory, choose the smallest alignment possible:
> +       * HALIGN_4 and VALIGN_4.
> +       */
> +      *image_align_el = isl_extent3d(4, 4, 1);
> +      return;
> +   }
> +
>     /* The below text from the Broadwell PRM provides some insight into the
>      * hardware's requirements for LOD alignment.  From the Broadwell PRM
> >>
>      * Volume 5: Memory Views >> Surface Layout >> 2D Surfaces:
> diff --git a/src/intel/isl/isl_gen9.c b/src/intel/isl/isl_gen9.c
> index e5d0f95..8709235 100644
> --- a/src/intel/isl/isl_gen9.c
> +++ b/src/intel/isl/isl_gen9.c
> @@ -119,6 +119,22 @@ isl_gen9_choose_image_alignment_el(const struct
> isl_device *dev,
>        return;
>     }
>
> +   if (fmtl->txc == ISL_TXC_MCS) {
> +      assert(tiling == ISL_TILING_Y0);
> +
> +      /*
> +       * Skylake PRM Vol 7, "MCS Buffer for Render Target(s)":
> +       *
> +       * Height, width, and layout of MCS buffer in this case must match
> with
> +       * Render Target height, width, and layout. MCS buffer is tiledY.
> +       *
> +       * To avoid wasting memory, choose the smallest alignment possible:
> +       * HALIGN_4 and VALIGN_4.
> +       */
> +      *image_align_el = isl_extent3d(4, 4, 1);
> +      return;
> +   }
> +
>     /* This BSpec text provides some insight into the hardware's alignment
>      * requirements [Skylake BSpec > Memory Views > Common Surface Formats
> >
>      * Surface Layout and Tiling > 2D Surfaces]:
> --
> 2.5.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170120/16b0ae08/attachment.html>


More information about the mesa-dev mailing list