<div dir="ltr">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.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 16, 2017 at 1:13 AM, Topi Pohjolainen <span dir="ltr"><<a href="mailto:topi.pohjolainen@gmail.com" target="_blank">topi.pohjolainen@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Otherwise i965 driver will start experiencing failures with<br>
"texelFetch fs sampler2DMSArray 4 98x1x9-98x129x9 -auto -fbo"<br>
on IVB, HSW and BDW when starts to use ISL to calculate the<br>
layout.<br>
<br>
The test is fine on SKL because one already hits:<br>
<br>
  if (isl_format_is_compressed(<wbr>info->format)) {<br>
      /* On Gen9, the meaning of RENDER_SURFACE_STATE's<br>
       * SurfaceHorizontalAlignment and SurfaceVerticalAlignment changed for<br>
       * compressed formats. They now indicate a multiple of the compression<br>
       * block.  For example, if the compression mode is ETC2 then HALIGN_4<br>
       * indicates a horizontal alignment of 16 pixels.<br>
       *<br>
       * To avoid wasting memory, choose the smallest alignment possible:<br>
       * HALIGN_4 and VALIGN_4.<br>
       */<br>
      *image_align_el = isl_extent3d(4, 4, 1);<br>
<br>
in isl_gen9_choose_image_<wbr>alignment_el().<br>
<br>
However, the same fix is applied on Gen9 for consistency sake.<br>
<br>
Signed-off-by: Topi Pohjolainen <<a href="mailto:topi.pohjolainen@intel.com">topi.pohjolainen@intel.com</a>><br>
---<br>
 src/intel/isl/isl_gen7.c | 16 ++++++++++++++++<br>
 src/intel/isl/isl_gen8.c | 16 ++++++++++++++++<br>
 src/intel/isl/isl_gen9.c | 16 ++++++++++++++++<br>
 3 files changed, 48 insertions(+)<br>
<br>
diff --git a/src/intel/isl/isl_gen7.c b/src/intel/isl/isl_gen7.c<br>
index b1874c1..776d3bf 100644<br>
--- a/src/intel/isl/isl_gen7.c<br>
+++ b/src/intel/isl/isl_gen7.c<br>
@@ -442,6 +442,22 @@ isl_gen7_choose_image_<wbr>alignment_el(const struct isl_device *dev,<br>
       }<br>
    }<br>
<br>
+   if (fmtl->txc == ISL_TXC_MCS) {<br>
+      assert(tiling == ISL_TILING_Y0);<br>
+<br>
+      /*<br>
+       * IvyBrigde PRM Vol 2, Part 1, "11.7 MCS Buffer for Render Target(s)":<br>
+       *<br>
+       * Height, width, and layout of MCS buffer in this case must match with<br>
+       * Render Target height, width, and layout. MCS buffer is tiledY.<br>
+       *<br>
+       * To avoid wasting memory, choose the smallest alignment possible:<br>
+       * HALIGN_4 and VALIGN_4.<br>
+       */<br>
+      *image_align_el = isl_extent3d(4, 4, 1);<br>
+      return;<br>
+   }<br>
+<br>
    *image_align_el = (struct isl_extent3d) {<br>
       .w = gen7_choose_halign_el(dev, info),<br>
       .h = gen7_choose_valign_el(dev, info, tiling),<br>
diff --git a/src/intel/isl/isl_gen8.c b/src/intel/isl/isl_gen8.c<br>
index 81c69dc..c4f8f53 100644<br>
--- a/src/intel/isl/isl_gen8.c<br>
+++ b/src/intel/isl/isl_gen8.c<br>
@@ -205,6 +205,22 @@ isl_gen8_choose_image_<wbr>alignment_el(const struct isl_device *dev,<br>
       return;<br>
    }<br>
<br>
+   if (fmtl->txc == ISL_TXC_MCS) {<br>
+      assert(tiling == ISL_TILING_Y0);<br>
+<br>
+      /*<br>
+       * Broadwell PRM Vol 7, "MCS Buffer for Render Target(s)":<br>
+       *<br>
+       * Height, width, and layout of MCS buffer in this case must match with<br>
+       * Render Target height, width, and layout. MCS buffer is tiledY.<br>
+       *<br>
+       * To avoid wasting memory, choose the smallest alignment possible:<br>
+       * HALIGN_4 and VALIGN_4.<br>
+       */<br>
+      *image_align_el = isl_extent3d(4, 4, 1);<br>
+      return;<br>
+   }<br>
+<br>
    /* The below text from the Broadwell PRM provides some insight into the<br>
     * hardware's requirements for LOD alignment.  >From the Broadwell PRM >><br>
     * Volume 5: Memory Views >> Surface Layout >> 2D Surfaces:<br>
diff --git a/src/intel/isl/isl_gen9.c b/src/intel/isl/isl_gen9.c<br>
index e5d0f95..8709235 100644<br>
--- a/src/intel/isl/isl_gen9.c<br>
+++ b/src/intel/isl/isl_gen9.c<br>
@@ -119,6 +119,22 @@ isl_gen9_choose_image_<wbr>alignment_el(const struct isl_device *dev,<br>
       return;<br>
    }<br>
<br>
+   if (fmtl->txc == ISL_TXC_MCS) {<br>
+      assert(tiling == ISL_TILING_Y0);<br>
+<br>
+      /*<br>
+       * Skylake PRM Vol 7, "MCS Buffer for Render Target(s)":<br>
+       *<br>
+       * Height, width, and layout of MCS buffer in this case must match with<br>
+       * Render Target height, width, and layout. MCS buffer is tiledY.<br>
+       *<br>
+       * To avoid wasting memory, choose the smallest alignment possible:<br>
+       * HALIGN_4 and VALIGN_4.<br>
+       */<br>
+      *image_align_el = isl_extent3d(4, 4, 1);<br>
+      return;<br>
+   }<br>
+<br>
    /* This BSpec text provides some insight into the hardware's alignment<br>
     * requirements [Skylake BSpec > Memory Views > Common Surface Formats ><br>
     * Surface Layout and Tiling > 2D Surfaces]:<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.5.5<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>