VkSetDescriptorBufferOffsetsInfoEXT(3)

# VkSetDescriptorBufferOffsetsInfoEXT(3) Manual Page

## Name

VkSetDescriptorBufferOffsetsInfoEXT - Structure specifying descriptor buffer offsets to set in a command buffer

Loading… please wait.

## C Specification

The `VkSetDescriptorBufferOffsetsInfoEXT` structure is defined as:

    // Provided by VK_KHR_maintenance6 with VK_EXT_descriptor_buffer
    typedef struct VkSetDescriptorBufferOffsetsInfoEXT {
        VkStructureType        sType;
        const void*            pNext;
        VkShaderStageFlags     stageFlags;
        VkPipelineLayout       layout;
        uint32_t               firstSet;
        uint32_t               setCount;
        const uint32_t*        pBufferIndices;
        const VkDeviceSize*    pOffsets;
    } VkSetDescriptorBufferOffsetsInfoEXT;

## Members

- `sType` is a VkStructureType value identifying this structure.

- `pNext` is `NULL` or a pointer to a structure extending this structure.

- `stageFlags` is a bitmask of VkShaderStageFlagBits specifying the shader stages the descriptor sets will be bound to

- `layout` is a VkPipelineLayout object used to program the bindings. If the `dynamicPipelineLayout` feature is enabled, `layout` can be VK_NULL_HANDLE and the layout must be specified by chaining VkPipelineLayoutCreateInfo structure off the `pNext`

- `firstSet` is the number of the first set to be bound.

- `setCount` is the number of elements in the `pBufferIndices` and `pOffsets` arrays.

- `pBufferIndices` is a pointer to an array of indices into the descriptor buffer binding points set by vkCmdBindDescriptorBuffersEXT.

- `pOffsets` is a pointer to an array of VkDeviceSize offsets to apply to the bound descriptor buffers.

## Description

If `stageFlags` specifies a subset of all stages corresponding to one or more pipeline bind points, the binding operation still affects all stages corresponding to the given pipeline bind point(s) as if the equivalent original version of this command had been called with the same parameters. For example, specifying a `stageFlags` value of `VK_SHADER_STAGE_VERTEX_BIT` | `VK_SHADER_STAGE_FRAGMENT_BIT` | `VK_SHADER_STAGE_COMPUTE_BIT` is equivalent to calling the original version of this command once with `VK_PIPELINE_BIND_POINT_GRAPHICS` and once with `VK_PIPELINE_BIND_POINT_COMPUTE`.

Valid Usage

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-pOffsets-08061
  The offsets in `pOffsets` must be aligned to VkPhysicalDeviceDescriptorBufferPropertiesEXT::`descriptorBufferOffsetAlignment`

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-pOffsets-08063
  The offsets in `pOffsets` must be small enough such that any descriptor binding referenced by `layout` without the `VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT` flag computes a valid address inside the underlying VkBuffer

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-pOffsets-08126
  The offsets in `pOffsets` must be small enough such that any location accessed by a shader as a sampler descriptor must be within VkPhysicalDeviceDescriptorBufferPropertiesEXT::`maxSamplerDescriptorBufferRange` of the sampler descriptor buffer binding

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-pOffsets-08127
  The offsets in `pOffsets` must be small enough such that any location accessed by a shader as a resource descriptor must be within VkPhysicalDeviceDescriptorBufferPropertiesEXT::`maxResourceDescriptorBufferRange` of the resource descriptor buffer binding

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-pBufferIndices-08064
  Each element of `pBufferIndices` must be less than VkPhysicalDeviceDescriptorBufferPropertiesEXT::`maxDescriptorBufferBindings`

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-pBufferIndices-08065
  Each element of `pBufferIndices` must reference a valid descriptor buffer binding set by a previous call to vkCmdBindDescriptorBuffersEXT in `commandBuffer`

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-firstSet-08066
  The sum of `firstSet` and `setCount` must be less than or equal to VkPipelineLayoutCreateInfo::`setLayoutCount` provided when `layout` was created

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-firstSet-09006
  The VkDescriptorSetLayout for each set from `firstSet` to `firstSet` + `setCount` when `layout` was created must have been created with the `VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT` bit set

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-None-09495
  If the `dynamicPipelineLayout` feature is not enabled, `layout` must be a valid VkPipelineLayout handle

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-layout-09496
  If `layout` is VK_NULL_HANDLE, the `pNext` chain must include a valid VkPipelineLayoutCreateInfo structure

Valid Usage (Implicit)

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-sType-sType
  `sType` must be `VK_STRUCTURE_TYPE_SET_DESCRIPTOR_BUFFER_OFFSETS_INFO_EXT`

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-pNext-pNext
  `pNext` must be `NULL` or a pointer to a valid instance of VkPipelineLayoutCreateInfo

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-sType-unique
  The `sType` value of each struct in the `pNext` chain must be unique

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-stageFlags-parameter
  `stageFlags` must be a valid combination of VkShaderStageFlagBits values

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-stageFlags-requiredbitmask
  `stageFlags` must not be `0`

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-layout-parameter
  If `layout` is not VK_NULL_HANDLE, `layout` must be a valid VkPipelineLayout handle

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-pBufferIndices-parameter
  `pBufferIndices` must be a valid pointer to an array of `setCount` `uint32_t` values

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-pOffsets-parameter
  `pOffsets` must be a valid pointer to an array of `setCount` VkDeviceSize values

- VUID-VkSetDescriptorBufferOffsetsInfoEXT-setCount-arraylength
  `setCount` must be greater than `0`

## See Also

VK_EXT_descriptor_buffer, VK_KHR_maintenance6, VkDeviceSize, VkPipelineLayout, VkShaderStageFlags, VkStructureType, vkCmdSetDescriptorBufferOffsets2EXT

## Document Notes

For more information, see the Vulkan Specification

This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.

## Copyright

Copyright 2014-2025 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0