vkBindBufferMemory
To attach memory to a buffer object, call:
VkResult vkBindBufferMemory(
VkDevice device,
VkBuffer buffer,
VkDeviceMemory memory,
VkDeviceSize memoryOffset);
deviceis the logical device that owns the buffer and memory.bufferis the buffer to be attached to memory.memoryis a VkDeviceMemory object describing the device memory to attach.memoryOffsetis the start offset of the region ofmemorywhich is to be bound to the buffer. The number of bytes returned in theVkMemoryRequirements::sizemember inmemory, starting frommemoryOffsetbytes, will be bound to the specified buffer.
vkBindBufferMemory is equivalent to passing the same parameters
through VkBindBufferMemoryInfo to vkBindBufferMemory2.
Valid Usage
VUID-vkBindBufferMemory-buffer-07459
buffer must not have been bound to a memory object
VUID-vkBindBufferMemory-buffer-01030
buffer must not have been created with any sparse memory binding
flags
VUID-vkBindBufferMemory-memoryOffset-01031
memoryOffset must be less than the size of memory
VUID-vkBindBufferMemory-memory-01035
memory must have been allocated using one of the memory types
allowed in the memoryTypeBits member of the
VkMemoryRequirements structure returned from a call to
vkGetBufferMemoryRequirements with buffer
VUID-vkBindBufferMemory-memoryOffset-01036
memoryOffset must be an integer multiple of the alignment
member of the VkMemoryRequirements structure returned from a call
to vkGetBufferMemoryRequirements with buffer
VUID-vkBindBufferMemory-size-01037
The size member of the VkMemoryRequirements structure
returned from a call to vkGetBufferMemoryRequirements with
buffer must be less than or equal to the size of memory
minus memoryOffset
VUID-vkBindBufferMemory-buffer-01444
If buffer requires a dedicated allocation (as reported by
vkGetBufferMemoryRequirements2 in
VkMemoryDedicatedRequirements::requiresDedicatedAllocation
for buffer), memory must have been allocated with
VkMemoryDedicatedAllocateInfo::buffer equal to buffer
VUID-vkBindBufferMemory-memory-01508
If the VkMemoryAllocateInfo provided when memory was
allocated included a VkMemoryDedicatedAllocateInfo structure in
its pNext chain, and
VkMemoryDedicatedAllocateInfo::buffer was not
VK_NULL_HANDLE, then buffer must equal
VkMemoryDedicatedAllocateInfo::buffer, and
memoryOffset must be zero
VUID-vkBindBufferMemory-buffer-01038
If buffer was created with
VkDedicatedAllocationBufferCreateInfoNV::dedicatedAllocation
equal to VK_TRUE, memory must have been allocated with
VkDedicatedAllocationMemoryAllocateInfoNV::buffer equal to a
buffer handle created with identical creation parameters to buffer
and memoryOffset must be zero
VUID-vkBindBufferMemory-apiVersion-07920
If
the [VK_KHR_dedicated_allocation](/extensions/VK_KHR_dedicated_allocation) extension is not enabled,
and
buffer was not created with
VkDedicatedAllocationBufferCreateInfoNV::dedicatedAllocation
equal to VK_TRUE, memory must not have been allocated
dedicated for a specific buffer or image
VUID-vkBindBufferMemory-memory-02726
If the value of VkExportMemoryAllocateInfo::handleTypes used
to allocate memory is not 0, it must include at least one of
the handles set in
VkExternalMemoryBufferCreateInfo::handleTypes when
buffer was created
VUID-vkBindBufferMemory-memory-02985
If memory was allocated by a memory import operation,
that is not VkImportAndroidHardwareBufferInfoANDROID with a
non-NULL buffer value,
the external handle type of the imported memory must also have been set
in VkExternalMemoryBufferCreateInfo::handleTypes when
buffer was created
VUID-vkBindBufferMemory-memory-02986
If memory was allocated with the
VkImportAndroidHardwareBufferInfoANDROID memory import operation
with a non-NULL buffer value,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROIDmust also have been set in
VkExternalMemoryBufferCreateInfo::handleTypes when
buffer was created
VUID-vkBindBufferMemory-bufferDeviceAddress-03339
If the
VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddress
feature is enabled and buffer was created with the
VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT bit set, memorymust have been allocated with the
VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set
VUID-vkBindBufferMemory-bufferDeviceAddressCaptureReplay-09200
If the
VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddressCaptureReplay
feature is enabled and buffer was created with the
VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set,
memory must have been allocated with the
VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set
VUID-vkBindBufferMemory-buffer-06408
If buffer was created with
VkBufferCollectionBufferCreateInfoFUCHSIA chained to
VkBufferCreateInfo::pNext, memory must be allocated
with a VkImportMemoryBufferCollectionFUCHSIA chained to
VkMemoryAllocateInfo::pNext
VUID-vkBindBufferMemory-descriptorBufferCaptureReplay-08112
If the buffer was created with the
VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set,
memory must have been allocated with the
VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set
VUID-vkBindBufferMemory-buffer-09201
If the buffer was created with the
VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set,
memory must have been allocated with the
VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set
Valid Usage (Implicit)
VUID-vkBindBufferMemory-device-parameter
device must be a valid VkDevice handle
VUID-vkBindBufferMemory-buffer-parameter
buffer must be a valid VkBuffer handle
VUID-vkBindBufferMemory-memory-parameter
memory must be a valid VkDeviceMemory handle
VUID-vkBindBufferMemory-buffer-parent
buffer must have been created, allocated, or retrieved from device
VUID-vkBindBufferMemory-memory-parent
memory must have been created, allocated, or retrieved from device
Host Synchronization
- Host access to
buffermust be externally synchronized ::