## C Specification

The VkBufferViewCreateInfo structure is defined as:

// Provided by VK_VERSION_1_0
typedef struct VkBufferViewCreateInfo {
VkStructureType            sType;
const void*                pNext;
VkBufferViewCreateFlags    flags;
VkBuffer                   buffer;
VkFormat                   format;
VkDeviceSize               offset;
VkDeviceSize               range;
} VkBufferViewCreateInfo;

## Members

• sType is the type of this structure.

• pNext is NULL or a pointer to a structure extending this structure.

• flags is reserved for future use.

• buffer is a VkBuffer on which the view will be created.

• format is a VkFormat describing the format of the data elements in the buffer.

• offset is an offset in bytes from the base address of the buffer. Accesses to the buffer view from shaders use addressing that is relative to this starting offset.

• range is a size in bytes of the buffer view. If range is equal to VK_WHOLE_SIZE, the range from offset to the end of the buffer is used. If VK_WHOLE_SIZE is used and the remaining size of the buffer is not a multiple of the texel block size of format, the nearest smaller multiple is used.

## Description

Valid Usage
• VUID-VkBufferViewCreateInfo-offset-00925
offset must be less than the size of buffer

• VUID-VkBufferViewCreateInfo-range-00928
If range is not equal to VK_WHOLE_SIZE, range must be greater than 0

• VUID-VkBufferViewCreateInfo-range-00929
If range is not equal to VK_WHOLE_SIZE, range must be an integer multiple of the texel block size of format

• VUID-VkBufferViewCreateInfo-range-00930
If range is not equal to VK_WHOLE_SIZE, the number of texel buffer elements given by (⌊range / (texel block size)⌋ × (texels per block)) where texel block size and texels per block are as defined in the Compatible Formats table for format, must be less than or equal to VkPhysicalDeviceLimits::maxTexelBufferElements

• VUID-VkBufferViewCreateInfo-offset-00931
If range is not equal to VK_WHOLE_SIZE, the sum of offset and range must be less than or equal to the size of buffer

• VUID-VkBufferViewCreateInfo-range-04059
If range is equal to VK_WHOLE_SIZE, the number of texel buffer elements given by (⌊(size - offset) / (texel block size)⌋ × (texels per block)) where size is the size of buffer, and texel block size and texels per block are as defined in the Compatible Formats table for format, must be less than or equal to VkPhysicalDeviceLimits::maxTexelBufferElements

• VUID-VkBufferViewCreateInfo-buffer-00932
buffer must have been created with a usage value containing at least one of VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT

• VUID-VkBufferViewCreateInfo-buffer-00933
If buffer was created with usage containing VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, format must be supported for uniform texel buffers, as specified by the VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT flag in VkFormatProperties::bufferFeatures returned by vkGetPhysicalDeviceFormatProperties

• VUID-VkBufferViewCreateInfo-buffer-00934
If buffer was created with usage containing VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, format must be supported for storage texel buffers, as specified by the VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT flag in VkFormatProperties::bufferFeatures returned by vkGetPhysicalDeviceFormatProperties

• VUID-VkBufferViewCreateInfo-buffer-00935
If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object

• VUID-VkBufferViewCreateInfo-offset-02749
If the texelBufferAlignment feature is not enabled, offset must be a multiple of VkPhysicalDeviceLimits::minTexelBufferOffsetAlignment

• VUID-VkBufferViewCreateInfo-buffer-02750
If the texelBufferAlignment feature is enabled and if buffer was created with usage containing VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, offset must be a multiple of the lesser of VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::storageTexelBufferOffsetAlignmentBytes or, if VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::storageTexelBufferOffsetSingleTexelAlignment is VK_TRUE, the size of a texel of the requested format. If the size of a texel is a multiple of three bytes, then the size of a single component of format is used instead

• VUID-VkBufferViewCreateInfo-buffer-02751
If the texelBufferAlignment feature is enabled and if buffer was created with usage containing VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, offset must be a multiple of the lesser of VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::uniformTexelBufferOffsetAlignmentBytes or, if VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::uniformTexelBufferOffsetSingleTexelAlignment is VK_TRUE, the size of a texel of the requested format. If the size of a texel is a multiple of three bytes, then the size of a single component of format is used instead

Valid Usage (Implicit)
• VUID-VkBufferViewCreateInfo-sType-sType
sType must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO

• VUID-VkBufferViewCreateInfo-pNext-pNext
pNext must be NULL

flags must be 0

• VUID-VkBufferViewCreateInfo-buffer-parameter
buffer must be a valid VkBuffer handle

• VUID-VkBufferViewCreateInfo-format-parameter
format must be a valid VkFormat value