Random VK_ANDROID_external_memory_android_hardware_buffer cleanup

This commit is contained in:
Petr Kraus 2018-04-09 22:18:25 +02:00
parent ee13fc355f
commit d84e6a27ca
8 changed files with 303 additions and 298 deletions

View File

@ -1,7 +1,5 @@
include::meta/VK_ANDROID_external_memory_android_hardware_buffer.txt[] include::meta/VK_ANDROID_external_memory_android_hardware_buffer.txt[]
*Status*::
Draft
*Last Modified Date*:: *Last Modified Date*::
2018-03-04 2018-03-04
*IP Status*:: *IP Status*::
@ -16,19 +14,19 @@ include::meta/VK_ANDROID_external_memory_android_hardware_buffer.txt[]
- Matthew Netsch, Qualcomm - Matthew Netsch, Qualcomm
- Andrew Garrard, Samsung - Andrew Garrard, Samsung
This extension enables an application to import Android AHardwareBuffer This extension enables an application to import Android code:AHardwareBuffer
objects created outside of the Vulkan device into Vulkan memory objects, objects created outside of the Vulkan device into Vulkan memory objects,
where they can be bound to images and buffers. where they can: be bound to images and buffers.
It also allows exporting an +AHardwareBuffer+ from a Vulkan memory object It also allows exporting an code:AHardwareBuffer from a Vulkan memory object
for symmetry with other operating systems. for symmetry with other operating systems.
But since not all +AHardwareBuffer+ usages and formats have Vulkan But since not all code:AHardwareBuffer usages and formats have Vulkan
equivalents, exporting from Vulkan provides strictly less functionality than equivalents, exporting from Vulkan provides strictly less functionality than
creating the +AHardwareBuffer+ externally and importing it. creating the code:AHardwareBuffer externally and importing it.
Some AHardwareBuffer images have implementation-defined _external formats_ Some code:AHardwareBuffer images have implementation-defined _external
that may not correspond to Vulkan formats. formats_ that may: not correspond to Vulkan formats.
Sampler Y'C~b~C~r~ conversion can be used to sample from these images and Sampler Y'C~b~C~r~ conversion can: be used to sample from these images and
convert them to a known colorspace. convert them to a known color space.
=== New Object Types === New Object Types
@ -36,13 +34,16 @@ None.
=== New Enum Constants === New Enum Constants
* ename:VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID * Extending ename:VkStructureType:
* ename:VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID ** ename:VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID
* ename:VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID ** ename:VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID
* ename:VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID ** ename:VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID
* ename:VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID ** ename:VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID
* ename:VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID ** ename:VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID ** ename:VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID
* Extending ename:VkExternalMemoryHandleTypeFlagBits:
** ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
=== New Enums === New Enums
@ -65,9 +66,10 @@ None.
=== Issues === Issues
1) Other external memory objects are represented as weakly-typed handles 1) Other external memory objects are represented as weakly-typed handles
(e.g. Win32 HANDLE or POSIX file descriptor), and require a handle type (e.g. Win32 code:HANDLE or POSIX file descriptor), and require a handle type
parameter along with handles. parameter along with handles.
AHardwareBuffer is strongly typed, so naming the handle type is redundant. code:AHardwareBuffer is strongly typed, so naming the handle type is
redundant.
Does symmetry justify adding handle type parameters/fields anyway? Does symmetry justify adding handle type parameters/fields anyway?
*RESOLVED*: No. *RESOLVED*: No.
@ -75,27 +77,29 @@ The handle type is already provided in places that treat external memory
objects generically. objects generically.
In the places we would add it, the application code that would have to In the places we would add it, the application code that would have to
provide the handle type value is already dealing with provide the handle type value is already dealing with
AHardwareBuffer-specific commands/structures; the extra symmetry wouldn't be code:AHardwareBuffer-specific commands/structures; the extra symmetry
enough to make that code generic. would not be enough to make that code generic.
2) The internal layout and therefore size of a AHardwareBuffer image may 2) The internal layout and therefore size of a code:AHardwareBuffer image
depend on native usage flags that don't have corresponding Vulkan may depend on native usage flags that do not have corresponding Vulkan
counterparts. counterparts.
Do we provide this info to vkCreateImage somehow, or allow the allocation Do we provide this info to flink:vkCreateImage somehow, or allow the
size reported by vkGetImageMemoryRequirements to be approximate? allocation size reported by flink:vkGetImageMemoryRequirements to be
approximate?
*RESOLVED*: Allow the allocation size to be unspecified when allocating the *RESOLVED*: Allow the allocation size to be unspecified when allocating the
memory. memory.
It has to work this way for exported image memory anyway, since It has to work this way for exported image memory anyway, since
AHardwareBuffer allocation happens in vkAllocateMemory, and internally is code:AHardwareBuffer allocation happens in flink:vkAllocateMemory, and
performed by a separate HAL, not the Vulkan implementation itself. internally is performed by a separate HAL, not the Vulkan implementation
There is a similar issue with vkGetImageSubresourceLayout: the layout is itself.
determined by the allocator HAL, so it isn't known until the image is bound There is a similar issue with flink:vkGetImageSubresourceLayout: the layout
to memory. is determined by the allocator HAL, so it is not known until the image is
bound to memory.
3) Should the result of sampling an external-format image with the suggested 3) Should the result of sampling an external-format image with the suggested
Y'C~b~C~r~ conversion parameters yield the same results as using a Y'C~b~C~r~ conversion parameters yield the same results as using a
samplerExternalOES in OpenGL ES? code:samplerExternalOES in OpenGL ES?
*RESOLVED*: This would be desirable, so that apps converting from OpenGL ES *RESOLVED*: This would be desirable, so that apps converting from OpenGL ES
to Vulkan could get the same output given the same input. to Vulkan could get the same output given the same input.
@ -110,29 +114,30 @@ Implementations are encouraged to minimize differences as much as possible
without causing compatibility problems for existing OpenGL ES applications without causing compatibility problems for existing OpenGL ES applications
or violating Vulkan requirements. or violating Vulkan requirements.
4) Should AHardwareBuffers with +AHARDWAREBUFFER_USAGE_CPU_*+ usage be 4) Should an code:AHardwareBuffer with code:AHARDWAREBUFFER_USAGE_CPU_*
mappable in Vulkan? Should it be possible to export AHardwareBuffers with usage be mappable in Vulkan? Should it be possible to export an
such usage? code:AHardwareBuffers with such usage?
*RESOLVED*: Optional, and mapping in Vulkan is not the same as *RESOLVED*: Optional, and mapping in Vulkan is not the same as
+AHardwareBuffer_lock+. code:AHardwareBuffer_lock.
The semantics of these are different: mapping in memory is persistent, just The semantics of these are different: mapping in memory is persistent, just
gives a raw view of the memory contents, and doesn't involve ownership. gives a raw view of the memory contents, and does not involve ownership.
+AHardwareBuffer_lock+ gives the host exclusive access to the buffer, is code:AHardwareBuffer_lock gives the host exclusive access to the buffer, is
temporary, and allows for reformatting copy-in/copy-out. temporary, and allows for reformatting copy-in/copy-out.
Implementations aren't required to support host-visible memory types for Implementations are not required to support host-visible memory types for
imported Android hardware buffers or resources backed by them. imported Android hardware buffers or resources backed by them.
If a host-visible memory type is supported and used, the memory can be If a host-visible memory type is supported and used, the memory can be
mapped in Vulkan, but doing so follows Vulkan semantics: it's just a raw mapped in Vulkan, but doing so follows Vulkan semantics: it is just a raw
view of the data and doesn't imply ownership (this means implementations view of the data and does not imply ownership (this means implementations
must not internally call +AHardwareBuffer_lock+ to implement must not internally call code:AHardwareBuffer_lock to implement
fname:vkMapMemory, or assume the application has done so). flink:vkMapMemory, or assume the application has done so).
Implementations aren't required to support linear-tiled images backed by Implementations are not required to support linear-tiled images backed by
Android hardware buffers, even if the +AHardwareBuffer+ has CPU usage. Android hardware buffers, even if the code:AHardwareBuffer has CPU usage.
There is no reliable way to allocate memory in Vulkan that can be exported There is no reliable way to allocate memory in Vulkan that can be exported
to a +AHardwareBuffer+ with CPU usage. to a code:AHardwareBuffer with CPU usage.
5) Android may add new +AHardwareBuffer+ formats and usage flags over time. 5) Android may add new code:AHardwareBuffer formats and usage flags over
time.
Can reference to them be added to this extension, or do they need a new Can reference to them be added to this extension, or do they need a new
extension? extension?
@ -140,12 +145,12 @@ RESOLVED: This extension can document the interaction between the new AHB
formats/usages and existing Vulkan features. formats/usages and existing Vulkan features.
No new Vulkan features or implementation requirements can be added. No new Vulkan features or implementation requirements can be added.
The extension version number will be incremented when this additional The extension version number will be incremented when this additional
documentation is added, but the version number doesn't indicate that an documentation is added, but the version number does not indicate that an
implementaiton supports Vulkan memory or resources that map to the new implementaiton supports Vulkan memory or resources that map to the new
+AHardwareBuffer+ features: support for that must be queried with code:AHardwareBuffer features: support for that must be queried with
flink:vkGetPhysicalDeviceImageFormatProperties2 or is implied by flink:vkGetPhysicalDeviceImageFormatProperties2 or is implied by
successfully allocating a +AHardwareBuffer+ outside of Vulkan that uses the successfully allocating a code:AHardwareBuffer outside of Vulkan that uses
new feature and has a GPU usage flag. the new feature and has a GPU usage flag.
In essence, these are new features added to a new Android API level, rather In essence, these are new features added to a new Android API level, rather
than new Vulkan features. than new Vulkan features.

View File

@ -63,12 +63,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdClearColorImage-image-01935]] * [[VUID-vkCmdClearColorImage-image-01935]]
pname:image must: use a format that supports pname:image must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdClearColorImage-image-00002]] * [[VUID-vkCmdClearColorImage-image-00002]]
@ -181,12 +181,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdClearDepthStencilImage-image-01936]] * [[VUID-vkCmdClearDepthStencilImage-image-01936]]
pname:image must: use a format that supports pname:image must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdClearDepthStencilImage-image-00009]] * [[VUID-vkCmdClearDepthStencilImage-image-00009]]

View File

@ -48,9 +48,9 @@ ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
* Source images must: use a format that supports * Source images must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
sname:VkFormatProperties::pname:linearTilingFeatures or sname:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by sname:VkFormatProperties::pname:optimalTilingFeatures returned by
@ -59,9 +59,9 @@ endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* Destination images must: use a format that supports * Destination images must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
sname:VkFormatProperties::pname:linearTilingFeatures or sname:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by sname:VkFormatProperties::pname:optimalTilingFeatures returned by
@ -360,12 +360,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdCopyImage-srcImage-01938]] * [[VUID-vkCmdCopyImage-srcImage-01938]]
pname:srcImage must: use a format that supports pname:srcImage must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdCopyImage-srcImage-00126]] * [[VUID-vkCmdCopyImage-srcImage-00126]]
@ -413,12 +413,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdCopyImage-dstImage-01939]] * [[VUID-vkCmdCopyImage-dstImage-01939]]
pname:dstImage must: use a format that supports pname:dstImage must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdCopyImage-dstImage-00131]] * [[VUID-vkCmdCopyImage-dstImage-00131]]
@ -939,12 +939,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdCopyBufferToImage-dstImage-01940]] * [[VUID-vkCmdCopyBufferToImage-dstImage-01940]]
pname:dstImage must: use a format that supports pname:dstImage must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdCopyBufferToImage-srcBuffer-00176]] * [[VUID-vkCmdCopyBufferToImage-srcBuffer-00176]]
@ -1077,12 +1077,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdCopyImageToBuffer-srcImage-01941]] * [[VUID-vkCmdCopyImageToBuffer-srcImage-01941]]
pname:srcImage must: use a format that supports pname:srcImage must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdCopyImageToBuffer-srcImage-00186]] * [[VUID-vkCmdCopyImageToBuffer-srcImage-00186]]
@ -1609,12 +1609,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdBlitImage-srcImage-01942]] * [[VUID-vkCmdBlitImage-srcImage-01942]]
pname:srcImage must: use a format that supports pname:srcImage must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
@ -1656,12 +1656,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdBlitImage-dstImage-01943]] * [[VUID-vkCmdBlitImage-dstImage-01943]]
pname:dstImage must: use a format that supports pname:dstImage must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
@ -1728,12 +1728,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
If pname:filter is ename:VK_FILTER_LINEAR, pname:srcImage must: be of a If pname:filter is ename:VK_FILTER_LINEAR, pname:srcImage must: be of a
format which supports linear filtering, as specified by the format which supports linear filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_IMG_filter_cubic[] ifdef::VK_IMG_filter_cubic[]
@ -1752,12 +1752,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: be of If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: be of
a format which supports cubic filtering, as specified by the a format which supports cubic filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned byflink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdBlitImage-filter-00237]] * [[VUID-vkCmdBlitImage-filter-00237]]

View File

@ -116,12 +116,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
result of this command must: be of a format which supports linear result of this command must: be of a format which supports linear
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_IMG_filter_cubic[] ifdef::VK_IMG_filter_cubic[]
@ -142,12 +142,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
result of this command must: be of a format which supports cubic result of this command must: be of a format which supports cubic
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDispatch-None-00400]] * [[VUID-vkCmdDispatch-None-00400]]
@ -284,12 +284,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
result of this command must: be of a format which supports linear result of this command must: be of a format which supports linear
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_IMG_filter_cubic[] ifdef::VK_IMG_filter_cubic[]
@ -310,12 +310,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
result of this command must: be of a format which supports cubic result of this command must: be of a format which supports cubic
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDispatchIndirect-None-00416]] * [[VUID-vkCmdDispatchIndirect-None-00416]]

View File

@ -610,16 +610,16 @@ ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDraw-formatFeatures-01953]] * [[VUID-vkCmdDraw-formatFeatures-01953]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a Any slink:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear result of this command must: be of a format which supports linear
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDraw-None-01499]] * [[VUID-vkCmdDraw-None-01499]]
@ -643,12 +643,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
result of this command must: be of a format which supports cubic result of this command must: be of a format which supports cubic
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDraw-None-00452]] * [[VUID-vkCmdDraw-None-00452]]
@ -836,16 +836,16 @@ ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndexed-formatFeatures-01955]] * [[VUID-vkCmdDrawIndexed-formatFeatures-01955]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a Any slink:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear result of this command must: be of a format which supports linear
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndexed-None-01500]] * [[VUID-vkCmdDrawIndexed-None-01500]]
@ -869,12 +869,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
result of this command must: be of a format which supports cubic result of this command must: be of a format which supports cubic
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndexed-None-00472]] * [[VUID-vkCmdDrawIndexed-None-00472]]
@ -1071,16 +1071,16 @@ ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndirect-formatFeatures-01957]] * [[VUID-vkCmdDrawIndirect-formatFeatures-01957]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a Any slink:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear result of this command must: be of a format which supports linear
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndirect-None-01501]] * [[VUID-vkCmdDrawIndirect-None-01501]]
@ -1104,12 +1104,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
result of this command must: be of a format which supports cubic result of this command must: be of a format which supports cubic
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndirect-None-00498]] * [[VUID-vkCmdDrawIndirect-None-00498]]
@ -1570,16 +1570,16 @@ ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndirectCountAMD-formatFeatures-01959]] * [[VUID-vkCmdDrawIndirectCountAMD-formatFeatures-01959]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a Any slink:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear result of this command must: be of a format which supports linear
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndirectCountAMD-None-01502]] * [[VUID-vkCmdDrawIndirectCountAMD-None-01502]]
@ -1776,16 +1776,16 @@ ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndexedIndirect-formatFeatures-01960]] * [[VUID-vkCmdDrawIndexedIndirect-formatFeatures-01960]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a Any slink:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear result of this command must: be of a format which supports linear
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndexedIndirect-None-01503]] * [[VUID-vkCmdDrawIndexedIndirect-None-01503]]
@ -1809,12 +1809,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
result of this command must: be of a format which supports cubic result of this command must: be of a format which supports cubic
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndexedIndirect-None-00550]] * [[VUID-vkCmdDrawIndexedIndirect-None-00550]]
@ -2284,16 +2284,16 @@ ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-formatFeatures-01962]] * [[VUID-vkCmdDrawIndexedIndirectCountAMD-formatFeatures-01962]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a Any slink:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear result of this command must: be of a format which supports linear
filtering, as specified by the filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
returned by vkGetAndroidHardwareBufferPropertiesANDROID for external returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for
format images, or by external format images, or by
sname:VkFormatProperties::pname:linearTilingFeatures or slink:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by slink:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties for non-external format flink:vkGetPhysicalDeviceFormatProperties for non-external format
linearly or optimally tiled images, respectively linearly or optimally tiled images, respectively
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-01504]] * [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-01504]]

View File

@ -6814,7 +6814,7 @@ usages or flags are requested.
Requiring at least one GPU usage flag ensures that Android hardware buffer Requiring at least one GPU usage flag ensures that Android hardware buffer
memory will be allocated in a memory pool accessible to the Vulkan memory will be allocated in a memory pool accessible to the Vulkan
implementation, and that specializing the memory layout based on usage flags implementation, and that specializing the memory layout based on usage flags
doesn't prevent it from being compatible with Vulkan. does not prevent it from being compatible with Vulkan.
Implementations may: avoid unnecessary restrictions caused by this Implementations may: avoid unnecessary restrictions caused by this
requirement by using vendor usage flags to indicate that only the Vulkan requirement by using vendor usage flags to indicate that only the Vulkan
uses indicated in slink:VkImageFormatProperties2 are required. uses indicated in slink:VkImageFormatProperties2 are required.

View File

@ -913,6 +913,7 @@ ifdef::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd,VK_EXT_external_me
An instance of the slink:VkMemoryAllocateInfo structure defines a memory An instance of the slink:VkMemoryAllocateInfo structure defines a memory
import operation if the pname:pNext chain contains an instance of one of the import operation if the pname:pNext chain contains an instance of one of the
following structures: following structures:
ifdef::VK_KHR_external_memory_win32[] ifdef::VK_KHR_external_memory_win32[]
* slink:VkImportMemoryWin32HandleInfoKHR with non-zero pname:handleType * slink:VkImportMemoryWin32HandleInfoKHR with non-zero pname:handleType
value value
@ -1084,7 +1085,7 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
** pname:allocationSize must: be the size returned by ** pname:allocationSize must: be the size returned by
flink:vkGetAndroidHardwareBufferPropertiesANDROID for the Android flink:vkGetAndroidHardwareBufferPropertiesANDROID for the Android
hardware buffer hardware buffer
** If the pname:pNext chain doesn't contain an instance of ** If the pname:pNext chain does not contain an instance of
slink:VkMemoryDedicatedAllocateInfo or slink:VkMemoryDedicatedAllocateInfo or
pname:VkMemoryDedicatedAllocateInfo::pname:image is pname:VkMemoryDedicatedAllocateInfo::pname:image is
dlink:VK_NULL_HANDLE, the Android hardware buffer must: have a format dlink:VK_NULL_HANDLE, the Android hardware buffer must: have a format
@ -1107,19 +1108,20 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
of slink:VkMemoryDedicatedAllocateInfo with pname:image that is not of slink:VkMemoryDedicatedAllocateInfo with pname:image that is not
dlink:VK_NULL_HANDLE: dlink:VK_NULL_HANDLE:
** The Android hardware buffer's usage must: include at least one of ** The Android hardware buffer's usage must: include at least one of
ename:AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT or code:AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT or
ename:AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE code:AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE
** The pname:image's format must: be ename:VK_FORMAT_UNDEFINED or the ** The format of pname:image must: be ename:VK_FORMAT_UNDEFINED or the
format returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID format returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID
in slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:format in slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:format
for the Android hardware buffer. for the Android hardware buffer.
** The image's and Android hardware buffer's width, height, and array ** The width, height, and array layer dimensions of pname:image and the
layer dimensions must: be the same Android hardware buffer must: be identical
** If the Android hardware buffer's usage includes ** If the Android hardware buffer's usage includes
code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the image must have code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the pname:image must:
have
[eq]#{lfloor}log~2~(max(code:width, code:height)){rfloor} {plus} 1# [eq]#{lfloor}log~2~(max(code:width, code:height)){rfloor} {plus} 1#
mip levels, otherwise it must have exactly `1` mip level. mip levels, otherwise it must: have exactly `1` mip level.
** Each bit set in the image's usage must: be listed in ** Each bit set in the usage of pname:image must: be listed in
<<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage <<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage
Equivalence>>, and if there is a corresponding Equivalence>>, and if there is a corresponding
code:AHARDWAREBUFFER_USAGE bit listed that bit must: be included in code:AHARDWAREBUFFER_USAGE bit listed that bit must: be included in
@ -1881,7 +1883,7 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
To import memory created outside of the current Vulkan instance from an To import memory created outside of the current Vulkan instance from an
Android hardware buffer, add a Android hardware buffer, add a
slink:VkImportAndroidHardwareBufferInfoANDROID structure to the pname:pNext sname:VkImportAndroidHardwareBufferInfoANDROID structure to the pname:pNext
chain of the slink:VkMemoryAllocateInfo structure. chain of the slink:VkMemoryAllocateInfo structure.
The sname:VkImportAndroidHardwareBufferInfoANDROID structure is defined as: The sname:VkImportAndroidHardwareBufferInfoANDROID structure is defined as:
@ -1891,7 +1893,7 @@ include::../api/structs/VkImportAndroidHardwareBufferInfoANDROID.txt[]
* pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:buffer is the Android hardware buffer to import. * pname:buffer is the Android hardware buffer to import.
If the fname:vkAllocateMemory command succeeds, the implementation must: If the flink:vkAllocateMemory command succeeds, the implementation must:
acquire a reference to the imported hardware buffer, which it must: release acquire a reference to the imported hardware buffer, which it must: release
when the device memory object is freed. when the device memory object is freed.
If the command fails, the implementation must: not retain a reference. If the command fails, the implementation must: not retain a reference.
@ -1931,11 +1933,11 @@ include::../api/protos/vkGetMemoryAndroidHardwareBufferANDROID.txt[]
Each call to fname:vkGetMemoryAndroidHardwareBufferANDROID must: return an Each call to fname:vkGetMemoryAndroidHardwareBufferANDROID must: return an
Android hardware buffer with a new reference acquired in addition to the Android hardware buffer with a new reference acquired in addition to the
reference held by the sname:VkDeviceMemory. reference held by the slink:VkDeviceMemory.
To avoid leaking resources, the application must: release the reference by To avoid leaking resources, the application must: release the reference by
calling +AHardwareBuffer_release+ when it is no longer needed. calling code:AHardwareBuffer_release when it is no longer needed.
When called with the same handle in When called with the same handle in
sname:VkMemoryGetAndroidHardwareBufferInfoANDROID::pname:memory, slink:VkMemoryGetAndroidHardwareBufferInfoANDROID::pname:memory,
fname:vkGetMemoryAndroidHardwareBufferANDROID must: return the same Android fname:vkGetMemoryAndroidHardwareBufferANDROID must: return the same Android
hardware buffer object. hardware buffer object.
If the device memory was created by importing an Android hardware buffer, If the device memory was created by importing an Android hardware buffer,
@ -1967,10 +1969,10 @@ include::../api/structs/VkMemoryGetAndroidHardwareBufferInfoANDROID.txt[]
slink:VkExportMemoryAllocateInfoKHR::pname:handleTypes when pname:memory slink:VkExportMemoryAllocateInfoKHR::pname:handleTypes when pname:memory
was created. was created.
* [[VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-pNext-01883]] * [[VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-pNext-01883]]
If the pname:pNext chain of the pname:VkMemoryAllocateInfo used to If the pname:pNext chain of the slink:VkMemoryAllocateInfo used to
allocate pname:memory included a sname:VkMemoryDedicatedAllocateInfo allocate pname:memory included a slink:VkMemoryDedicatedAllocateInfo
with non-NULL pname:image member, then that pname:image must: already be with non-`NULL` pname:image member, then that pname:image must: already
bound to pname:memory. be bound to pname:memory.
**** ****
-- --
@ -2028,7 +2030,7 @@ include::../api/structs/VkAndroidHardwareBufferFormatPropertiesANDROID.txt[]
* pname:sType is the type of this structure. * pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:format is the Vulkan format corresponding to the Android hardware * pname:format is the Vulkan format corresponding to the Android hardware
buffer's format, or ename:VK_FORMAT_UNDEFINED if there isn't an buffer's format, or ename:VK_FORMAT_UNDEFINED if there is not an
equivalent Vulkan format. equivalent Vulkan format.
* pname:externalFormat is an implementation-defined external format * pname:externalFormat is an implementation-defined external format
identifier for use with slink:VkExternalFormatANDROID. identifier for use with slink:VkExternalFormatANDROID.
@ -2051,7 +2053,7 @@ If the Android hardware buffer has one of the formats listed in the
table>>, then pname:format must: have the equivalent Vulkan format listed in table>>, then pname:format must: have the equivalent Vulkan format listed in
the table. the table.
Otherwise, pname:format may: be ename:VK_FORMAT_UNDEFINED, indicating the Otherwise, pname:format may: be ename:VK_FORMAT_UNDEFINED, indicating the
Android hardware buffer can only be used with an external format. Android hardware buffer can: only be used with an external format.
The pname:formatFeatures member must: include The pname:formatFeatures member must: include
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT and at least one of ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT and at least one of
@ -2065,7 +2067,7 @@ ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT.
==== ====
The pname:formatFeatures member only indicates the features available when The pname:formatFeatures member only indicates the features available when
using an using an
<memory-external-android-hardware-buffer-external-formats,external-format <<memory-external-android-hardware-buffer-external-formats,external-format
image>> created from the Android hardware buffer. image>> created from the Android hardware buffer.
Images from Android hardware buffers with a format other than Images from Android hardware buffers with a format other than
ename:VK_FORMAT_UNDEFINED are subject to the format capabilities obtained ename:VK_FORMAT_UNDEFINED are subject to the format capabilities obtained
@ -2073,7 +2075,7 @@ from flink:vkGetPhysicalDeviceFormatProperties2, and
flink:vkGetPhysicalDeviceImageFormatProperties2 with appropriate parameters. flink:vkGetPhysicalDeviceImageFormatProperties2 with appropriate parameters.
These sets of features are independent of each other, e.g. the external These sets of features are independent of each other, e.g. the external
format will support sampler Y'C~B~C~R~ conversion even if the non-external format will support sampler Y'C~B~C~R~ conversion even if the non-external
format doesn't, and writing to non-external format images is possible but format does not, and writing to non-external format images is possible but
writing to external format images is not. writing to external format images is not.
==== ====
@ -2100,23 +2102,26 @@ If pname:format is ename:VK_FORMAT_UNDEFINED, all members of
pname:samplerYcbcrConversionComponents must: be pname:samplerYcbcrConversionComponents must: be
ename:VK_COMPONENT_SWIZZLE_IDENTITY. ename:VK_COMPONENT_SWIZZLE_IDENTITY.
Implementations may not always be able to determine the color model, Implementations may: not always be able to determine the color model,
numerical range, or chroma offsets of the image contents, so the values in numerical range, or chroma offsets of the image contents, so the values in
sname:VkAndroidHardwareBufferFormatPropertiesANDROID are only suggestions. sname:VkAndroidHardwareBufferFormatPropertiesANDROID are only suggestions.
Applications should: treat these values as sensible defaults to use in the Applications should: treat these values as sensible defaults to use in the
absence of more reliable information obtained through some other means. absence of more reliable information obtained through some other means.
If the underlying physical device is also usable via OpenGL ES with the If the underlying physical device is also usable via OpenGL ES with the
GL_OES_EGL_image_external extension, the implementation should: suggest https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt[+GL_OES_EGL_image_external+]
values that will produce similar sampled values as would be obtained by extension, the implementation should: suggest values that will produce
sampling the same external image via code:samplerExternalOES in OpenGL ES similar sampled values as would be obtained by sampling the same external
using equivalent sampler parameters. image via code:samplerExternalOES in OpenGL ES using equivalent sampler
parameters.
[NOTE] [NOTE]
.Note .Note
==== ====
Since GL_OES_EGL_image_external does not require the same sampling and Since
conversion calculations as Vulkan does, achieving identical results between https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt[+GL_OES_EGL_image_external+]
APIs may: not be possible on some implementations. does not require the same sampling and conversion calculations as Vulkan
does, achieving identical results between APIs may: not be possible on some
implementations.
==== ====
include::../validity/structs/VkAndroidHardwareBufferFormatPropertiesANDROID.txt[] include::../validity/structs/VkAndroidHardwareBufferFormatPropertiesANDROID.txt[]
@ -2695,36 +2700,35 @@ ifdef::VK_KHR_external_memory_capabilities+VK_ANDROID_external_memory_android_ha
[[memory-external-handle-types]] [[memory-external-handle-types]]
=== External Memory Handle Types === External Memory Handle Types
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
[[memory-external-android-hardware-buffer]] [[memory-external-android-hardware-buffer]]
==== Android Hardware Buffer ==== Android Hardware Buffer
Android's NDK defines code:AHardwareBuffer objects which represent device Android's NDK defines code:AHardwareBuffer objects, which represent device
memory that is shareable across processes and that can be accessed by a memory that is shareable across processes and that can: be accessed by a
variety of media APIs and the hardware used to implement them. variety of media APIs and the hardware used to implement them.
These Android hardware buffer objects may be imported into These Android hardware buffer objects may: be imported into
sname:VkDeviceMemory objects for access via Vulkan, or exported from Vulkan. slink:VkDeviceMemory objects for access via Vulkan, or exported from Vulkan.
Android hardware buffer objects are reference-counted using Android NDK Android hardware buffer objects are reference-counted using Android NDK
functions outside the scope of this specification. functions outside of the scope of this specification.
A sname:VkDeviceMemory imported from an Android hardware buffer or that can A slink:VkDeviceMemory imported from an Android hardware buffer or that can:
be exported to an Android hardware buffer must: acquire a reference to its be exported to an Android hardware buffer must: acquire a reference to its
code:AHardwareBuffer object, and must: release this reference when the code:AHardwareBuffer object, and must: release this reference when the
device memory is freed. device memory is freed.
During the host execution of a Vulkan command which has an Android hardware During the host execution of a Vulkan command that has an Android hardware
buffer as a parameter (including indirect parameters via pname:pNext buffer as a parameter (including indirect parameters via pname:pNext
chains), the application must: not decrement the Android hardware buffer's chains), the application must: not decrement the Android hardware buffer's
reference count to zero. reference count to zero.
Android hardware buffers can be mapped and unmapped for CPU access using NDK Android hardware buffers can: be mapped and unmapped for CPU access using
functions. the NDK functions.
These lock and unlock APIs are considered to acquire and release ownership These lock and unlock APIs are considered to acquire and release ownership
of the Android hardware buffer, and applications must: follow the rules of the Android hardware buffer, and applications must: follow the rules
described in <<resources-external-sharing,External Resource Sharing>> to described in <<resources-external-sharing,External Resource Sharing>> to
transfer ownership between the Vulkan instance and these native APIs. transfer ownership between the Vulkan instance and these native APIs.
Android hardware buffers can: be shared with external APIs and Vulkan Android hardware buffers can: be shared with external APIs and Vulkan
instances on the same device and also with foreign devices. instances on the same device, and also with foreign devices.
When transferring ownership of the Android hardware buffer, the external and When transferring ownership of the Android hardware buffer, the external and
foreign special queue families described in foreign special queue families described in
<<synchronization-queue-transfers>> are not identical. <<synchronization-queue-transfers>> are not identical.
@ -2742,37 +2746,36 @@ device.
Vulkan buffer and image usage flags do not correspond exactly to Android Vulkan buffer and image usage flags do not correspond exactly to Android
hardware buffer usage flags. hardware buffer usage flags.
When allocating Android hardware buffers with non-Vulkan APIs, if any When allocating Android hardware buffers with non-Vulkan APIs, if any
+AHARDWAREBUFFER_USAGE_GPU_*+ usage bits are included, by default the code:AHARDWAREBUFFER_USAGE_GPU_* usage bits are included, by default the
allocator must: allocate the memory in such a way that it can support Vulkan allocator must: allocate the memory in such a way that it supports Vulkan
usages and creation flags in the usages and creation flags in the
<<memory-external-android-hardware-buffer-usage, usage equivalence table>> <<memory-external-android-hardware-buffer-usage, usage equivalence table>>
which don't have Android hardware buffer equivalents. which do not have Android hardware buffer equivalents.
The slink:VkAndroidHardwareBufferUsageANDROID structure can: be attached to The slink:VkAndroidHardwareBufferUsageANDROID structure can: be attached to
the pname:pNext chain of a slink:VkImageFormatProperties2 instance passed to the pname:pNext chain of a slink:VkImageFormatProperties2 instance passed to
flink:vkGetPhysicalDeviceImageFormatProperties2 to obtain optimal Android flink:vkGetPhysicalDeviceImageFormatProperties2 to obtain optimal Android
hardware buffer usage flags for specific Vulkan resource creation hardware buffer usage flags for specific Vulkan resource creation
parameters. parameters.
Some usage flags returned by these commands are required based on the input Some usage flags returned by these commands are required: based on the input
parameters, but additional vendor-specific usage flags parameters, but additional vendor-specific usage flags
(+AHARDWAREBUFFER_USAGE_VENDOR_*+) may: also be returned. (code:AHARDWAREBUFFER_USAGE_VENDOR_*) may: also be returned.
Any Android hardware buffer allocated with these vendor-specific usage flags Any Android hardware buffer allocated with these vendor-specific usage flags
and imported to Vulkan must: only be bound to resources created with and imported to Vulkan must: only be bound to resources created with
parameters that are a subset of the parameters used to obtain the Android parameters that are a subset of the parameters used to obtain the Android
hardware buffer usage, since the memory may: have been allocated in a way hardware buffer usage, since the memory may: have been allocated in a way
incompatible with other parameters. incompatible with other parameters.
If a Android hardware buffer is successfully allocated with additional If an Android hardware buffer is successfully allocated with additional
non-vendor-specific usage flags in addition to the recommended usage, it non-vendor-specific usage flags in addition to the recommended usage, it
must: support being used in the same ways as a Android hardware buffer must: support being used in the same ways as an Android hardware buffer
allocated with only the recommended usage, and also in ways indicated by the allocated with only the recommended usage, and also in ways indicated by the
additional usage. additional usage.
[[memory-external-android-hardware-buffer-external-formats]] [[memory-external-android-hardware-buffer-external-formats]]
===== Android Hardware Buffer External Formats ===== ===== Android Hardware Buffer External Formats =====
Android hardware buffers can represent images using implementation-specific Android hardware buffers may: represent images using implementation-specific
formats, layouts, color models, etc. formats, layouts, color models, etc., which do not have Vulkan equivalents.
which don't have Vulkan equivalents.
Such _external formats_ are commonly used by external image sources such as Such _external formats_ are commonly used by external image sources such as
video decoders or cameras. video decoders or cameras.
Vulkan can: import Android hardware buffers that have external formats, but Vulkan can: import Android hardware buffers that have external formats, but
@ -2781,11 +2784,11 @@ representation, images with external formats must: only be used as sampled
images, must: only be sampled with a sampler that has Y'C~B~C~R~ conversion images, must: only be sampled with a sampler that has Y'C~B~C~R~ conversion
enabled, and must: have optimal tiling. enabled, and must: have optimal tiling.
Images that will be backed by a Android hardware buffer can use an external Images that will be backed by a Android hardware buffer can: use an external
format by setting sname:VkImageCreateInfo::pname:format to format by setting slink:VkImageCreateInfo::pname:format to
ename:VK_FORMAT_UNDEFINED and including an instance of ename:VK_FORMAT_UNDEFINED and including an instance of
slink:VkExternalFormatANDROID in the pname:pNext chain. slink:VkExternalFormatANDROID in the pname:pNext chain.
Images can be created with an external format even if the Android hardware Images can: be created with an external format even if the Android hardware
buffer has a format which has an buffer has a format which has an
<<memory-external-android-hardware-buffer-formats,equivalent Vulkan format>> <<memory-external-android-hardware-buffer-formats,equivalent Vulkan format>>
to enable consistent handling of images from sources that might use either to enable consistent handling of images from sources that might use either
@ -2818,16 +2821,16 @@ properties derived from the image:
* The code:width and code:height members of code:AHardwareBuffer_desc * The code:width and code:height members of code:AHardwareBuffer_desc
must: be the same as the pname:width and pname:height members of must: be the same as the pname:width and pname:height members of
pname:VkImageCreateInfo::pname:extent, respectively; slink:VkImageCreateInfo::pname:extent, respectively.
* The code:layers member of code:AHardwareBuffer_desc must: be the same as * The code:layers member of code:AHardwareBuffer_desc must: be the same as
the pname:arrayLayers member of sname:VkImageCreateInfo; the pname:arrayLayers member of slink:VkImageCreateInfo.
* The code:format member of code:AHardwareBuffer_desc must: be equivalent * The code:format member of code:AHardwareBuffer_desc must: be equivalent
to pname:VkImageCreateInfo::pname:format as defined by to slink:VkImageCreateInfo::pname:format as defined by
<<memory-external-android-hardware-buffer-formats,AHardwareBuffer Format <<memory-external-android-hardware-buffer-formats,AHardwareBuffer Format
Equivalence>>; Equivalence>>.
* The code:usage member of code:AHardwareBuffer_desc must: include bits * The code:usage member of code:AHardwareBuffer_desc must: include bits
corresponding to bits included in pname:VkImageCreateInfo::pname:usage corresponding to bits included in slink:VkImageCreateInfo::pname:usage
and pname:VkImageCreateInfo::pname:flags where such a correspondence and slink:VkImageCreateInfo::pname:flags where such a correspondence
exists according to exists according to
<<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage <<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage
Equivalence>>. Equivalence>>.
@ -2839,15 +2842,15 @@ properties derived from the image:
hardware buffer with usage returned in hardware buffer with usage returned in
slink:VkAndroidHardwareBufferUsageANDROID. slink:VkAndroidHardwareBufferUsageANDROID.
Implementations may support fewer combinations of image creation parameters Implementations may: support fewer combinations of image creation parameters
for images with Android hardware buffer external handle type than for for images with Android hardware buffer external handle type than for
non-external images. non-external images.
Support for a given set of parameters can be determined by passing Support for a given set of parameters can: be determined by passing
slink:VkExternalImageFormatProperties to slink:VkExternalImageFormatProperties to
flink:vkGetPhysicalDeviceImageFormatProperties2 with pname:handleType set to flink:vkGetPhysicalDeviceImageFormatProperties2 with pname:handleType set to
ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID. ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
Any Android hardware buffer successfully allocated outside Vulkan with usage Any Android hardware buffer successfully allocated outside Vulkan with usage
that includes +AHARDWAREBUFFER_USAGE_GPU_*+ must be supported when using that includes code:AHARDWAREBUFFER_USAGE_GPU_* must: be supported when using
equivalent Vulkan image parameters. equivalent Vulkan image parameters.
If a given choice of image parameters are supported for import, they can: If a given choice of image parameters are supported for import, they can:
also be used to create an image and memory that will be exported to an also be used to create an image and memory that will be exported to an
@ -2894,11 +2897,11 @@ endif::VK_VERSION_1_1[]
2:: 2::
The code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE flag does not The code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE flag does not
correspond to a Vulkan image usage or creation flag. correspond to a Vulkan image usage or creation flag.
Instead, it's presence indicates that the Android hardware buffer Instead, its presence indicates that the Android hardware buffer
contains a complete set of mip levels contains a complete set of mip levels
(sname:VkImageCreateInfo::pname:mipLevels is (sname:VkImageCreateInfo::pname:mipLevels is
[eq]#{lceil}log~2~(max(code:width, code:height)){rceil} {plus} 1#), and [eq]#{lceil}log~2~(max(code:width, code:height)){rceil} {plus} 1#), and
it's absence indicates that the Android hardware buffer contains only a its absence indicates that the Android hardware buffer contains only a
single mip level. single mip level.
ifdef::VK_KHR_image_format_list[] ifdef::VK_KHR_image_format_list[]
@ -2917,10 +2920,10 @@ endif::VK_KHR_image_format_list[]
===== Android Hardware Buffer Buffer Resources ===== Android Hardware Buffer Buffer Resources
Android hardware buffers with a format of code:AHARDWAREBUFFER_FORMAT_BLOB Android hardware buffers with a format of code:AHARDWAREBUFFER_FORMAT_BLOB
and usage that includes code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER may be and usage that includes code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER can: be
used as the backing store for sname:VkBuffer objects. used as the backing store for slink:VkBuffer objects.
Such Android hardware buffers have a size in bytes specified by their Such Android hardware buffers have a size in bytes specified by their
code:width; code:height and code:layers are 1. code:width; code:height and code:layers are both `1`.
Unlike images, buffer resources backed by Android hardware buffers do not Unlike images, buffer resources backed by Android hardware buffers do not
require dedicated allocations. require dedicated allocations.
@ -2928,10 +2931,7 @@ require dedicated allocations.
Exported code:AHardwareBuffer objects that do not have dedicated images Exported code:AHardwareBuffer objects that do not have dedicated images
must: have a format of code:AHARDWAREBUFFER_FORMAT_BLOB, usage must: include must: have a format of code:AHARDWAREBUFFER_FORMAT_BLOB, usage must: include
code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER, code:width must: equal the code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER, code:width must: equal the
device memory allocation size, and code:height and code:layers must: be device memory allocation size, and code:height and code:layers must: be `1`.
code:1.
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
endif::VK_KHR_external_memory_capabilities+VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_KHR_external_memory_capabilities+VK_ANDROID_external_memory_android_hardware_buffer[]

View File

@ -658,11 +658,11 @@ ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-VkImageCreateInfo-pNext-01889]] * [[VUID-VkImageCreateInfo-pNext-01889]]
If the pname:pNext chain doesn't contain an instance of If the pname:pNext chain does not contain an instance of
slink:VkExternalFormatANDROID, or if pname:format is not slink:VkExternalFormatANDROID, or if pname:format is not
VK_FORMAT_UNDEFINED, the combination of pname:format, pname:imageType, ename:VK_FORMAT_UNDEFINED, the combination of pname:format,
pname:tiling, pname:usage, and pname:flags must: be supported, as pname:imageType, pname:tiling, pname:usage, and pname:flags must: be
indicated by a ename:VK_SUCCESS return value from supported, as indicated by a ename:VK_SUCCESS return value from
fname:vkGetPhysicalDeviceImageFormatProperties invoked with the same fname:vkGetPhysicalDeviceImageFormatProperties invoked with the same
values passed to the corresponding parameters. values passed to the corresponding parameters.
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
@ -1005,9 +1005,9 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
pname:externalFormat member is not `0` pname:externalFormat member is not `0`
* [[VUID-VkImageCreateInfo-pNext-01893]] * [[VUID-VkImageCreateInfo-pNext-01893]]
If the pname:pNext chain includes a slink:VkExternalFormatANDROID If the pname:pNext chain includes a slink:VkExternalFormatANDROID
structure whose pname:externalFormat member is not code:0: structure whose pname:externalFormat member is not `0`:
** pname:format must: be ename:VK_FORMAT_UNDEFINED ** pname:format must: be ename:VK_FORMAT_UNDEFINED
** pname:flags must: not include VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT ** pname:flags must: not include ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
** pname:usage must: not include any usages except ** pname:usage must: not include any usages except
pname:VK_IMAGE_USAGE_SAMPLED_BIT pname:VK_IMAGE_USAGE_SAMPLED_BIT
** pname:tiling must: be ename:VK_IMAGE_TILING_OPTIMAL ** pname:tiling must: be ename:VK_IMAGE_TILING_OPTIMAL
@ -1118,7 +1118,7 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
To create an image with an To create an image with an
<<memory-external-android-hardware-buffer-external-formats,external <<memory-external-android-hardware-buffer-external-formats,external
format>>, include an instance of sname:VkExternalFormatANDROID in the format>>, include an instance of sname:VkExternalFormatANDROID in the
pname:pNext chain of sname:VkImageCreateInfo. pname:pNext chain of slink:VkImageCreateInfo.
sname:VkExternalFormatANDROID is defined as: sname:VkExternalFormatANDROID is defined as:
include::../api/structs/VkExternalFormatANDROID.txt[] include::../api/structs/VkExternalFormatANDROID.txt[]
@ -1136,7 +1136,7 @@ sname:VkImageCreateInfo::pname:format must: be ename:VK_FORMAT_UNDEFINED.
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkExternalFormatANDROID-externalFormat-01894]] * [[VUID-VkExternalFormatANDROID-externalFormat-01894]]
pname:externalFormat must: be code:0 or a value returned in the pname:externalFormat must: be `0` or a value returned in the
pname:externalFormat member of pname:externalFormat member of
slink:VkAndroidHardwareBufferFormatPropertiesANDROID by an earlier call slink:VkAndroidHardwareBufferFormatPropertiesANDROID by an earlier call
to flink:vkGetAndroidHardwareBufferPropertiesANDROID to flink:vkGetAndroidHardwareBufferPropertiesANDROID
@ -1440,11 +1440,11 @@ If the elink:VkFormat of pname:image is a
fname:vkGetImageSubresourceLayout describes one plane of the image. fname:vkGetImageSubresourceLayout describes one plane of the image.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
flink:vkGetImageSubresourceLayout is invariant for the lifetime of a single fname:vkGetImageSubresourceLayout is invariant for the lifetime of a single
image. image.
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
However, the subresource layout of images in Android hardware buffer However, the subresource layout of images in Android hardware buffer
external memory isn't known until the image has been bound to memory, so external memory is not known until the image has been bound to memory, so
calling fname:vkGetImageSubresourceLayout for such an image before it has calling fname:vkGetImageSubresourceLayout for such an image before it has
been bound will result in undefined behavior. been bound will result in undefined behavior.
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
@ -1482,7 +1482,7 @@ endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-vkGetImageSubresourceLayout-image-01895]] * [[VUID-vkGetImageSubresourceLayout-image-01895]]
If pname:image was created with the If pname:image was created with the
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
external memory handle type, then pname:image must: be bound to memory. external memory handle type, then pname:image must: be bound to memory.
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
**** ****
@ -2496,12 +2496,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
If pname:image has an If pname:image has an
<<memory-external-android-hardware-buffer-external-formats,external <<memory-external-android-hardware-buffer-external-formats,external
format>>: format>>:
** pname:format must be ename:VK_FORMAT_UNDEFINED ** pname:format must: be ename:VK_FORMAT_UNDEFINED
** The pname:pNext chain must contain an instance of ** The pname:pNext chain must: contain an instance of
slink:VkSamplerYcbcrConversionInfo with a pname:conversion object slink:VkSamplerYcbcrConversionInfo with a pname:conversion object
created with the same external format as pname:image created with the same external format as pname:image
** All members of pname:components must be ** All members of pname:components must: be
pname:VK_COMPONENT_SWIZZLE_IDENTITY ename:VK_COMPONENT_SWIZZLE_IDENTITY
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
**** ****
@ -2922,11 +2922,11 @@ calling flink:vkGetImageMemoryRequirements with such an image before it has
been bound to memory will result in undefined behavior. been bound to memory will result in undefined behavior.
When importing Android hardware buffer memory, the pname:allocationSize can: When importing Android hardware buffer memory, the pname:allocationSize can:
be determined by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID. be determined by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID.
When allocating new memory for an image that can: be exported to a Android When allocating new memory for an image that can: be exported to an Android
hardware buffer, the memory's pname:allocationSize must: be zero; the actual hardware buffer, the memory's pname:allocationSize must: be zero; the actual
size will be determined by the dedicated image's parameters. size will be determined by the dedicated image's parameters.
After the memory has been allocated, the amount of space allocated from the After the memory has been allocated, the amount of space allocated from the
memory's heap can be obtained by getting the image's memory requirements or memory's heap can: be obtained by getting the image's memory requirements or
by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID with the by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID with the
Android hardware buffer exported from the memory. Android hardware buffer exported from the memory.
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
@ -3161,7 +3161,7 @@ ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-VkImageMemoryRequirementsInfo2-image-01897]] * [[VUID-VkImageMemoryRequirementsInfo2-image-01897]]
If pname:image was created with the If pname:image was created with the
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
external memory handle type, then pname:image must: be bound to memory. external memory handle type, then pname:image must: be bound to memory.
endif::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[]
**** ****