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, 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_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 flags 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 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
VUID-VkBufferCreateInfo-alignment-12517
If
VkBufferDeviceAddressAlignmentAllocateInfoVALVE::alignment
is not 0,
VkBufferOpaqueCaptureAddressCreateInfo::opaqueCaptureAddressmust be 0
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, VkBufferDeviceAddressAlignmentAllocateInfoVALVE, 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
If flags is not 0, flags must be a valid combination of VkBufferCreateFlagBits values
VUID-VkBufferCreateInfo-sharingMode-parameter
sharingMode must be a valid VkSharingMode value