<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 11/10/2018 17:21, Jason Ekstrand
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAOFGe953MVYbAdSDOSjvZOFQdsdkqQ6VK+kx6uGrcWBm8PpiQQ@mail.gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div class="gmail_quote">
          <div dir="ltr">On Wed, Oct 10, 2018 at 5:17 PM Chad Versace
            <<a href="mailto:chadversary@chromium.org"
              moz-do-not-send="true">chadversary@chromium.org</a>>
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">On Mon 01
            Oct 2018, Jason Ekstrand wrote:<br>
            > The DRM format modifiers extension adds a
            TILING_DRM_FORMAT_MODIFIER<br>
            > which will be used for modifiers so we can no longer
            use OPTIMAL to<br>
            > indicate tiled inside the driver.<br>
            > ---<br>
            >  src/intel/vulkan/anv_formats.c     | 2 +-<br>
            >  src/intel/vulkan/anv_image.c       | 6 +++---<br>
            >  src/intel/vulkan/genX_cmd_buffer.c | 2 +-<br>
            >  3 files changed, 5 insertions(+), 5 deletions(-)<br>
            <br>
            This patch needs to also fixup some places that test tiling
            ==<br>
            VK_IMAGE_TILING_LINEAR. I found at least one such place in<br>
            anv_formats.c. The patch also needs to fixup any functions
            that use<br>
            early returns that are conditioned (perhaps indirectly) on
            tiling;<br>
            anv_get_format_plane() comes to mind.<br>
            <br>
            I quickly tried, as an experiment, to expand this patch into
            a correct<br>
            patch. After a few minutes of typing, I concluded that this
            patch series<br>
            takes the wrong order-of-implementation approach.<br>
            <br>
            For example, what happens to all the calls to
            anv_get_format_plane() in<br>
            anv_blorp.c? Those need fixing too. Simply fixing the tiling
            checks is<br>
            not enough, especially because
            VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT<br>
            allows DRM_FORMAT_MOD_LINEAR.<br>
            <br>
            Instead, I think the right way to do this is to
            incrementally, following<br>
            the callchains bottom-up, teach each function to understand<br>
            VK_EXT_image_drm_format_modifier. Only when that's complete,
            then move<br>
            WSI to the new structs. Otherwise, there is too much room
            for<br>
            accidential implementation gaps; gaps that may not hurt WSI,
            but will<br>
            make it more difficult to discern
            what-works-and-what-doesn't while<br>
            implementing the full extension.<br>
            <br>
            Just now, I tried writing a patch that starts at the bottom
            of the<br>
            callchain, anv_get_format_plane(), and teaches it about
            modifiers. The<br>
            patch is more invasive than expected. Maybe the patch is
            messy because<br>
            more preliminary cleanups are needed. I'm unsure; I need to
            take a break<br>
            and revisit it in the morning.<br>
          </blockquote>
          <div><br>
          </div>
          <div>I just took a look at anv_get_format_plane and my hopes
            of this being a quick extension to implement instantly
            evaporated. :-(  In the light of modifiers, piles of
            assumptions we've been making are invalid.  *sigh*  Time to
            go rewrite the driver...</div>
          <div><br>
          </div>
          <div>--Jason<br>
          </div>
        </div>
      </div>
    </blockquote>
    <p><br>
    </p>
    Switching over to isl_tiling internally?<br>
    Having all entrypoints immediately convert VkImageTiling into that.<br>
    <br>
    -<br>
    Lionel<br>
    <p><br>
    </p>
    <blockquote type="cite"
cite="mid:CAOFGe953MVYbAdSDOSjvZOFQdsdkqQ6VK+kx6uGrcWBm8PpiQQ@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_quote">
          <div> </div>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            > <br>
            > diff --git a/src/intel/vulkan/anv_formats.c
            b/src/intel/vulkan/anv_formats.c<br>
            > index 33faf7cc37f..d44aae1c127 100644<br>
            > --- a/src/intel/vulkan/anv_formats.c<br>
            > +++ b/src/intel/vulkan/anv_formats.c<br>
            > @@ -508,7 +508,7 @@ get_image_format_features(const
            struct gen_device_info *devinfo,<br>
            >        return 0;<br>
            >  <br>
            >     struct anv_format_plane base_plane_format =
            plane_format;<br>
            > -   if (vk_tiling == VK_IMAGE_TILING_OPTIMAL) {<br>
            > +   if (vk_tiling != VK_IMAGE_TILING_LINEAR) {<br>
            >        base_plane_format =
            anv_get_format_plane(devinfo, vk_format,<br>
            >                                               
             VK_IMAGE_ASPECT_COLOR_BIT,<br>
            >                                               
             VK_IMAGE_TILING_LINEAR);<br>
            > diff --git a/src/intel/vulkan/anv_image.c
            b/src/intel/vulkan/anv_image.c<br>
            > index b0d8c560adb..70594d6c053 100644<br>
            > --- a/src/intel/vulkan/anv_image.c<br>
            > +++ b/src/intel/vulkan/anv_image.c<br>
            > @@ -334,7 +334,7 @@ make_surface(const struct
            anv_device *dev,<br>
            >     bool needs_shadow = false;<br>
            >     if (dev->info.gen <= 8 &&<br>
            >         (vk_info->flags &
            VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT) &&<br>
            > -       vk_info->tiling == VK_IMAGE_TILING_OPTIMAL)
            {<br>
            > +       vk_info->tiling != VK_IMAGE_TILING_LINEAR) {<br>
            >       
            assert(isl_format_is_compressed(plane_format.isl_format));<br>
            >        tiling_flags = ISL_TILING_LINEAR_BIT;<br>
            >        needs_shadow = true;<br>
            > @@ -829,7 +829,7 @@ anv_layout_to_aux_usage(const
            struct gen_device_info * const devinfo,<br>
            >        return ISL_AUX_USAGE_NONE;<br>
            >  <br>
            >     /* All images that use an auxiliary surface are
            required to be tiled. */<br>
            > -   assert(image->tiling ==
            VK_IMAGE_TILING_OPTIMAL);<br>
            > +   assert(image->planes[plane].surface.isl.tiling
            != ISL_TILING_LINEAR);<br>
            >  <br>
            >     /* Stencil has no aux */<br>
            >     assert(aspect != VK_IMAGE_ASPECT_STENCIL_BIT);<br>
            > @@ -953,7 +953,7 @@ anv_layout_to_fast_clear_type(const
            struct gen_device_info * const devinfo,<br>
            >        return ANV_FAST_CLEAR_NONE;<br>
            >  <br>
            >     /* All images that use an auxiliary surface are
            required to be tiled. */<br>
            > -   assert(image->tiling ==
            VK_IMAGE_TILING_OPTIMAL);<br>
            > +   assert(image->planes[plane].surface.isl.tiling
            != ISL_TILING_LINEAR);<br>
            >  <br>
            >     /* Stencil has no aux */<br>
            >     assert(aspect != VK_IMAGE_ASPECT_STENCIL_BIT);<br>
            > diff --git a/src/intel/vulkan/genX_cmd_buffer.c
            b/src/intel/vulkan/genX_cmd_buffer.c<br>
            > index 099c30f3d66..821506761e2 100644<br>
            > --- a/src/intel/vulkan/genX_cmd_buffer.c<br>
            > +++ b/src/intel/vulkan/genX_cmd_buffer.c<br>
            > @@ -967,7 +967,7 @@ transition_color_buffer(struct
            anv_cmd_buffer *cmd_buffer,<br>
            >     if (base_layer >= anv_image_aux_layers(image,
            aspect, base_level))<br>
            >        return;<br>
            >  <br>
            > -   assert(image->tiling ==
            VK_IMAGE_TILING_OPTIMAL);<br>
            > +   assert(image->planes[plane].surface.isl.tiling
            != ISL_TILING_LINEAR);<br>
            >  <br>
            >     if (initial_layout == VK_IMAGE_LAYOUT_UNDEFINED ||<br>
            >         initial_layout ==
            VK_IMAGE_LAYOUT_PREINITIALIZED) {<br>
            > -- <br>
            > 2.17.1<br>
            > <br>
            > _______________________________________________<br>
            > mesa-dev mailing list<br>
            > <a href="mailto:mesa-dev@lists.freedesktop.org"
              target="_blank" moz-do-not-send="true">mesa-dev@lists.freedesktop.org</a><br>
            > <a
              href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
          </blockquote>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
mesa-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a>
</pre>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>