<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Nov 7, 2017 at 8:11 AM, Jason Ekstrand <span dir="ltr"><<a href="mailto:jason@jlekstrand.net" target="_blank">jason@jlekstrand.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5">On Tue, Nov 7, 2017 at 6:47 AM, 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">Overview:<br>
<br>
    This series implements 3 extensions:<br>
<br>
        VK_EXT_external_memory_dma_buf<br>
        VK_EXT_queue_family_foreign<br>
        VK_EXT_image_drm_format_modifi<wbr>er<br>
<br>
    The patch series lives on my tag 'chadv/review/anv-dma-buf-v01'<wbr>.<br>
    <a href="http://git.kiwitree.net/cgit/~chadv/mesa/log/?h=chadv/review/anv-dma-buf-v01" rel="noreferrer" target="_blank">http://git.kiwitree.net/cgit/~<wbr>chadv/mesa/log/?h=chadv/review<wbr>/anv-dma-buf-v01</a><br>
<br>
    The work-in-progress lives on my branch 'wip/anv-dma-buf'.<br>
    <a href="http://git.kiwitree.net/cgit/~chadv/mesa/log/?h=wip/anv-dma-buf" rel="noreferrer" target="_blank">http://git.kiwitree.net/cgit/~<wbr>chadv/mesa/log/?h=wip/anv-dma-<wbr>buf</a><br>
<br>
Specifications:<br>
<br>
    For each extension, you can find a git branch of the Vulkan<br>
    specification, as well as an online build of the spec, at<br>
    <a href="http://kiwitree.net/~chadv/vulkan/" rel="noreferrer" target="_blank">http://kiwitree.net/~chadv/vul<wbr>kan/</a>.<br>
<br>
    All 3 extension specifications are still drafts at various stages in the<br>
    spec lifecycle.<br>
<br>
        - VK_EXT_external_memory_dma_buf<br>
<br>
          I'll ask Khronos tomorrow morning (Wed 8 Nov) to merge this<br>
          extension. That would schedule it for publication no later<br>
          Fri 17 Nov, unless something goes wrong.<br>
<br>
        - VK_EXT_queue_family_foreign<br>
<br>
          This extension is a slow, little thorn in my side. But it's needed<br>
          for spec correctness in the interaction among<br>
          VK_KHR_external_memory + VK_EXT_external_memory_dma_buf<br>
          + VK_EXT_image_drm_format_modifi<wbr>er. In anvil today, in this patch<br>
          series, it's implementation is a no-op.<br>
<br>
          In Khronos, the discussion on this extension is wrapping up.<br>
          I expect to ask Khronos to merge it no later than Wed 15 Nov, but<br>
          hopefully sooner.<br>
<br>
        - VK_EXT_image_drm_format_modifi<wbr>er<br>
<br>
          This is the big extension in the series. Its API is complete, in<br>
          my opinion, and the specification language appears complete to<br>
          the untrained eye. But there remain a few loose ends in the spec<br>
          language that I need to finish before submitting it to Khronos.<br>
          I've documented all the loose ends in the TODO section of the<br>
          extensions's appendix [1].<br>
<br>
          [1]: <a href="http://git.kiwitree.net/cgit/~chadv/vulkan-spec/tree/doc/specs/vulkan/appendices/VK_EXT_image_drm_format_modifier.txt?h=1.0-VK_EXT_image_drm_format_modifier" rel="noreferrer" target="_blank">http://git.kiwitree.net/cgit/~<wbr>chadv/vulkan-spec/tree/doc/spe<wbr>cs/vulkan/appendices/VK_EXT_<wbr>image_drm_format_modifier.txt?<wbr>h=1.0-VK_EXT_image_drm_format_<wbr>modifier</a>].<br>
<br>
          The API is complete, though, modulo review on mesa-dev. So please<br>
          proceed to review the extension language and the implementation.<br>
<br>
Testing:<br>
<br>
    - vkcube<br>
<br>
      I've tested portions of VK_EXT_image_drm_format_modifi<wbr>er with<br>
      a hacked version of krh's vkcube [2]. The following checklist<br>
      shows what I've tested so far.<br>
<br>
        [x] vkGetPhysicalDeviceFormatPrope<wbr>rties2KHR<br>
        [x] vkGetPhysicalDeviceImageFormat<wbr>Properties2KHR<br>
        [x] vkCreateImage<br>
            [x] VkImageDrmFormatModifierListCr<wbr>eateInfoEXT<br>
            [ ] VkImageExplicitDrmFormatModifi<wbr>erEXT<br>
        [ ] Resolves of compression surfaces<br>
        [x] vkGetImageDrmFormatModifierEXT<br>
        [x] vkGetImageSubresouceLayout<br>
<br>
      [2]: vkcube: <a href="http://github.com/chadversary/vkcube/commits/wip/vk-drm-format-mods" rel="noreferrer" target="_blank">http://github.com/chadversary/<wbr>vkcube/commits/wip/vk-drm-form<wbr>at-mods</a><br>
<br>
    - vk-gl-cts<br>
<br>
      I'm doing a full run of dEQP-VK.*. I'm still waiting.<br>
<br>
    - crucible<br>
<br>
      We really need to write crucible tests to hammer some tricky<br>
      corner cases.  I haven't written them yet. Volunteers?<br></blockquote><div><br></div></div></div><div>If you expect anything other than anv to implement this, I think those tests should probably go in vk-gl-cts.  I'm sorry.<br></div></div></div></div></blockquote><div><br></div><div>Also, before we can land the actual implementation of the three VK_EXT extensions, I would like there to be some reasonable level of automated testing.  If this is something that some compositor stack is going to depend on, then I'd really like to not break it randomly.  I'm sorry if that's a bit hard-line, but having dEQP has made us all lazy about actually writing tests for things.<br></div><div><br></div><div>--Jason<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div></div><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Chad Versace (30):<br>
  anv: Remove unused variable 'gen'<br>
  anv: Suffix anv-private 'VK' tokens with 'ANV'<br>
  anv: Refactor get_buffer_format_properties()<br>
  anv: Better types for 'aspect' function params<br>
  anv: Fix get_image_format_properties() - depthstencil (v2)<br>
  anv: Fix get_image_format_properties() - ASTC<br>
  anv: Refactor get_image_format_properties() - plane_format<br>
  anv: Refactor get_image_format_properties() - base_isl_format<br>
  anv: Refactor get_image_format_properties() - Reduce params<br>
  anv: Fix get_image_format_properties() - 3-channel formats<br>
  anv: Fix get_image_format_properties() - YCbCr<br>
  anv: Rename get_image_format_properties()<br>
  anv: Simplify anv_get_image_format_propertie<wbr>s()<br>
  anv: Simplify anv_physical_device_get_format<wbr>_properties()<br>
  anv: Remove anv_physical_device_get_format<wbr>_properties()<br>
  anv: Refactor anv_get_format_plane() - explicit unsupported<br>
  anv/image: Refactor choice of isl_tiling_flags_t<br>
  anv: Refactor anv_GetImageSubresourceLayout(<wbr>)<br>
  HACK: vulkan: Update headers and registry to chadv/1.0-dma-buf@a79a0ab<br>
  HACK: vulkan: Install Vulkan headers<br>
  RFC: anv: Implement VK_EXT_external_memory_dma_buf<br>
  RFC: anv: Implement VK_EXT_queue_family_foreign<br>
  RFC: anv: Support VkDrmFormatModifierPropertiesL<wbr>istEXT<br>
  RFC: anv: Support VkPhysicalDeviceImageDrmFormat<wbr>ModifierInfoEXT<br>
  RFC: anv: Support VkImageDrmFormatModifierListCr<wbr>eateInfoEXT<br>
  RFC: anv: Support vkGetImageSubresourceLayout with modifiers<br>
  RFC: anv: Support VkImageExplicitDrmFormatModifi<wbr>erCreateInfoEXT<br>
  RFC: anv: Enable VK_EXT_image_drm_format_modifi<wbr>er<br>
  RFC: anv: Kill vkCreateDmaBufImageINTEL()<br>
  anv/TODO: Updates for VK_EXT_image_drm_format_modifi<wbr>er<br>
<br>
 include/meson.build                     |  11 +<br>
 include/vulkan/vulkan.h                 |  70 ++++-<br>
 include/vulkan/vulkan_intel.<wbr>h           |  62 -----<br>
 src/amd/vulkan/radv_private.<wbr>h           |   1 -<br>
 src/intel/Makefile.sources              |   1 -<br>
 src/intel/<a href="http://Makefile.vulkan.am" rel="noreferrer" target="_blank">Makefile.vulkan.am</a>            |   3 -<br>
 src/intel/vulkan/TODO                   |  16 ++<br>
 src/intel/vulkan/anv_blorp.c            |   6 +-<br>
 src/intel/vulkan/anv_device.<wbr>c           |  13 +-<br>
 src/intel/vulkan/anv_entrypoi<wbr>nts_gen.py |  10 -<br>
 src/intel/vulkan/anv_extensio<wbr>ns.py      |   3 +<br>
 src/intel/vulkan/anv_formats.<wbr>c          | 475 ++++++++++++++++++++++--------<wbr>--<br>
 src/intel/vulkan/anv_image.c            | 281 ++++++++++++++-----<br>
 src/intel/vulkan/anv_intel.c            | 117 --------<br>
 src/intel/vulkan/anv_private.<wbr>h          |  21 +-<br>
 src/intel/vulkan/genX_cmd_buf<wbr>fer.c      |  24 +-<br>
 src/intel/vulkan/meson.build            |   1 -<br>
 src/vulkan/registry/vk.xml              |  77 +++++-<br>
 18 files changed, 738 insertions(+), 454 deletions(-)<br>
 delete mode 100644 include/vulkan/vulkan_intel.h<br>
 delete mode 100644 src/intel/vulkan/anv_intel.c<br>
<span class="m_5798447591110418663HOEnZb"><font color="#888888"><br>
--<br>
2.13.0<br>
<br>
</font></span></blockquote></div></div></div><br></div></div>
</blockquote></div><br></div></div>