VkBufferCreateInfo(3)

# VkBufferCreateInfo(3) Manual Page

## Name

VkBufferCreateInfo - Structure specifying the parameters of a newly created buffer object

## C Specification

The `VkBufferCreateInfo` structure is defined as:

    // Provided by VK_VERSION_1_0
    typedef struct VkBufferCreateInfo {
        VkStructureType        sType;
        const void*            pNext;
        VkBufferCreateFlags    flags;
        VkDeviceSize           size;
        VkBufferUsageFlags     usage;
        VkSharingMode          sharingMode;
        uint32_t               queueFamilyIndexCount;
        const uint32_t*        pQueueFamilyIndices;
    } VkBufferCreateInfo;

## Members

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

## Description

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

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` 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, `flags` must 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`::`bufferlessPushDescriptors` must 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

Valid Usage (Implicit)

- VUID-VkBufferCreateInfo-sType-sType
  `sType` must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO

- VUID-VkBufferCreateInfo-pNext-pNext
  Each `pNext` member of any structure (including this one) in the `pNext` chain must be either `NULL` or a pointer to a valid instance of VkBufferCollectionBufferCreateInfoFUCHSIA, VkBufferDeviceAddressCreateInfoEXT, VkBufferOpaqueCaptureAddressCreateInfo, VkBufferUsageFlags2CreateInfo, VkDedicatedAllocationBufferCreateInfoNV, VkExternalMemoryBufferCreateInfo, VkOpaqueCaptureDescriptorDataCreateInfoEXT, or VkVideoProfileListInfoKHR

- VUID-VkBufferCreateInfo-sType-unique
  The `sType` value of each structure in the `pNext` chain must be unique

- VUID-VkBufferCreateInfo-flags-parameter
  `flags` must be a valid combination of VkBufferCreateFlagBits values

- VUID-VkBufferCreateInfo-sharingMode-parameter
  `sharingMode` must be a valid VkSharingMode value

## See Also

VK_VERSION_1_0, VkBufferConstraintsInfoFUCHSIA, VkBufferCreateFlags, VkBufferUsageFlags, VkDeviceBufferMemoryRequirements, VkDeviceSize, VkSharingMode, VkStructureType, vkCreateBuffer

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