Structures

VkBufferCreateInfo

Structure specifying the parameters of a newly created buffer object

The VkBufferCreateInfo structure is defined as:

typedef struct VkBufferCreateInfo {
    VkStructureType sType;
    const void* pNext;
    VkBufferCreateFlags flags;
    VkDeviceSize size;
    VkBufferUsageFlags usage;
    VkSharingMode sharingMode;
    uint32_t queueFamilyIndexCount;
    const uint32_t* pQueueFamilyIndices;
} VkBufferCreateInfo;
  • sType is a VkStructureType value identifying this structure.
  • pNext is NULL or a pointer to a structure extending this structure.
  • flags is a bitmask of VkBufferCreateFlagBits specifying additional parameters of the buffer.
  • size is the size in bytes of the buffer to be created.
  • usage is a bitmask of VkBufferUsageFlagBits specifying allowed usages of the buffer.
  • sharingMode is a VkSharingMode value specifying the sharing mode of the buffer when it will be accessed by multiple queue families.
  • queueFamilyIndexCount is the number of entries in the pQueueFamilyIndices array.
  • pQueueFamilyIndices is a pointer to an array of queue families that will access this buffer. It is ignored if sharingMode is not VK_SHARING_MODE_CONCURRENT.

usage defines the effective usage flags for the buffer. If the pNext chain includes a VkBufferUsageFlags2CreateInfo structure, usage is ignored, and the effective usage flags are defined by VkBufferUsageFlags2CreateInfo::usage.

If VkBufferDeviceAddressAlignmentAllocateInfoVALVE is included in the pNext chain, and a sparse buffer is being created, the alignment for buffer device addresses can be controlled. For non-sparse buffers, alignment requirements are specified at device memory allocation time in vkAllocateMemory instead. For implementations which allocate buffer device addresses regardless at buffer create time, the implementation is expected to allocate buffer device addresses with alignment equal to maxBufferDeviceAddressAllocationAlignment, effectively ignoring any application-requested alignment.

Valid Usage

VUID-VkBufferCreateInfo-None-09499

If the pNext chain does not include a VkBufferUsageFlags2CreateInfo structure, usage must be a valid combination of VkBufferUsageFlagBits values

VUID-VkBufferCreateInfo-None-09500

If the pNext chain does not include a VkBufferUsageFlags2CreateInfo structure, usage must not be 0

VUID-VkBufferCreateInfo-size-00912

size must be greater than 0

VUID-VkBufferCreateInfo-sharingMode-00913

If sharingMode is VK_SHARING_MODE_CONCURRENT, pQueueFamilyIndices must be a valid pointer to an array of queueFamilyIndexCount uint32_t values

VUID-VkBufferCreateInfo-maintenance11-13353

If the maintenance11 feature is enabled and sharingMode is VK_SHARING_MODE_CONCURRENT, then queueFamilyIndexCount must be greater than 0

VUID-VkBufferCreateInfo-sharingMode-00914

If the maintenance11 feature is not enabled and sharingMode is VK_SHARING_MODE_CONCURRENT, then queueFamilyIndexCount must be greater than 1

VUID-VkBufferCreateInfo-sharingMode-01419

If sharingMode is VK_SHARING_MODE_CONCURRENT, each element of pQueueFamilyIndices must be unique and must be less than pQueueFamilyPropertyCount returned by either vkGetPhysicalDeviceQueueFamilyProperties2 or vkGetPhysicalDeviceQueueFamilyProperties for the physicalDevice that was used to create device

VUID-VkBufferCreateInfo-flags-00915

If the sparseBinding feature is not enabled, flags must not contain VK_BUFFER_CREATE_SPARSE_BINDING_BIT

VUID-VkBufferCreateInfo-flags-00916

If the sparseResidencyBuffer feature is not enabled, flags must not contain VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT

VUID-VkBufferCreateInfo-flags-00917

If the sparseResidencyAliased feature is not enabled, flags must not contain VK_BUFFER_CREATE_SPARSE_ALIASED_BIT

VUID-VkBufferCreateInfo-flags-00918

If flags contains VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT or VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, it must also contain VK_BUFFER_CREATE_SPARSE_BINDING_BIT

VUID-VkBufferCreateInfo-pNext-00920

If the pNext chain includes a VkExternalMemoryBufferCreateInfo structure, its handleTypes member must only contain bits that are also in VkExternalBufferProperties::externalMemoryProperties.compatibleHandleTypes, as returned by vkGetPhysicalDeviceExternalBufferProperties with pExternalBufferInfo→handleType equal to any one of the handle types specified in VkExternalMemoryBufferCreateInfo::handleTypes

VUID-VkBufferCreateInfo-flags-01887

If the protectedMemory feature is not enabled, flags must not contain VK_BUFFER_CREATE_PROTECTED_BIT

VUID-VkBufferCreateInfo-None-01888

If any of the bits VK_BUFFER_CREATE_SPARSE_BINDING_BIT, VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or VK_BUFFER_CREATE_SPARSE_ALIASED_BIT are set, VK_BUFFER_CREATE_PROTECTED_BIT must not also be set

VUID-VkBufferCreateInfo-pNext-01571

If the pNext chain includes a VkDedicatedAllocationBufferCreateInfoNV structure, and the dedicatedAllocation member of the chained structure is VK_TRUE, then flags must not include VK_BUFFER_CREATE_SPARSE_BINDING_BIT, VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or VK_BUFFER_CREATE_SPARSE_ALIASED_BIT

VUID-VkBufferCreateInfo-deviceAddress-02604

If VkBufferDeviceAddressCreateInfoEXT::deviceAddress is not zero, flags must include VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT

VUID-VkBufferCreateInfo-opaqueCaptureAddress-03337

If VkBufferOpaqueCaptureAddressCreateInfo::opaqueCaptureAddress is not zero, flags must include VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT

VUID-VkBufferCreateInfo-flags-03338

If flags includes VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, the [VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::bufferDeviceAddressCaptureReplay](xref::features-bufferDeviceAddressCaptureReplayEXT) feature or the bufferDeviceAddressCaptureReplay feature must be enabled

VUID-VkBufferCreateInfo-usage-04813

If usage includes VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR or VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR, and flags does not include VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then the pNext chain must include a VkVideoProfileListInfoKHR structure with profileCount greater than 0 and pProfiles including at least one VkVideoProfileInfoKHR structure with a videoCodecOperation member specifying a decode operation

VUID-VkBufferCreateInfo-usage-04814

If usage includes VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR or VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR, and flags does not include VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then the pNext chain must include a VkVideoProfileListInfoKHR structure with profileCount greater than 0 and pProfiles including at least one VkVideoProfileInfoKHR structure with a videoCodecOperation member specifying an encode operation

VUID-VkBufferCreateInfo-flags-08325

If flags includes VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then videoMaintenance1 must be enabled

VUID-VkBufferCreateInfo-pNext-10783

If the pNext chain includes a VkVideoProfileListInfoKHR structure and for any element of its pProfiles member videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the videoDecodeVP9 feature must be enabled

VUID-VkBufferCreateInfo-pNext-10249

If the pNext chain includes a VkVideoProfileListInfoKHR structure and for any element of its pProfiles member videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the videoEncodeAV1 feature must be enabled

VUID-VkBufferCreateInfo-pNext-10919

If the pNext chain includes a VkVideoEncodeProfileRgbConversionInfoVALVE structure, then the videoEncodeRgbConversion feature must be enabled

VUID-VkBufferCreateInfo-size-06409

size must be less than or equal to VkPhysicalDeviceMaintenance4Properties::maxBufferSize

VUID-VkBufferCreateInfo-usage-08097

If usage includes VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT, creating this VkBuffer must not cause the total required space for all currently valid buffers using this flag on the device to exceed VkPhysicalDeviceDescriptorBufferPropertiesEXT::samplerDescriptorBufferAddressSpaceSize or VkPhysicalDeviceDescriptorBufferPropertiesEXT::descriptorBufferAddressSpaceSize

VUID-VkBufferCreateInfo-usage-08098

If usage includes VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT, creating this VkBuffer must not cause the total required space for all currently valid buffers using this flag on the device to exceed VkPhysicalDeviceDescriptorBufferPropertiesEXT::resourceDescriptorBufferAddressSpaceSize or VkPhysicalDeviceDescriptorBufferPropertiesEXT::descriptorBufferAddressSpaceSize

VUID-VkBufferCreateInfo-flags-08099

If flags includes VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, the descriptorBufferCaptureReplay feature must be enabled

VUID-VkBufferCreateInfo-pNext-08100

If the pNext chain includes a VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, flagsmust contain VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT

VUID-VkBufferCreateInfo-usage-08101

If usage includes VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT, the descriptorBufferPushDescriptors feature must be enabled

VUID-VkBufferCreateInfo-usage-08102

If usage includes VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT

VkPhysicalDeviceDescriptorBufferPropertiesEXT::bufferlessPushDescriptorsmust be VK_FALSE

VUID-VkBufferCreateInfo-usage-08103

If usage includes VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT, usage must contain at least one of VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT or VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT

VUID-VkBufferCreateInfo-tileMemoryHeap-10762

If the tileMemoryHeap feature is not enabled, usage must not include VK_BUFFER_USAGE_TILE_MEMORY_BIT_QCOM

VUID-VkBufferCreateInfo-usage-10763

If usage includes VK_BUFFER_USAGE_TILE_MEMORY_BIT_QCOM, then flags must not contain any of the VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, VK_BUFFER_CREATE_SPARSE_BINDING_BIT, VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, or VK_BUFFER_CREATE_PROTECTED_BIT flags

VUID-VkBufferCreateInfo-usage-10764

If usage includes VK_BUFFER_USAGE_TILE_MEMORY_BIT_QCOM, then only the following usages may be set:

  • VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
  • VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
  • VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT
  • VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
  • VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
  • and if VkPhysicalDeviceTileMemoryHeapPropertiesQCOM::tileBufferTransfers is VK_TRUE then additionally VK_BUFFER_USAGE_TRANSFER_SRC_BIT or VK_BUFFER_USAGE_TRANSFER_DST_BIT

VUID-VkBufferCreateInfo-flags-09641

If flags includes VK_BUFFER_CREATE_PROTECTED_BIT, then the effective usage flags must not contain bits other than

  • VK_BUFFER_USAGE_TRANSFER_SRC_BIT
  • VK_BUFFER_USAGE_TRANSFER_DST_BIT
  • VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
  • VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
  • VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT
  • VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
  • VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
  • VK_BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR
  • VK_BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR
  • VK_BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT

VUID-VkBufferCreateInfo-flags-11277

If the protectedDescriptorHeaps property is not supported and the effective usage flags include the VK_BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT flag, flags must not include the VK_BUFFER_CREATE_PROTECTED_BIT flag

VUID-VkBufferCreateInfo-flags-11279

If the sparseDescriptorHeaps property is not supported and the effective usage flags include the VK_BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT flag, flags must not include any of the VK_BUFFER_CREATE_SPARSE_BINDING_BIT, VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or VK_BUFFER_CREATE_SPARSE_ALIASED_BIT flags

VUID-VkBufferCreateInfo-flags-12515

If flags does not include VK_BUFFER_CREATE_SPARSE_BINDING_BIT, VkBufferDeviceAddressAlignmentAllocateInfoVALVE::alignmentmust be 0

VUID-VkBufferCreateInfo-alignment-12516

If VkBufferDeviceAddressAlignmentAllocateInfoVALVE::alignment is not 0, the effective usage flags must include VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT

Valid Usage (Implicit)