VkResourceDescriptorInfoEXT(3)

# VkResourceDescriptorInfoEXT(3) Manual Page

## Name

VkResourceDescriptorInfoEXT - Structure describing a resource descriptor

## C Specification

`VkResourceDescriptorInfoEXT` is defined as:

    // Provided by VK_EXT_descriptor_heap
    typedef struct VkResourceDescriptorInfoEXT {
        VkStructureType                sType;
        const void*                    pNext;
        VkDescriptorType               type;
        VkResourceDescriptorDataEXT    data;
    } VkResourceDescriptorInfoEXT;

## Members

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

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

- `type` is the type of descriptor to get.

- `data` is a VkResourceDescriptorDataEXT union defining the properties of a resource descriptor according to `type`

## Description

If `type` is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, `data->pTexelBuffer` is used to construct the descriptor.

If `type` is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, `data->pAddressRange` is used to construct the descriptor. For acceleration structures, the size of the range is not used by the descriptor, and can be set to 0. If a non-zero size is provided though, it must be a valid range.

Note | Applications may wish to provide a valid range as a way to check their own assumptions about the range they are binding; but it has no bearing on anything except validation. Implementations cannot make any assumptions based on the size of the provided range.

If `type` is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, `data->pImage` is used to construct the descriptor. If `type` is VK_DESCRIPTOR_TYPE_TENSOR_ARM, `data->pTensorARM` is used to construct the descriptor.

If the `nullDescriptor` feature is enabled, the corresponding element of `data` may be `NULL` to generate a null descriptor.

Applications can give resource descriptors a debug name in a similar way to naming an object, via the VkDebugUtilsObjectNameInfoEXT structure. However, as there is no actual object, this structure must be passed via the `pNext` chain of this structure, with a `objectType` of VK_OBJECT_TYPE_UNKNOWN and a `objectHandle` of VK_NULL_HANDLE. The name is attached to the unique set of descriptor bits written by the implementation, and writing the same bits again with new debug info may rename the original descriptor.

Note | Implementations are not prevented from returning the same bits for different descriptors. This can result in multiple different resources mapping to the same name. A common case for this might be something like a uniform buffer and storage buffer with the same device address range.

If a descriptor becomes invalid due to the underlying resource becoming invalid, implementations may remove the name association.

Valid Usage

- VUID-VkResourceDescriptorInfoEXT-type-11210
  `type` must be one of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV, VK_DESCRIPTOR_TYPE_TENSOR_ARM, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT

- VUID-VkResourceDescriptorInfoEXT-None-11211
  If the `nullDescriptor` feature is not enabled, and `type` is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, `data->pImage` must not be `NULL`

- VUID-VkResourceDescriptorInfoEXT-type-11469
  If `type` is VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, `data->pImage` must not be `NULL`

- VUID-VkResourceDescriptorInfoEXT-None-11212
  If the `nullDescriptor` feature is not enabled, and `type` is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, `data->pTexelBuffer` must not be `NULL`

- VUID-VkResourceDescriptorInfoEXT-None-11213
  If the `nullDescriptor` feature is not enabled, and `type` is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, `data->pAddressRange` must not be `NULL`

- VUID-VkResourceDescriptorInfoEXT-None-11457
  If the `nullDescriptor` feature is not enabled, and `type` is VK_DESCRIPTOR_TYPE_TENSOR_ARM, `data->pTensorARM` must not be `NULL`

- VUID-VkResourceDescriptorInfoEXT-type-12349
  If `type` is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, `data->pTexelBuffer->addressRange.address` must be a multiple of the effective alignment requirement of `data->pTexelBuffer->format` as determined by `minTexelBufferOffsetAlignment`

- VUID-VkResourceDescriptorInfoEXT-type-12350
  If `type` is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, `data->pAddressRange->address` must be a multiple of `minUniformBufferOffsetAlignment`

- VUID-VkResourceDescriptorInfoEXT-type-12351
  If `type` is VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, `data->pAddressRange->address` must be a multiple of `minStorageBufferOffsetAlignment`

- VUID-VkResourceDescriptorInfoEXT-type-11454
  If `type` is one of

  - VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR

  - VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV

  - VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV

    `data->pAddressRange->address` must be a multiple of 256

- VUID-VkResourceDescriptorInfoEXT-pNext-11401
  If there is a VkDebugUtilsObjectNameInfoEXT structure in the `pNext` chain, its `objectType` must be VK_OBJECT_TYPE_UNKNOWN

- VUID-VkResourceDescriptorInfoEXT-type-11422
  If `type` is VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, `data.pImage->pView->image` must not have been created with an `imageType` of VK_IMAGE_TYPE_3D

- VUID-VkResourceDescriptorInfoEXT-type-11424
  If `type` is VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, `data.pImage->pView->viewType` is VK_IMAGE_VIEW_TYPE_2D, and the `image2DViewOf3D` feature is not enabled, `data.pImage->pView->image` must not have been created with an `imageType` of VK_IMAGE_TYPE_3D

- VUID-VkResourceDescriptorInfoEXT-type-11425
  If `type` is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, `data.pImage->pView->viewType` is VK_IMAGE_VIEW_TYPE_2D, and the `sampler2DViewOf3D` feature is not enabled, `data.pImage->pView->image` must not have been created with an `imageType` of VK_IMAGE_TYPE_3D

- VUID-VkResourceDescriptorInfoEXT-type-11433
  If `type` is VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, `data.pAddressRange->size` must not be 0

- VUID-VkResourceDescriptorInfoEXT-type-11458
  If `type` is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE and `data.pImage` is not `NULL`, `data.pImage->pView->image` must have been created with the VK_IMAGE_USAGE_SAMPLED_BIT usage flag set

- VUID-VkResourceDescriptorInfoEXT-type-11459
  If `type` is VK_DESCRIPTOR_TYPE_STORAGE_IMAGE and `data.pImage` is not `NULL`, `data.pImage->pView->image` must have been created with the VK_IMAGE_USAGE_STORAGE_BIT usage flag set

- VUID-VkResourceDescriptorInfoEXT-type-11460
  If `type` is VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT and `data.pImage` is not `NULL`, `data.pImage->pView->image` must have been created with the VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT usage flag set

- VUID-VkResourceDescriptorInfoEXT-type-11461
  If `type` is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and `data.pAddressRange` is not `NULL`, `data.pAddressRange` must be a device address range allocated to the application from a buffer created with the VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT usage flag set

- VUID-VkResourceDescriptorInfoEXT-type-11462
  If `type` is VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and `data.pAddressRange` is not `NULL`, `data.pAddressRange` must be a device address range allocated to the application from a buffer created with the VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag set

- VUID-VkResourceDescriptorInfoEXT-type-11463
  If `type` is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER and `data.pTexelBuffer` is not `NULL`, `data.pTexelBuffer->addressRange` must be a device address range allocated to the application from a buffer created with the VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT usage flag set

- VUID-VkResourceDescriptorInfoEXT-type-11464
  If `type` is VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER and `data.pTexelBuffer` is not `NULL`, `data.pTexelBuffer->addressRange` must be a device address range allocated to the application from a buffer created with the VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT usage flag set

- VUID-VkResourceDescriptorInfoEXT-type-11483
  If `type` is VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV or VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, and `data.pAddressRange` is not `NULL`, `data.pAddressRange->address` must be an acceleration structure address retrieved from a VkAccelerationStructureKHR object via vkGetAccelerationStructureDeviceAddressKHR

- VUID-VkResourceDescriptorInfoEXT-type-11484
  If `type` is VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV or VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, `data.pAddressRange` is not `NULL`, and `data.pAddressRange->size` is not 0, `data.pAddressRange` must be a device address range allocated to the application from the buffer used to create the acceleration structure that `data.pAddressRange->address` was retrieved from, and within the buffer range bound to that acceleration structure

- VUID-VkResourceDescriptorInfoEXT-type-11467
  If `type` is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV and `data.pAddressRange` is not `NULL`, `data.pAddressRange->address` must be an acceleration structure handle retrieved from a VkAccelerationStructureNV object via vkGetAccelerationStructureHandleNV

- VUID-VkResourceDescriptorInfoEXT-type-11468
  If `type` is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV and `data.pAddressRange` is not `NULL`, `data.pAddressRange->size` must be 0

Valid Usage (Implicit)

- VUID-VkResourceDescriptorInfoEXT-sType-sType
  `sType` must be VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT

- VUID-VkResourceDescriptorInfoEXT-pNext-pNext
  `pNext` must be `NULL` or a pointer to a valid instance of VkDebugUtilsObjectNameInfoEXT

- VUID-VkResourceDescriptorInfoEXT-sType-unique
  The `sType` value of each structure in the `pNext` chain must be unique

- VUID-VkResourceDescriptorInfoEXT-type-parameter
  `type` must be a valid VkDescriptorType value

- VUID-VkResourceDescriptorInfoEXT-pImage-parameter
  If `type` is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, or VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, and if `pImage` is not `NULL`, the `pImage` member of `data` must be a valid pointer to a valid VkImageDescriptorInfoEXT structure

- VUID-VkResourceDescriptorInfoEXT-pTexelBuffer-parameter
  If `type` is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, and if `pTexelBuffer` is not `NULL`, the `pTexelBuffer` member of `data` must be a valid pointer to a valid VkTexelBufferDescriptorInfoEXT structure

- VUID-VkResourceDescriptorInfoEXT-pAddressRange-parameter
  If `type` is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, and if `pAddressRange` is not `NULL`, the `pAddressRange` member of `data` must be a valid pointer to a valid VkDeviceAddressRangeEXT structure

- VUID-VkResourceDescriptorInfoEXT-pTensorARM-parameter
  If `type` is VK_DESCRIPTOR_TYPE_TENSOR_ARM, and if `pTensorARM` is not `NULL`, the `pTensorARM` member of `data` must be a valid pointer to a valid VkTensorViewCreateInfoARM structure

## See Also

VK_EXT_descriptor_heap, VkDescriptorType, VkResourceDescriptorDataEXT, VkStructureType, vkWriteResourceDescriptorsEXT

## 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-2026 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0