VkImageDrmFormatModifierExplicitCreateInfoEXT
If the pNext
chain of VkImageCreateInfo includes a
VkImageDrmFormatModifierExplicitCreateInfoEXT structure, then the
image will be created with the Linux DRM
format modifier and memory layout defined by the structure.
The VkImageDrmFormatModifierExplicitCreateInfoEXT structure is defined as:
typedef struct VkImageDrmFormatModifierExplicitCreateInfoEXT {
VkStructureType sType;
const void* pNext;
uint64_t drmFormatModifier;
uint32_t drmFormatModifierPlaneCount;
const VkSubresourceLayout* pPlaneLayouts;
} VkImageDrmFormatModifierExplicitCreateInfoEXT;
sType
is a VkStructureType value identifying this structure.pNext
isNULL
or a pointer to a structure extending this structure.drmFormatModifier
is the Linux DRM format modifier with which the image will be created.drmFormatModifierPlaneCount
is the number of memory planes in the image (as reported by VkDrmFormatModifierPropertiesEXT) as well as the length of thepPlaneLayouts
array.pPlaneLayouts
is a pointer to an array of VkSubresourceLayout structures describing the image’s memory planes.
The i
th member of pPlaneLayouts
describes the layout of the
image’s i
th memory plane (that is,
VK_IMAGE_ASPECT_MEMORY_PLANE*_i_*BIT_EXT).
In each element of pPlaneLayouts
, the implementation must ignore
size
.
The implementation calculates the size of each plane, which the application
can query with vkGetImageSubresourceLayout.
When creating an image with
VkImageDrmFormatModifierExplicitCreateInfoEXT, it is the application’s
responsibility to satisfy all valid usage requirements.
However, the implementation must validate that the provided
pPlaneLayouts
, when combined with the provided drmFormatModifier
and other creation parameters in VkImageCreateInfo and its pNext
chain, produce a valid image.
(This validation is necessarily implementation-dependent and outside the
scope of Vulkan, and therefore not described by valid usage requirements).
If this validation fails, then vkCreateImage returns
VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT
.
Valid Usage
VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifier-02264
drmFormatModifier
must be compatible with the parameters in
VkImageCreateInfo and its pNext
chain, as determined by
querying VkPhysicalDeviceImageFormatInfo2 extended with
VkPhysicalDeviceImageDrmFormatModifierInfoEXT
VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifierPlaneCount-02265
drmFormatModifierPlaneCount
must be equal to the
VkDrmFormatModifierPropertiesEXT::drmFormatModifierPlaneCount
associated with VkImageCreateInfo::format
and
drmFormatModifier
, as found by querying
VkDrmFormatModifierPropertiesListEXT
VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-size-02267
For each element of pPlaneLayouts
, size
must be 0
VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-arrayPitch-02268
For each element of pPlaneLayouts
, arrayPitch
must be 0 if
VkImageCreateInfo::arrayLayers
is 1
VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-depthPitch-02269
For each element of pPlaneLayouts
, depthPitch
must be 0 if
VkImageCreateInfo::extent.depth
is 1
Valid Usage (Implicit)
VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-sType-sType
sType
must be VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT
VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-pPlaneLayouts-parameter
pPlaneLayouts
must be a valid pointer to an array of drmFormatModifierPlaneCount
VkSubresourceLayout structures
VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifierPlaneCount-arraylength
drmFormatModifierPlaneCount
must be greater than 0