VkBindVertexBuffer3InfoKHR(3)

# VkBindVertexBuffer3InfoKHR(3) Manual Page

## Name

VkBindVertexBuffer3InfoKHR - Bind vertex buffer info

## C Specification

`VkBindVertexBuffer3InfoKHR` is defined as:

    // Provided by VK_KHR_device_address_commands
    typedef struct VkBindVertexBuffer3InfoKHR {
        VkStructureType                   sType;
        const void*                       pNext;
        VkBool32                          setStride;
        VkStridedDeviceAddressRangeKHR    addressRange;
        VkAddressCommandFlagsKHR          addressFlags;
    } VkBindVertexBuffer3InfoKHR;

## Members

- `sType` is a VkStructureType value identifying this structure.

- `pNext` is `NULL` or a pointer to a structure extending this structure.

- `setStride` is a VkBool32 value indicating whether `addressRange.stride` sets the stride for the buffer. If `setStride` is VK_TRUE, the dynamic stride is set for all attributes from this buffer. If `setStride` is VK_FALSE, the stride value is not set.

- `addressRange` is the VkStridedDeviceAddressRangeKHR of the address range to bind.

- `addressFlags` is a VkAddressCommandFlagsKHR value defining the flags for the address range.

## Description

Valid Usage

- VUID-VkBindVertexBuffer3InfoKHR-addressRange-13097
  If the range specified by `addressRange` is not bound completely to memory when accessed, `addressFlags` must not include VK_ADDRESS_COMMAND_FULLY_BOUND_BIT_KHR

- VUID-VkBindVertexBuffer3InfoKHR-addressRange-13098
  If the buffer from which the range specified by `addressRange` was created with VK_BUFFER_CREATE_PROTECTED_BIT, and `protectedNoFault` is not supported, `addressFlags` must include VK_ADDRESS_COMMAND_PROTECTED_BIT_KHR

- VUID-VkBindVertexBuffer3InfoKHR-addressRange-13099
  If the buffer from which the range specified by `addressRange` was created without VK_BUFFER_CREATE_PROTECTED_BIT, and `protectedNoFault` is not supported, `addressFlags` must not include VK_ADDRESS_COMMAND_PROTECTED_BIT_KHR

- VUID-VkBindVertexBuffer3InfoKHR-addressFlags-13100
  `addressFlags` must not include both VK_ADDRESS_COMMAND_STORAGE_BUFFER_USAGE_BIT_KHR and VK_ADDRESS_COMMAND_UNKNOWN_STORAGE_BUFFER_USAGE_BIT_KHR

- VUID-VkBindVertexBuffer3InfoKHR-addressRange-13122
  If any buffer, which is bound to a range of VkDeviceMemory that overlaps the range backing `addressRange`, was created with VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, `addressFlags` must include VK_ADDRESS_COMMAND_STORAGE_BUFFER_USAGE_BIT_KHR or VK_ADDRESS_COMMAND_UNKNOWN_STORAGE_BUFFER_USAGE_BIT_KHR

- VUID-VkBindVertexBuffer3InfoKHR-addressRange-13123
  If any buffer, which is bound to a range of VkDeviceMemory that overlaps the range backing `addressRange`, was created without VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, `addressFlags` must not include VK_ADDRESS_COMMAND_STORAGE_BUFFER_USAGE_BIT_KHR

- VUID-VkBindVertexBuffer3InfoKHR-addressFlags-13101
  `addressFlags` must not include both VK_ADDRESS_COMMAND_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR and VK_ADDRESS_COMMAND_UNKNOWN_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR

- VUID-VkBindVertexBuffer3InfoKHR-addressRange-13124
  If any buffer, which is bound to a range of VkDeviceMemory that overlaps the range backing `addressRange`, was created with VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT, `addressFlags` must include VK_ADDRESS_COMMAND_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR or VK_ADDRESS_COMMAND_UNKNOWN_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR

- VUID-VkBindVertexBuffer3InfoKHR-addressRange-13125
  If any buffer, which is bound to a range of VkDeviceMemory that overlaps the range backing `addressRange`, was created without VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT, `addressFlags` must not include VK_ADDRESS_COMMAND_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR

- VUID-VkBindVertexBuffer3InfoKHR-addressRange-13074
  If `addressRange.address` is not 0, the buffer from which `addressRange` was queried must have been created with the VK_BUFFER_USAGE_VERTEX_BUFFER_BIT usage flag set

- VUID-VkBindVertexBuffer3InfoKHR-addressRange-13075
  If `addressRange.size` is 0, `addressRange.address` must be 0

- VUID-VkBindVertexBuffer3InfoKHR-size-13072
  If the `nullDescriptor` feature is not enabled, `addressRange.size` must not be 0

- VUID-VkBindVertexBuffer3InfoKHR-setStride-13126
  If `setStride` is VK_TRUE, `addressRange.stride` must be less than or equal to `VkPhysicalDeviceLimits`::`maxVertexInputBindingStride`

- VUID-VkBindVertexBuffer3InfoKHR-setStride-13127
  If `setStride` is VK_FALSE, `addressRange.stride` must be 0

Valid Usage (Implicit)

- VUID-VkBindVertexBuffer3InfoKHR-sType-sType
  `sType` must be VK_STRUCTURE_TYPE_BIND_VERTEX_BUFFER_3_INFO_KHR

- VUID-VkBindVertexBuffer3InfoKHR-pNext-pNext
  `pNext` must be `NULL`

- VUID-VkBindVertexBuffer3InfoKHR-addressFlags-parameter
  `addressFlags` must be a valid combination of VkAddressCommandFlagBitsKHR values

## See Also

VK_KHR_device_address_commands, VkAddressCommandFlagsKHR, VkBool32, VkStridedDeviceAddressRangeKHR, VkStructureType, vkCmdBindVertexBuffers3KHR

## 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.

## Copyright

Copyright 2014-2026 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0