<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Mar 6, 2017 at 12:40 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">Set anv_surface::offset *before* calling add_surface().<br>
<br>
No intended change in behavior. This patch prepares for supporting<br>
user-provided surface offsets, a feature required for<br>
VK_MESAX_external_image_dma_<wbr>buf.<br>
---<br>
 src/intel/vulkan/anv_image.c | 15 ++++++++++++---<br>
 1 file changed, 12 insertions(+), 3 deletions(-)<br>
<br>
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c<br>
index 18ba53c4e6d..7798f325082 100644<br>
--- a/src/intel/vulkan/anv_image.c<br>
+++ b/src/intel/vulkan/anv_image.c<br>
@@ -122,12 +122,17 @@ choose_isl_tiling_flags(const struct anv_image_create_info *anv_info)<br>
 }<br>
<br>
 static void<br>
-add_surface(struct anv_image *image, struct anv_surface *surf)<br>
+set_min_surface_offset(const struct anv_image *image, struct anv_surface *surf)<br>
 {<br>
    assert(surf->isl.size > 0); /* isl surface must be initialized */<br>
-<br>
    surf->offset = align_u32(image->size, surf->isl.alignment);<br>
-   image->size = surf->offset + surf->isl.size;<br>
+}<br>
+<br>
+static void<br>
+add_surface(struct anv_image *image, const struct anv_surface *surf)<br>
+{<br>
+   assert(surf->isl.size > 0); /* isl surface must be initialized */<br>
+   image->size = MAX2(image->size, surf->offset + surf->isl.size);<br>
    image->alignment = MAX2(image->alignment, surf->isl.alignment);<br>
 }<br>
<br>
@@ -161,6 +166,7 @@ make_hiz_surface_maybe(const struct anv_device *dev,<br>
       if (!ok)<br>
          return;<br>
<br>
+      set_min_surface_offset(image, &image->aux_surface);<br>
       add_surface(image, &image->aux_surface);<br></blockquote><div><br></div><div>Another option would be to make add_surface take an offset (or maybe min_offset?) and then it would just be one call.  I'll keep reading.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
       image->aux_usage = ISL_AUX_USAGE_HIZ;<br>
    }<br>
@@ -183,6 +189,7 @@ make_ccs_surface_maybe(const struct anv_device *dev,<br>
    if (!ok)<br>
       return;<br>
<br>
+   set_min_surface_offset(image, &image->aux_surface);<br>
    add_surface(image, &image->aux_surface);<br>
<br>
    /* For images created without MUTABLE_FORMAT_BIT set, we know that they will<br>
@@ -214,6 +221,7 @@ make_mcs_surface_maybe(const struct anv_device *dev,<br>
    if (!ok)<br>
       return;<br>
<br>
+   set_min_surface_offset(image, &image->aux_surface);<br>
    add_surface(image, &image->aux_surface);<br>
    image->aux_usage = ISL_AUX_USAGE_MCS;<br>
 }<br>
@@ -283,6 +291,7 @@ make_main_surface(const struct anv_device *dev,<br>
     */<br>
    assert(ok);<br>
<br>
+   set_min_surface_offset(image, anv_surf);<br>
    add_surface(image, anv_surf);<br>
 }<br>
<span class="HOEnZb"><font color="#888888"><br>
--<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>