diff options
author | Chad Versace <chadversary@google.com> | 2017-02-21 10:11:07 -0800 |
---|---|---|
committer | Chad Versace <chadversary@chromium.org> | 2017-03-06 10:37:18 -0800 |
commit | eb5f501b9547fc823a16d28955816a6e727a11c5 (patch) | |
tree | 1bbcdbbde272a9c6520c9f27e14fec9cbe4ef882 | |
parent | 941e4f2a41d761ac7f041ae10aaca6ef317a1d87 (diff) | |
download | vulkan-spec-chadv/test/2017-03-06-VK_MESAX_external.zip vulkan-spec-chadv/test/2017-03-06-VK_MESAX_external.tar.xz |
RFC: VK_MESAX_external_image_dma_buf: Add extensionchadv/test/2017-03-06-VK_MESAX_external
- Update vk.xml.
- Add the extension's appendix chapter.
- Don't update the the core spec chapters yet.
This commit just adds the skeletal spec changes. It doesn't modify the
main spec text yet.
See internal issue #604.
-rw-r--r-- | doc/specs/vulkan/appendices/VK_MESAX_external_image_dma_buf.txt | 231 | ||||
-rw-r--r-- | doc/specs/vulkan/appendices/extensions.txt | 4 | ||||
-rw-r--r-- | src/spec/vk.xml | 78 | ||||
-rw-r--r-- | src/vulkan/vulkan.h | 78 |
4 files changed, 388 insertions, 3 deletions
diff --git a/doc/specs/vulkan/appendices/VK_MESAX_external_image_dma_buf.txt b/doc/specs/vulkan/appendices/VK_MESAX_external_image_dma_buf.txt new file mode 100644 index 0000000..fd0db3d --- /dev/null +++ b/doc/specs/vulkan/appendices/VK_MESAX_external_image_dma_buf.txt @@ -0,0 +1,231 @@ +[[VK_MESAX_external_image_dma_buf]] +== VK_MESAX_external_image_dma_buf + +*Name String*:: + +VK_MESAX_external_image_dma_buf+ +*Extension Type*:: + Device extension +*Registered Extension Number*:: + 127 +*Last Modified Date*:: + See git log. +*Revision*:: + 0.6 (Unstable Draft) +*IP Status*:: + Draft +*Dependencies*:: + - This extension is written against version 1.0.42 of the Vulkan API. + - Requires <<VK_MESAX_external_memory_dma_buf>>. + - Requires <<VK_EXT_get_image_properties>>. +*Contributors*:: + - Antoine Labour, Google <piman@chromium.org> + - Chad Versace, Google <chadversary@chromium.org> + - James Jones <jajones@nvidia.com> + - Jason Ekstrand <jason.ekstrand@intel.com> + - Kristian Høgsberg Kristensen <hoegsberg@chromium.org> +*Contact*:: + - Chad Versace, Google <chadversary@chromium.org> + +TODO: Write overview. + +=== New Object Types + +None. + +=== New Enum Constants + + * Extending elink:VkStructureType: + ** ename:VK_STRUCTURE_TYPE_DMA_BUF_FORMAT_PROPERTIES_MESAX + ** ename:VK_STRUCTURE_TYPE_DMA_BUF_IMAGE_FORMAT_PROPERTIES_MESAX + ** ename:VK_STRUCTURE_TYPE_IMPORT_IMAGE_DMA_BUF_INFO_MESAX + ** ename:VK_STRUCTURE_TYPE_EXPORT_IMAGE_DMA_BUF_INFO_MESAX + ** ename:VK_STRUCTURE_TYPE_IMAGE_DMA_BUF_PROPERTIES_MESAX + +=== New Enums + +None. + +=== New Structs + + * slink:VkDmaBufFormatPropertiesMESAX + * slink:VkDmaBufFormatModifierPropertiesMESAX + * slink:VkDmaBufImageFormatPropertiesMESAX + * slink:VkDmaBufImageFormatModifierPropertiesMESAX + * slink:VkImportImageDmaBufInfoMESAX + * slink:VkImportImageDmaBufPlaneInfoMESAX + * slink:VkExportImageDmaBufInfoMESAX + * slink:VkImageDmaBufPropertiesMESAX + * slink:VkImageDmaBufPlanePropertiesMESAX + +=== New Functions + +None. + +=== Issues + +1. Does this extension support external images with planar formats (such as +YUV)? ++ +*RESOLVED*. This extension alone does not provide that support. Vulkan 1.0 +defines no planar VkFormat, and this extension is not the appropriate place to +do so. However, future extensions may leverage +VkImportImageDmaBufPlaneInfoMESAX to provide support for external images with +planar formats. ++ +However, even for non-planar formats, a DRM format modifier can require +multiple planes. For example, consider an external image with format +VK_FORMAT_R8G8B8A8_UNORM and with hypothetical DRM format modifier +DRM_FORMAT_MOD_CLEVER_COMPRESSION. Suppose that the documentation for +DRM_FORMAT_MOD_CLEVER_COMPRESSION specifies that the image consists of two +planes, where the first is the primary plane and the second is a compression +metadata plane. Then the application would import such an image with: ++ +................................................................................ + VkImportImageDmaBufInfoMESAX info = { + .sType = VK_STRUCTURE_TYPE_IMPORT_IMAGE_DMA_BUF_INFO_MESAX, + .drmFormatModifier = DRM_FORMAT_MOD_CLEVER_COMPRESSION, + .planeCount = 2, + .pPlanes = (VkImportImageDmaBufPlaneInfoMESAX[]) { + /*primaryPlane*/ { .offset = ..., .size = ..., .rowPitch = ..., }, + /*metadataPlane*/ { .offset = ..., .size = ..., .rowpitch = ..., }, + }, + }; +................................................................................ + +2. Should VkImportImageDmaBufInfoMESAX define a single DRM format modifier +per VkImage? Or define one per plane? ++ +*RESOLVED*. There exists a single DRM format modifier per VkImage. ++ +Even though [EGL_EXT_image_dma_buf_import_modifiers] and the kernel's DRM APIs +(see [drm_mode_fb_cmd2]) allow defining one modifier per plane, developers of +those APIs concede it was a mistake. The kernel's modesetting APIs will, +beginning in Linux 4.10, enforce that the user provides the same DRM format +modifier for each plane. ++ +See Linux commit <https://cgit.freedesktop.org/~airlied/linux/commit/?h=drm-next&id=bae781b259269590109e8a4a8227331362b88212>. + +3. What should this extension be named? ++ +*PROPOSAL*. VK_MESAX_external_image_dma_buf ++ +*DISCUSSION*. The "dma_buf" in VK_MESAX_external_image_dma_buf is misleading +because the feature is about DRM format modifiers and not dma_bufs. However, +the extension is closely related to VK_MESAX_external_memory_dma_buf and +[EGL_EXT_image_dma_buf_import_modifiers]. + +4. Should structs slink:VkImportImageDmaBufInfoMESAX and +slink:VkImageDmaBufPropertiesMESAX remain separate or be merged into +a single struct? ++ +*DISCUSSION*. The two structs are identical other than the constness of their +member pointers. They differ only in how they are used: one is an input to +flink:vkCreateImage and the other is an output from +flink:vkGetImagePropertiesEXT. Maintaining separate structs will prevent +static type errors and may simplify the specification text, but may appear +awkward to some developers. + +5. Should this extension assign an explicit size to each plane? Or should the +plane's size be defined implicitly its row pitch? Specifically, should +slink:VkImportImageDmaBufImagePlaneInfoMESAX and +slink:VkImageDmaBufPlanePropertiesMESAX +have a pname:size member in addition to pname:rowPitch? ++ +*DISCUSSION*. Related APIs do not define an explicit size to each plane. +They define only the plane's offset and row pitch. +See the EGL extensions +[EGL_EXT_image_dma_buf_import], +[EGL_EXT_image_dma_buf_import_modifiers], +and [EGL_MESA_image_dma_buf_export]; +see [struct drm_mode_fb_cmd2] in the Linux kernel's userspace api; +and see [gbm.h]. ++ +However, Vulkan differs from the above APIs in significant ways that influence +this issue. ++ +.. **Separation of image creation and memory binding.** +When importing a dma_buf image into EGL and GBM, the API creates the image +(EGLImage or gbm_bo) and binds it to memory (the dma_buf) simultaneously. In +Vulkan, not only are image creation and memory binding separate, but the user +may create the image even before memory is allocated. This difference allows +EGL and GBM to query the dma_buf's size before image creation; Vulkan cannot. + +.. **Dedicated memory.** +When importing or exporting a dma_buf image in the above non-Vulkan APIs, +common practice mandates that the dma_buf memory is dedicated to the image, in +the sense of `VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHX`. In +particular, neither the GBM documentation nor the EGL extension specifications +explicitly state this requirement, but this is likely due to +under-specification rather than intentional omission. In contrast, this +extension does not require that the implementation report +`VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHX` for external dma_buf +memory. ++ +Points 1 and 2 influence this issue because, in special cases, the plane's +height and row pitch may not be sufficient to determine the plane's actual +size. For example, this case could occur if the plane has +implementation-specific vertical padding requirements; or if there exists +subtle disagreement between the current Vulkan instance and the dma_buf's +external consumers on how the plane's size should be calculated, which is +a real concern for exotic DRM format modifiers. ++ +*PROPOSED SOLUTION*. Assign an explicit size to each plane. It reduces security +risks. It eliminates ambiguity when the plane's height and row pitch are +insufficient to determine the plane's actual size. It conforms to Vulkan's +overall attitude of preferring explicit rather than implicit. And it has no +apparent disadvantages. + +6. Should suppoort for DRM format modifiers be moved to a separate extension? ++ +*DISCUSSION*. People have argued for the split, pointing out that EGL has +a similar split ([EGL_EXT_image_dma_buf_import_modifiers] is layered atop +[EGL_EXT_image_dma_buf_import]). The EGL split has been beneficial to drivers +that don't yet define any DRM format modifiers in drm_fourcc.h. ++ +People have argued against the split, claiming that the split in EGL is +a historical accident. They argue that the Linux ecosystem has recently +standardized on DRM format modifiers and that Vulkan should avoid supporting +legacy methods for dma_buf sharing. ++ +*UNRESOLVED.* Feedback from more developers is needed. + +==== Version History + + * Revision 0.7, 2017-03-06 (Chad Versace) + - Require +VK_EXT_get_image_properties+. + - Replace query fname:vkExportDmaBufImageMESAX with + fname:vkGetImagePropertiesEXT and sname:VkImageDmaBufPropertiesMESAX. + - Rename structs to clarify their usage. + + * Revision 0.6, 2017-02-27 (Chad Versace) + - Add issue #6, should support for DRM format modifiers be moved to + a separate extensions. + + * Revision 0.5, 2017-02-26 (Chad Versace) + - Add issue #5 regarding explicit plane size. + + * Revision 0.4, 2017-02-22 (Chad Versace) + - Replace vendor prefix EXT with MESAX because this is an experimental + extension. + - Expand resolution to isse #1 with an example. + + * Revision 0.3, 2016-12-08 (Chad Versace) + - Split into VK_EXT_external_memory_dma_buf and + VK_EXT_external_image_dma_buf. + - Add issue #3: What should this extension be named? + + * Revision 0.2, 2016-12-08 (Chad Versace) + - Resolve issue #2. One DRM format modifier exists per VkImage. + + * Revision 0.1, 2012-12-02 (Chad Versace) + - Initial draft + + +==== References +FIXME: Invalid asciidoc syntax + +[EGL_EXT_image_dma_buf_import]: https://https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt +[EGL_EXT_image_dma_buf_import_modifiers]: https://https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt +[EGL_MESA_image_dma_buf_export]: https://https://www.khronos.org/registry/EGL/extensions/MESA/EGL_MESA_image_dma_buf_export.txt +[struct drm_mode_fb_cmd2]: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/drm/drm_mode.h?id=refs/tags/v4.10#n392 +[gbm.h]: https://cgit.freedesktop.org/mesa/mesa/tree/src/gbm/main/gbm.h?h=17.0 diff --git a/doc/specs/vulkan/appendices/extensions.txt b/doc/specs/vulkan/appendices/extensions.txt index 1675233..3712807 100644 --- a/doc/specs/vulkan/appendices/extensions.txt +++ b/doc/specs/vulkan/appendices/extensions.txt @@ -314,6 +314,10 @@ ifdef::VK_MESAX_external_memory_dma_buf[] include::VK_MESAX_external_memory_dma_buf.txt[] endif::VK_MESAX_external_memory_dma_buf[] +ifdef::VK_MESAX_external_image_dma_buf[] +include::VK_MESAX_external_image_dma_buf.txt[] +endif::VK_MESAX_external_image_dma_buf[] + // == NVIDIA `NV` Vendor Extensions // // :leveloffset: 2 diff --git a/src/spec/vk.xml b/src/spec/vk.xml index fdb8c5d..1102647 100644 --- a/src/spec/vk.xml +++ b/src/spec/vk.xml @@ -2235,6 +2235,62 @@ maintained in the master branch of the Khronos Vulkan GitHub project. <member values="VK_STRUCTURE_TYPE_IMAGE_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member> <member><type>void</type>* <name>pNext</name></member> </type> + <type category="struct" name="VkDmaBufFormatModifierPropertiesMESAX"> + <member><type>uint64_t</type> <name>drmFormatModifier</name></member> + <member><type>VkFormatFeatureFlags</type> <name>imageFeatures</name></member> + </type> + <type category="struct" name="VkDmaBufFormatPropertiesMESAX"> + <member values="VK_STRUCTURE_TYPE_DMA_BUF_FORMAT_PROPERTIES_MESAX"><type>VkStructureType</type> <name>sType</name></member> + <member><type>void</type>* <name>pNext</name></member> + <member optional="true"><type>uint32_t</type> <name>modifierCount</name></member> + <member optional="true" len="modifierCount"><type>VkDmaBufFormatModifierPropertiesMESAX</type>* <name>pModifierProperties</name></member> + </type> + <type category="struct" name="VkDmaBufImageFormatModifierPropertiesMESAX"> + <member><type>uint64_t</type> <name>drmFormatModifier</name></member> + <member><type>VkDeviceSize</type> <name>maxRowPitch</name></member> + <member><type>VkDeviceSize</type> <name>rowPitchAlignment</name></member> + <member><type>VkImageFormatProperties</type> <name>imageFormatProperties</name></member> + </type> + <type category="struct" name="VkDmaBufImageFormatPropertiesMESAX"> + <member values="VK_STRUCTURE_TYPE_DMA_BUF_IMAGE_FORMAT_PROPERTIES_MESAX"><type>VkStructureType</type> <name>sType</name></member> + <member><type>void</type>* <name>pNext</name></member> + <member optional="true"><type>uint32_t</type> <name>modifierCount</name></member> + <member optional="true" len="modifierCount"><type>VkDmaBufImageFormatModifierPropertiesMESAX</type>* <name>pModifierProperties</name></member> + </type> + <type category="struct" name="VkImportImageDmaBufPlaneInfoMESAX"> + <member><type>VkDeviceSize</type> <name>offset</name></member> + <member><type>VkDeviceSize</type> <name>size</name></member> + <member><type>VkDeviceSize</type> <name>rowPitch</name></member> + </type> + <type category="struct" name="VkImportImageDmaBufInfoMESAX"> + <member values="VK_STRUCTURE_TYPE_IMPORT_IMAGE_DMA_BUF_INFO_MESAX"><type>VkStructureType</type> <name>sType</name></member> + <member>const <type>void</type>* <name>pNext</name></member> + <member><type>uint64_t</type> <name>drmFormatModifier</name></member> + <member optional="true"><type>uint32_t</type> <name>planeCount</name></member> + <member len="planeCount">const <type>VkImportImageDmaBufPlaneInfoMESAX</type>* <name>pPlanes</name></member> + </type> + <type category="struct" name="VkExportImageDmaBufInfoMESAX"> + <member values="VK_STRUCTURE_TYPE_EXPORT_IMAGE_DMA_BUF_INFO_MESAX"><type>VkStructureType</type> <name>sType</name></member> + <member>const <type>void</type>* <name>pNext</name></member> + <member optional="true"><type>uint32_t</type> <name>drmFormatModifierCount</name></member> + <member len="drmFormatModifierCount">const <type>uint64_t</type>* <name>pDrmFormatModifiers</name></member> + </type> + <type category="struct" name="VkImagePropertiesMESAX"> + <member values="VK_STRUCTURE_TYPE_IMAGE_PROPERTIES_MESAX"><type>VkStructureType</type> <name>sType</name></member> + <member><type>void</type>* <name>pNext</name></member> + </type> + <type category="struct" name="VkImageDmaBufPlanePropertiesMESAX"> + <member><type>VkDeviceSize</type> <name>offset</name></member> + <member><type>VkDeviceSize</type> <name>size</name></member> + <member><type>VkDeviceSize</type> <name>rowPitch</name></member> + </type> + <type category="struct" name="VkImageDmaBufPropertiesMESAX"> + <member values="VK_STRUCTURE_TYPE_IMAGE_DMA_BUF_PROPERTIES_MESAX"><type>VkStructureType</type> <name>sType</name></member> + <member><type>void</type>* <name>pNext</name></member> + <member><type>uint64_t</type> <name>drmFormatModifier</name></member> + <member optional="true"><type>uint32_t</type> <name>planeCount</name></member> + <member optional="true" len="planeCount"><type>VkImageDmaBufPlanePropertiesMESAX</type>* <name>pPlanes</name></member> + </type> </types> <!-- SECTION: Vulkan enumerant (token) definitions. --> @@ -6199,10 +6255,26 @@ maintained in the master branch of the Khronos Vulkan GitHub project. <enum bitpos="17" extends="VkExternalMemoryHandleTypeFlagBitsKHX" name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_MESAX"/> </require> </extension> - <extension name="VK_MESA_extension_127" number="127" author="MESA" contact="Chad Versace @chadversary" supported="disabled"> + <extension name="VK_MESAX_external_image_dma_buf" number="127" type="device" requires="VK_MESAX_external_memory_dma_buf" author="MESA" contact="Chad Versace @chadversary" supported="vulkan"> <require> - <enum value="0" name="VK_MESA_EXTENSION_127_SPEC_VERSION"/> - <enum value=""VK_MESA_extension_127"" name="VK_MESA_EXTENSION_127_EXTENSION_NAME"/> + <enum value="0" name="VK_MESAX_EXTERNAL_IMAGE_DMA_BUF_SPEC_VERSION"/> + <enum value=""VK_MESAX_external_image_dma_buf"" name="VK_MESAX_EXTERNAL_IMAGE_DMA_BUF_EXTENSION_NAME"/> + <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DMA_BUF_FORMAT_PROPERTIES_MESAX"/> + <enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DMA_BUF_IMAGE_FORMAT_PROPERTIES_MESAX"/> + <enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_IMPORT_IMAGE_DMA_BUF_INFO_MESAX"/> + <enum offset="3" extends="VkStructureType" name="VK_STRUCTURE_TYPE_EXPORT_IMAGE_DMA_BUF_INFO_MESAX"/> + <enum offset="4" extends="VkStructureType" name="VK_STRUCTURE_TYPE_IMAGE_PROPERTIES_MESAX"/> + <enum offset="5" extends="VkStructureType" name="VK_STRUCTURE_TYPE_IMAGE_DMA_BUF_PROPERTIES_MESAX"/> + <type name="VkDmaBufFormatPropertiesMESAX"/> + <type name="VkDmaBufFormatModifierPropertiesMESAX"/> + <type name="VkDmaBufImageFormatPropertiesMESAX"/> + <type name="VkDmaBufImageFormatModifierPropertiesMESAX"/> + <type name="VkImportImageDmaBufInfoMESAX"/> + <type name="VkImportImageDmaBufPlaneInfoMESAX"/> + <type name="VkExportImageDmaBufInfoMESAX"/> + <type name="VkImagePropertiesMESAX"/> + <type name="VkImageDmaBufPropertiesMESAX"/> + <type name="VkImageDmaBufPlanePropertiesMESAX"/> </require> </extension> <extension name="VK_EXT_get_image_properties" number="200" type="device" author="EXT" contact="Chad Versace @chadversary" supported="vulkan"> diff --git a/src/vulkan/vulkan.h b/src/vulkan/vulkan.h index 4f21ee4..74fba10 100644 --- a/src/vulkan/vulkan.h +++ b/src/vulkan/vulkan.h @@ -300,6 +300,12 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001, VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000, VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000, + VK_STRUCTURE_TYPE_DMA_BUF_FORMAT_PROPERTIES_MESAX = 1000126000, + VK_STRUCTURE_TYPE_DMA_BUF_IMAGE_FORMAT_PROPERTIES_MESAX = 1000126001, + VK_STRUCTURE_TYPE_IMPORT_IMAGE_DMA_BUF_INFO_MESAX = 1000126002, + VK_STRUCTURE_TYPE_EXPORT_IMAGE_DMA_BUF_INFO_MESAX = 1000126003, + VK_STRUCTURE_TYPE_IMAGE_PROPERTIES_MESAX = 1000126004, + VK_STRUCTURE_TYPE_IMAGE_DMA_BUF_PROPERTIES_MESAX = 1000126005, VK_STRUCTURE_TYPE_IMAGE_PROPERTIES_EXT = 1000199000, VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO, VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO, @@ -5732,6 +5738,78 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK( #define VK_MESAX_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME "VK_MESAX_external_memory_dma_buf" +#define VK_MESAX_external_image_dma_buf 1 +#define VK_MESAX_EXTERNAL_IMAGE_DMA_BUF_SPEC_VERSION 0 +#define VK_MESAX_EXTERNAL_IMAGE_DMA_BUF_EXTENSION_NAME "VK_MESAX_external_image_dma_buf" + +typedef struct VkDmaBufFormatModifierPropertiesMESAX { + uint64_t drmFormatModifier; + VkFormatFeatureFlags imageFeatures; +} VkDmaBufFormatModifierPropertiesMESAX; + +typedef struct VkDmaBufFormatPropertiesMESAX { + VkStructureType sType; + void* pNext; + uint32_t modifierCount; + VkDmaBufFormatModifierPropertiesMESAX* pModifierProperties; +} VkDmaBufFormatPropertiesMESAX; + +typedef struct VkDmaBufImageFormatModifierPropertiesMESAX { + uint64_t drmFormatModifier; + VkDeviceSize maxRowPitch; + VkDeviceSize rowPitchAlignment; + VkImageFormatProperties imageFormatProperties; +} VkDmaBufImageFormatModifierPropertiesMESAX; + +typedef struct VkDmaBufImageFormatPropertiesMESAX { + VkStructureType sType; + void* pNext; + uint32_t modifierCount; + VkDmaBufImageFormatModifierPropertiesMESAX* pModifierProperties; +} VkDmaBufImageFormatPropertiesMESAX; + +typedef struct VkImportImageDmaBufPlaneInfoMESAX { + VkDeviceSize offset; + VkDeviceSize size; + VkDeviceSize rowPitch; +} VkImportImageDmaBufPlaneInfoMESAX; + +typedef struct VkImportImageDmaBufInfoMESAX { + VkStructureType sType; + const void* pNext; + uint64_t drmFormatModifier; + uint32_t planeCount; + const VkImportImageDmaBufPlaneInfoMESAX* pPlanes; +} VkImportImageDmaBufInfoMESAX; + +typedef struct VkExportImageDmaBufInfoMESAX { + VkStructureType sType; + const void* pNext; + uint32_t drmFormatModifierCount; + const uint64_t* pDrmFormatModifiers; +} VkExportImageDmaBufInfoMESAX; + +typedef struct VkImagePropertiesMESAX { + VkStructureType sType; + void* pNext; +} VkImagePropertiesMESAX; + +typedef struct VkImageDmaBufPlanePropertiesMESAX { + VkDeviceSize offset; + VkDeviceSize size; + VkDeviceSize rowPitch; +} VkImageDmaBufPlanePropertiesMESAX; + +typedef struct VkImageDmaBufPropertiesMESAX { + VkStructureType sType; + void* pNext; + uint64_t drmFormatModifier; + uint32_t planeCount; + VkImageDmaBufPlanePropertiesMESAX* pPlanes; +} VkImageDmaBufPropertiesMESAX; + + + #define VK_EXT_get_image_properties 1 #define VK_EXT_GET_IMAGE_PROPERTIES_SPEC_VERSION 1 #define VK_EXT_GET_IMAGE_PROPERTIES_EXTENSION_NAME "VK_EXT_get_image_properties" |