[Mesa-dev] [RFC PATCH v1 00/30] anv: dma-buf and DRM format modifiers

Chad Versace chadversary at chromium.org
Tue Nov 7 14:47:41 UTC 2017


Overview:

    This series implements 3 extensions:

        VK_EXT_external_memory_dma_buf
        VK_EXT_queue_family_foreign
        VK_EXT_image_drm_format_modifier

    The patch series lives on my tag 'chadv/review/anv-dma-buf-v01'.
    http://git.kiwitree.net/cgit/~chadv/mesa/log/?h=chadv/review/anv-dma-buf-v01

    The work-in-progress lives on my branch 'wip/anv-dma-buf'.
    http://git.kiwitree.net/cgit/~chadv/mesa/log/?h=wip/anv-dma-buf

Specifications:

    For each extension, you can find a git branch of the Vulkan
    specification, as well as an online build of the spec, at
    http://kiwitree.net/~chadv/vulkan/.

    All 3 extension specifications are still drafts at various stages in the
    spec lifecycle.

        - VK_EXT_external_memory_dma_buf

          I'll ask Khronos tomorrow morning (Wed 8 Nov) to merge this
          extension. That would schedule it for publication no later
          Fri 17 Nov, unless something goes wrong.

        - VK_EXT_queue_family_foreign

          This extension is a slow, little thorn in my side. But it's needed
          for spec correctness in the interaction among
          VK_KHR_external_memory + VK_EXT_external_memory_dma_buf
          + VK_EXT_image_drm_format_modifier. In anvil today, in this patch
          series, it's implementation is a no-op.

          In Khronos, the discussion on this extension is wrapping up.
          I expect to ask Khronos to merge it no later than Wed 15 Nov, but
          hopefully sooner.

        - VK_EXT_image_drm_format_modifier

          This is the big extension in the series. Its API is complete, in
          my opinion, and the specification language appears complete to
          the untrained eye. But there remain a few loose ends in the spec
          language that I need to finish before submitting it to Khronos.
          I've documented all the loose ends in the TODO section of the
          extensions's appendix [1].

          [1]: 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].

          The API is complete, though, modulo review on mesa-dev. So please
          proceed to review the extension language and the implementation.

Testing:

    - vkcube

      I've tested portions of VK_EXT_image_drm_format_modifier with
      a hacked version of krh's vkcube [2]. The following checklist
      shows what I've tested so far.

        [x] vkGetPhysicalDeviceFormatProperties2KHR
        [x] vkGetPhysicalDeviceImageFormatProperties2KHR
        [x] vkCreateImage
            [x] VkImageDrmFormatModifierListCreateInfoEXT
            [ ] VkImageExplicitDrmFormatModifierEXT
        [ ] Resolves of compression surfaces
        [x] vkGetImageDrmFormatModifierEXT
        [x] vkGetImageSubresouceLayout

      [2]: vkcube: http://github.com/chadversary/vkcube/commits/wip/vk-drm-format-mods

    - vk-gl-cts

      I'm doing a full run of dEQP-VK.*. I'm still waiting.

    - crucible

      We really need to write crucible tests to hammer some tricky
      corner cases.  I haven't written them yet. Volunteers?

Chad Versace (30):
  anv: Remove unused variable 'gen'
  anv: Suffix anv-private 'VK' tokens with 'ANV'
  anv: Refactor get_buffer_format_properties()
  anv: Better types for 'aspect' function params
  anv: Fix get_image_format_properties() - depthstencil (v2)
  anv: Fix get_image_format_properties() - ASTC
  anv: Refactor get_image_format_properties() - plane_format
  anv: Refactor get_image_format_properties() - base_isl_format
  anv: Refactor get_image_format_properties() - Reduce params
  anv: Fix get_image_format_properties() - 3-channel formats
  anv: Fix get_image_format_properties() - YCbCr
  anv: Rename get_image_format_properties()
  anv: Simplify anv_get_image_format_properties()
  anv: Simplify anv_physical_device_get_format_properties()
  anv: Remove anv_physical_device_get_format_properties()
  anv: Refactor anv_get_format_plane() - explicit unsupported
  anv/image: Refactor choice of isl_tiling_flags_t
  anv: Refactor anv_GetImageSubresourceLayout()
  HACK: vulkan: Update headers and registry to chadv/1.0-dma-buf at a79a0ab
  HACK: vulkan: Install Vulkan headers
  RFC: anv: Implement VK_EXT_external_memory_dma_buf
  RFC: anv: Implement VK_EXT_queue_family_foreign
  RFC: anv: Support VkDrmFormatModifierPropertiesListEXT
  RFC: anv: Support VkPhysicalDeviceImageDrmFormatModifierInfoEXT
  RFC: anv: Support VkImageDrmFormatModifierListCreateInfoEXT
  RFC: anv: Support vkGetImageSubresourceLayout with modifiers
  RFC: anv: Support VkImageExplicitDrmFormatModifierCreateInfoEXT
  RFC: anv: Enable VK_EXT_image_drm_format_modifier
  RFC: anv: Kill vkCreateDmaBufImageINTEL()
  anv/TODO: Updates for VK_EXT_image_drm_format_modifier

 include/meson.build                     |  11 +
 include/vulkan/vulkan.h                 |  70 ++++-
 include/vulkan/vulkan_intel.h           |  62 -----
 src/amd/vulkan/radv_private.h           |   1 -
 src/intel/Makefile.sources              |   1 -
 src/intel/Makefile.vulkan.am            |   3 -
 src/intel/vulkan/TODO                   |  16 ++
 src/intel/vulkan/anv_blorp.c            |   6 +-
 src/intel/vulkan/anv_device.c           |  13 +-
 src/intel/vulkan/anv_entrypoints_gen.py |  10 -
 src/intel/vulkan/anv_extensions.py      |   3 +
 src/intel/vulkan/anv_formats.c          | 475 ++++++++++++++++++++++----------
 src/intel/vulkan/anv_image.c            | 281 ++++++++++++++-----
 src/intel/vulkan/anv_intel.c            | 117 --------
 src/intel/vulkan/anv_private.h          |  21 +-
 src/intel/vulkan/genX_cmd_buffer.c      |  24 +-
 src/intel/vulkan/meson.build            |   1 -
 src/vulkan/registry/vk.xml              |  77 +++++-
 18 files changed, 738 insertions(+), 454 deletions(-)
 delete mode 100644 include/vulkan/vulkan_intel.h
 delete mode 100644 src/intel/vulkan/anv_intel.c

-- 
2.13.0



More information about the mesa-dev mailing list