Structures

VkDescriptorBufferInfo

Structure specifying descriptor buffer information

The VkDescriptorBufferInfo structure is defined as:

typedef struct VkDescriptorBufferInfo {
    VkBuffer buffer;
    VkDeviceSize offset;
    VkDeviceSize range;
} VkDescriptorBufferInfo;
  • buffer is VK_NULL_HANDLE or the buffer resource.
  • offset is the offset in bytes from the start of buffer. Access to buffer memory via this descriptor uses addressing that is relative to this starting offset.
  • range is the size in bytes that is used for this descriptor update, or VK_WHOLE_SIZE to use the range from offset to the end of the buffer.

    When setting range to VK_WHOLE_SIZE, the effective range must not be larger than the maximum range for the descriptor type (maxUniformBufferRange or maxStorageBufferRange). This means that VK_WHOLE_SIZE is not typically useful in the common case where uniform buffer descriptors are suballocated from a buffer that is much larger than maxUniformBufferRange.

For VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC and VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC descriptor types, offset is the base offset from which the dynamic offset is applied and range is the static size used for all dynamic offsets.

When range is VK_WHOLE_SIZE the effective range is calculated at vkUpdateDescriptorSets is by taking the size of buffer minus the offset.

Valid Usage

VUID-VkDescriptorBufferInfo-offset-00340

offset must be less than the size of buffer

VUID-VkDescriptorBufferInfo-range-00341

If range is not equal to VK_WHOLE_SIZE, range must be greater than 0

VUID-VkDescriptorBufferInfo-range-00342

If range is not equal to VK_WHOLE_SIZE, range must be less than or equal to the size of buffer minus offset

VUID-VkDescriptorBufferInfo-buffer-02998

If the nullDescriptor feature is not enabled, buffer must not be VK_NULL_HANDLE

VUID-VkDescriptorBufferInfo-buffer-02999

If buffer is VK_NULL_HANDLE, offset must be zero and range must be VK_WHOLE_SIZE

Valid Usage (Implicit)

VUID-VkDescriptorBufferInfo-buffer-parameter

If buffer is not VK_NULL_HANDLE, buffer must be a valid VkBuffer handle