VkBufferCreateInfo(3)

# VkBufferCreateInfo(3) Manual Page

## Name

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

Loading… please wait.

## 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 the type of 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

Valid Usage

- 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-sharingMode-00914
  If `sharingMode` is `VK_SHARING_MODE_CONCURRENT`, `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 vkGetPhysicalDeviceQueueFamilyProperties or vkGetPhysicalDeviceQueueFamilyProperties2 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 `bufferDeviceAddressCaptureReplay` or `bufferDeviceAddressCaptureReplayEXT` 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`, 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`, 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-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`

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, VkDedicatedAllocationBufferCreateInfoNV, VkExternalMemoryBufferCreateInfo, VkOpaqueCaptureDescriptorDataCreateInfoEXT, or VkVideoProfileListInfoKHR

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

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

- VUID-VkBufferCreateInfo-usage-parameter
  `usage` must be a valid combination of VkBufferUsageFlagBits values

- VUID-VkBufferCreateInfo-usage-requiredbitmask
  `usage` must not be `0`

- 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-2023 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0