Class ANDROIDExternalMemoryAndroidHardwareBuffer
AHardwareBuffer objects created outside of the Vulkan device into Vulkan memory objects, where they can be bound to images and buffers. It also allows exporting an AHardwareBuffer from a Vulkan memory object for symmetry with other operating systems. But since not all AHardwareBuffer usages and formats have Vulkan equivalents, exporting from Vulkan provides strictly less functionality than creating the AHardwareBuffer externally and importing it.
Some AHardwareBuffer images have implementation-defined external formats that may not correspond to Vulkan formats. Sampler Y′CBCR conversion can be used to sample from these images and convert them to a known color space.
- Name String
VK_ANDROID_external_memory_android_hardware_buffer- Extension Type
- Device extension
- Registered Extension Number
- 130
- Revision
- 5
- Extension and Version Dependencies
VK_KHR_sampler_ycbcr_conversionandVK_KHR_external_memoryandVK_KHR_dedicated_allocationor Version 1.1 andVK_EXT_queue_family_foreign- API Interactions
- Interacts with VK_VERSION_1_3
- Interacts with VK_KHR_format_feature_flags2
- Contact
- Jesse Hall critsec
Other Extension Metadata
- Last Modified Date
- 2021-09-30
- IP Status
- No known IP claims.
- Contributors
- Ray Smith, ARM
- Lina Versace, Google
- Jesse Hall, Google
- Tobias Hector, Imagination
- James Jones, NVIDIA
- Tony Zlatinski, NVIDIA
- Matthew Netsch, Qualcomm
- Andrew Garrard, Samsung
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThe extension name.static final intThe extension specification version.static final intExtendsVkExternalMemoryHandleTypeFlagBits.static final intExtendsVkStructureType.static final intExtendsVkStructureType.static final intExtendsVkStructureType.static final intExtendsVkStructureType.static final intExtendsVkStructureType.static final intExtendsVkStructureType.static final intExtendsVkStructureType. -
Method Summary
Modifier and TypeMethodDescriptionstatic intnvkGetAndroidHardwareBufferPropertiesANDROID(org.lwjgl.vulkan.VkDevice device, long buffer, long pProperties) Unsafe version of:GetAndroidHardwareBufferPropertiesANDROIDstatic intnvkGetMemoryAndroidHardwareBufferANDROID(org.lwjgl.vulkan.VkDevice device, long pInfo, long pBuffer) Unsafe version of:GetMemoryAndroidHardwareBufferANDROIDstatic intvkGetAndroidHardwareBufferPropertiesANDROID(org.lwjgl.vulkan.VkDevice device, long buffer, VkAndroidHardwareBufferPropertiesANDROID pProperties) Get Properties of External Memory Android Hardware Buffers.static intvkGetMemoryAndroidHardwareBufferANDROID(org.lwjgl.vulkan.VkDevice device, VkMemoryGetAndroidHardwareBufferInfoANDROID pInfo, org.lwjgl.PointerBuffer pBuffer) Get an Android hardware buffer for a memory object.
-
Field Details
-
VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION
public static final int VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSIONThe extension specification version.- See Also:
-
VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME
The extension name.- See Also:
-
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
public static final int VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROIDExtendsVkExternalMemoryHandleTypeFlagBits.- See Also:
-
VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID
public static final int VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROIDExtendsVkStructureType.Enum values:
STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROIDSTRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID
- See Also:
-
VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID
public static final int VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROIDExtendsVkStructureType.Enum values:
STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROIDSTRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID
- See Also:
-
VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID
public static final int VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROIDExtendsVkStructureType.Enum values:
STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROIDSTRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID
- See Also:
-
VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID
public static final int VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDExtendsVkStructureType.Enum values:
STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROIDSTRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID
- See Also:
-
VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID
public static final int VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDExtendsVkStructureType.Enum values:
STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROIDSTRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID
- See Also:
-
VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID
public static final int VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROIDExtendsVkStructureType.Enum values:
STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROIDSTRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROIDSTRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROIDSTRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID
- See Also:
-
VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID
public static final int VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROIDExtendsVkStructureType.- See Also:
-
-
Method Details
-
nvkGetAndroidHardwareBufferPropertiesANDROID
public static int nvkGetAndroidHardwareBufferPropertiesANDROID(org.lwjgl.vulkan.VkDevice device, long buffer, long pProperties) Unsafe version of:GetAndroidHardwareBufferPropertiesANDROID -
vkGetAndroidHardwareBufferPropertiesANDROID
public static int vkGetAndroidHardwareBufferPropertiesANDROID(org.lwjgl.vulkan.VkDevice device, long buffer, VkAndroidHardwareBufferPropertiesANDROID pProperties) Get Properties of External Memory Android Hardware Buffers.C Specification
To determine the memory parameters to use when importing an Android hardware buffer, call:
VkResult vkGetAndroidHardwareBufferPropertiesANDROID( VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties);Valid Usage
buffermust be a valid Android hardware buffer object with at least one of theAHARDWAREBUFFER_USAGE_GPU_*flags in itsAHardwareBuffer_Desc::usage
Valid Usage (Implicit)
devicemust be a validVkDevicehandlebuffermust be a valid pointer to a validAHardwareBuffervaluepPropertiesmust be a valid pointer to aVkAndroidHardwareBufferPropertiesANDROIDstructure
Return Codes
- On success, this command returns
- On failure, this command returns
See Also
- Parameters:
device- the logical device that will be importingbuffer.buffer- the Android hardware buffer which will be imported.pProperties- a pointer to aVkAndroidHardwareBufferPropertiesANDROIDstructure in which the properties ofbufferare returned.
-
nvkGetMemoryAndroidHardwareBufferANDROID
public static int nvkGetMemoryAndroidHardwareBufferANDROID(org.lwjgl.vulkan.VkDevice device, long pInfo, long pBuffer) Unsafe version of:GetMemoryAndroidHardwareBufferANDROID -
vkGetMemoryAndroidHardwareBufferANDROID
public static int vkGetMemoryAndroidHardwareBufferANDROID(org.lwjgl.vulkan.VkDevice device, VkMemoryGetAndroidHardwareBufferInfoANDROID pInfo, org.lwjgl.PointerBuffer pBuffer) Get an Android hardware buffer for a memory object.C Specification
To export an Android hardware buffer referencing the payload of a Vulkan device memory object, call:
VkResult vkGetMemoryAndroidHardwareBufferANDROID( VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer);Description
Each call to
vkGetMemoryAndroidHardwareBufferANDROIDmust return an Android hardware buffer with a new reference acquired in addition to the reference held by theVkDeviceMemory. To avoid leaking resources, the application must release the reference by callingAHardwareBuffer_releasewhen it is no longer needed. When called with the same handle inVkMemoryGetAndroidHardwareBufferInfoANDROID::memory,vkGetMemoryAndroidHardwareBufferANDROIDmust return the same Android hardware buffer object. If the device memory was created by importing an Android hardware buffer,vkGetMemoryAndroidHardwareBufferANDROIDmust return that same Android hardware buffer object.Valid Usage (Implicit)
devicemust be a validVkDevicehandlepInfomust be a valid pointer to a validVkMemoryGetAndroidHardwareBufferInfoANDROIDstructurepBuffermust be a valid pointer to a valid pointer to anAHardwareBuffervalue
Return Codes
- On success, this command returns
- On failure, this command returns
See Also
- Parameters:
device- the logical device that created the device memory being exported.pInfo- a pointer to aVkMemoryGetAndroidHardwareBufferInfoANDROIDstructure containing parameters of the export operation.pBuffer- will return an Android hardware buffer referencing the payload of the device memory object.
-