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;
pub struct BufferCreateInfo {
s_type: vk::StructureType,
p_next: *const c_void,
flags: vk::BufferCreateFlags, // Buffer creation flags
size: vk::DeviceSize, // Specified in bytes
usage: vk::BufferUsageFlags, // Buffer usage flags
sharing_mode: vk::SharingMode,
queue_family_index_count: u32,
p_queue_family_indices: *const u32,
}
sTypeis a VkStructureType value identifying this structure.pNextisNULLor a pointer to a structure extending this structure.flagsis a bitmask of VkBufferCreateFlagBits specifying additional parameters of the buffer.sizeis the size in bytes of the buffer to be created.usageis a bitmask of VkBufferUsageFlagBits specifying allowed usages of the buffer.sharingModeis a VkSharingMode value specifying the sharing mode of the buffer when it will be accessed by multiple queue families.queueFamilyIndexCountis the number of entries in thepQueueFamilyIndicesarray.pQueueFamilyIndicesis a pointer to an array of queue families that will access this buffer. It is ignored ifsharingModeis notVK_SHARING_MODE_CONCURRENT.
usage defines the effective usage flags for the buffer.
If the pNext chain includes a VkBufferUsageFlags2CreateInfo
structure, VkBufferUsageFlags2CreateInfo::usage from that
structure is used as the effective usage instead of usage from this
structure.
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-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-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 following bits
VK_BUFFER_CREATE_SPARSE_BINDING_BITVK_BUFFER_CREATE_SPARSE_RESIDENCY_BITVK_BUFFER_CREATE_SPARSE_ALIASED_BITVK_BUFFER_CREATE_PROTECTED_BITVK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BITVK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXTVK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR
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_BITVK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BITVK_BUFFER_USAGE_UNIFORM_BUFFER_BITVK_BUFFER_USAGE_STORAGE_BUFFER_BITVK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT- and if
VkPhysicalDeviceTileMemoryHeapPropertiesQCOM::
tileBufferTransfersisVK_TRUEthen additionallyVK_BUFFER_USAGE_TRANSFER_SRC_BITorVK_BUFFER_USAGE_TRANSFER_DST_BIT
VUID-VkBufferCreateInfo-flags-09641
If flags includes VK_BUFFER_CREATE_PROTECTED_BIT, then the
effective usage must not contain
bits other than
VK_BUFFER_USAGE_TRANSFER_SRC_BITVK_BUFFER_USAGE_TRANSFER_DST_BITVK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BITVK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BITVK_BUFFER_USAGE_UNIFORM_BUFFER_BITVK_BUFFER_USAGE_STORAGE_BUFFER_BITVK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BITVK_BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHRVK_BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHRVK_BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT
VUID-VkBufferCreateInfo-flags-11277
If the
protectedDescriptorHeaps
property is not supported and the effective usage includes 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 includes 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