VkBufferCreateInfo
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
isNULL
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 thepQueueFamilyIndices
array.pQueueFamilyIndices
is a pointer to an array of queue families that will access this buffer. It is ignored ifsharingMode
is notVK_SHARING_MODE_CONCURRENT
.
If the pNext
chain includes a VkBufferUsageFlags2CreateInfoKHR
structure, VkBufferUsageFlags2CreateInfoKHR::usage
from that
structure is used instead of usage
from this structure.
Valid Usage
VUID-VkBufferCreateInfo-None-09499
If the pNext
chain does not include a
VkBufferUsageFlags2CreateInfoKHR structure,
usage
must be a valid combination of VkBufferUsageFlagBits
values
VUID-VkBufferCreateInfo-None-09500
If the pNext
chain does not include a
VkBufferUsageFlags2CreateInfoKHR 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-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 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-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
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-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-flags-09641
If flags
includes VK_BUFFER_CREATE_PROTECTED_BIT
, then
usage
must not contain any of the following bits- VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT
VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT
VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR
VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR
VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT
VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT
VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT
VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT
VK_BUFFER_USAGE_MICROMAP_STORAGE_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, VkBufferUsageFlags2CreateInfoKHR, 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-sharingMode-parameter
sharingMode
must be a valid VkSharingMode value
::