<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Mar 13, 2017 at 3:28 PM, Chad Versace <span dir="ltr"><<a href="mailto:chadversary@chromium.org" target="_blank">chadversary@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The caller does so by setting the new field<br>
isl_surf_init_info::row_pitch.<br>
<br>
v2:<br>
  - Validate the requested row_pitch.<br>
---<br>
 src/intel/isl/isl.c | 14 +++++++++++++-<br>
 src/intel/isl/isl.h |  6 ++++++<br>
 2 files changed, 19 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c<br>
index 405f5b917fe..0e0eb35ef52 100644<br>
--- a/src/intel/isl/isl.c<br>
+++ b/src/intel/isl/isl.c<br>
@@ -1100,10 +1100,22 @@ isl_calc_row_pitch(const struct isl_device *dev,<br>
    const uint32_t alignment =<br>
       isl_calc_row_pitch_alignment(<wbr>surf_info, tile_info);<br>
<br>
-   const uint32_t row_pitch =<br>
+   const uint32_t min_row_pitch =<br>
       isl_calc_min_row_pitch(dev, surf_info, tile_info, phys_slice0_sa,<br>
                              alignment);<br>
<br>
+   uint32_t row_pitch = min_row_pitch;<br>
+<br>
+   if (surf_info->row_pitch != 0) {<br>
+      row_pitch = surf_info->row_pitch;<br>
+<br>
+      if (row_pitch < min_row_pitch)<br>
+         return false;<br>
+<br>
+      if (row_pitch % alignment != 0)<br>
+         return false;<br>
+   }<br></blockquote><div><br></div><div>Looking at this a bit more, I think I do have a mild preference for calc_row_pitch to handle alignment.  If we did that, this would become:<br><br></div><div>if (surf_info->row_pitch) {<br></div><div>   /* The stuff you have */<br></div><div>} else {<br></div><div>   row_pitch = isl_align_u32(min_row_pitch, alignment);<br></div><div>}<br><br></div><div>which is a nice if/else.<br><br></div><div>The counter-argument, of course, is that if min_row_pitch hasn't been aligned then it isn't really the minimum because it isn't a valid row pitch.  Never mind my mild preferences, let's tell the truth.  You're doing it just fine and I'm arguing with myself on the mailing list. :-)<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+<br>
    const uint32_t row_pitch_tiles = row_pitch / tile_info->phys_extent_B.<wbr>width;<br>
<br>
    /* Check that the pitch fits in RENDER_SURFACE_STATE::<wbr>SurfacePitch or<br>
diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h<br>
index b79793b0c93..fb2bcfaec10 100644<br>
--- a/src/intel/isl/isl.h<br>
+++ b/src/intel/isl/isl.h<br>
@@ -816,6 +816,12 @@ struct isl_surf_init_info {<br>
    /** Lower bound for isl_surf::pitch, in bytes. */<br>
    uint32_t min_pitch;<br>
<br>
+   /**<br>
+    * Exact value for isl_surf::row_pitch. Ignored if zero.  isl_surf_init()<br>
+    * will fail if this is misaligned or out of bounds.<br>
+    */<br>
+   uint32_t row_pitch;<br>
+<br>
    isl_surf_usage_flags_t usage;<br>
<br>
    /** Flags that alter how ISL selects isl_surf::tiling.  */<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.12.0<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></div>