C Specification
To query a 64-bit buffer device address value which can be used to identify a buffer to API commands or through which buffer memory can be accessed, call:
// Provided by VK_VERSION_1_2
VkDeviceAddress vkGetBufferDeviceAddress(
VkDevice device,
const VkBufferDeviceAddressInfo* pInfo);
// Provided by VK_KHR_buffer_device_address
// Equivalent to vkGetBufferDeviceAddress
VkDeviceAddress vkGetBufferDeviceAddressKHR(
VkDevice device,
const VkBufferDeviceAddressInfo* pInfo);
// Provided by VK_EXT_buffer_device_address
// Equivalent to vkGetBufferDeviceAddress
VkDeviceAddress vkGetBufferDeviceAddressEXT(
VkDevice device,
const VkBufferDeviceAddressInfo* pInfo);
Parameters
-
deviceis the logical device that the buffer was created on. -
pInfois a pointer to a VkBufferDeviceAddressInfo structure specifying the buffer to retrieve an address for.
Description
The 64-bit return value, bufferBaseAddress, is an address of the
start of pInfo->buffer.
Addresses in the range [bufferBaseAddress, bufferBaseAddress
+ VkBufferCreateInfo::size) can be used to access the
memory bound to this buffer on the device.
A value of zero is reserved as a “null” pointer and must not be returned as a valid buffer device address.
If the buffer was created with a non-zero value of
VkBufferOpaqueCaptureAddressCreateInfo::opaqueCaptureAddress or
VkBufferDeviceAddressCreateInfoEXT::deviceAddress,
the return value will be the same address that was returned at capture time.
The returned address must satisfy alignment requirements if certain
conditions are met, outlined below.
The required alignment must be observed for either the returned address of
the buffer, or, if the buffer was created without
VK_BUFFER_CREATE_SPARSE_BINDING_BIT, the returned address of the
buffer minus VkBindBufferMemoryInfo::memoryOffset or equivalent
vkBindBufferMemory offset.
The required alignment is the maximum of the following values:
-
The value of VkMemoryRequirements::
alignmentqueried via vkGetBufferMemoryRequirements forpInfo->buffer -
minStorageBufferOffsetAlignmentifpInfo->bufferwas created with VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT -
minUniformBufferOffsetAlignmentifpInfo->bufferwas created with VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT -
minTexelBufferOffsetAlignmentifpInfo->bufferwas created with VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT or VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT -
resourceHeapAlignmentifpInfo->bufferwas created with VK_BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT -
samplerHeapAlignmentifpInfo->bufferwas created with VK_BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT -
descriptorBufferOffsetAlignmentifpInfo->bufferwas created with VK_BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT or VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT -
VkBufferDeviceAddressAlignmentAllocateInfoVALVE::
alignmentifpInfo->bufferwas created without VK_BUFFER_CREATE_SPARSE_BINDING_BIT and the bound VkDeviceMemory was created with specified non-zero alignment of VkBufferDeviceAddressAlignmentAllocateInfoVALVE::alignment -
VkBufferDeviceAddressAlignmentAllocateInfoVALVE::
alignmentifpInfo->bufferwas created with VK_BUFFER_CREATE_SPARSE_BINDING_BIT, and the buffer was created with non-zero VkBufferDeviceAddressAlignmentAllocateInfoVALVE::alignment -
256, if
pInfo->bufferwas created with VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR, andVK_KHR_device_address_commandsis supported
If multiple VkBuffer objects are bound to overlapping ranges of VkDeviceMemory, implementations may return address ranges which overlap. In this case, it is ambiguous which VkBuffer is associated with any given device address. For purposes of valid usage, if multiple VkBuffer objects can be attributed to a device address, a VkBuffer is selected such that valid usage passes, if it exists.
Document Notes
For more information, see the Vulkan Specification.
This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.