Structures

VkResourceDescriptorInfoEXT

Structure describing a resource descriptor

VkResourceDescriptorInfoEXT is defined as:

typedef struct VkResourceDescriptorInfoEXT {
    VkStructureType sType;
    const void* pNext;
    VkDescriptorType type;
    VkResourceDescriptorDataEXT data;
} VkResourceDescriptorInfoEXT;
  • 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

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.

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.

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→pTexelBuffermust 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_TENSOR_ARM, 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→sizemust 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→sizemust 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-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