VK_EXT_descriptor_heap(3)

# VK_EXT_descriptor_heap(3) Manual Page

## Name

VK_EXT_descriptor_heap - device extension

## Registered Extension Number

136

## Revision

1

## Ratification Status

Ratified

## Extension and Version Dependencies

VK_KHR_extended_flags
or
VK_KHR_maintenance5
and
VK_KHR_buffer_device_address
or
Vulkan Version 1.2
or
Vulkan Version 1.4

## API Interactions

- Interacts with VK_ARM_tensors

- Interacts with VK_EXT_custom_border_color

- Interacts with VK_EXT_device_generated_commands

- Interacts with VK_EXT_fragment_density_map

- Interacts with VK_EXT_shader_object

- Interacts with VK_KHR_ray_tracing_pipeline

- Interacts with VK_NV_device_generated_commands

- Interacts with VK_NV_ray_tracing

## SPIR-V Dependencies

- SPV_EXT_descriptor_heap

## Contact

- Tobias Hector [GitHub]tobski

## Extension Proposal

VK_EXT_descriptor_heap

## Other Extension Metadata

Last Modified Date

  2024-06-12

IP Status

  No known IP claims.

Contributors

  - Tobias Hector, AMD

  - Jan-Harald Fredriksen, Arm

  - Daniel Story, Nintendo

  - Connor Abbot, Valve

  - Hans-Kristian Arntzen, Valve

  - Matthew Netsch, Qualcomm

  - Jeff Bolz, NVIDIA

  - Alyssa Rosenzweig, Valve

  - Lionel Landerwerlin, Intel

  - Baldur Karlsson, Valve

  - Faith Ekstrand, Collabora

  - Slawomir Grajewski, Intel

  - Mike Blumenkrantz, Valve

  - Yiwei Zhang, Google

  - Stu Smith, AMD

  - Piers Daniell, NVIDIA

  - Jon Leech, Khronos

  - Rodrigo Locatti, NVIDIA

  - Krzysztof Niski, NVIDIA

  - Alan Baker, Google

  - James Fitzpatrick, Imagination

  - Samuel (Sheng-Wen) Huang, Mediatek

  - Hai Nguyen, Google

  - Jeff Leger, Qualcomm

  - Marty Johnson, Khronos

  - Tom Olson, Arm

  - Chris Glover, Google

  - Daniel Koch, NVIDIA

  - Robert Simpson, Qualcomm

  - Dan Ginsburg, Valve

  - Andreas Süßenbach, NVIDIA

  - Anna Maniscalco, Valve

  - Artem Kharytoniuk, LunarG

  - Younggwan Kim, Arm

  - Konstantin Seurer, Valve

  - Catarina Shablia, Collabora

  - Spencer Fricke, LunarG

  - Chris Bieneman, Microsoft

  - Ting Wei, Arm

  - Boris Zanin, AMD

  - Samuel Pitoiset, Valve

  - Erik Hogeman, Arm

  - Jesse Natalie, Microsoft

  - Guang Xu, AMD

  - Embla Flatlandsmo, Arm

Interactions and External Dependencies

  - VK_KHR_shader_untyped_pointers must be supported, but it does not need to be enabled for applications using only the binding interface.

## Description

This extension allows explicit management of descriptors, and the memory used to store descriptors, conceptualised as descriptor heaps. Descriptor heap memory can be accessed as any other memory, enabling management of descriptors on both CPU and the GPU.

This extension was developed based on issues discovered with VK_EXT_descriptor_buffer. There are more constraints on how it is implemented, to provide more portable guarantees and more predictable performance characteristics. For instance, rather than an arbitrary number of sampler or resource buffers, there is exactly one sampler heap and exactly one resource heap.

This extension also eliminates descriptor sets and pipeline layouts completely; instead applications can look descriptors up solely by their offset into a heap. Shaders still using descriptor set and binding decorations can still be mapped to heaps through an API that maps set and binding decorations to heap offsets, either as constants or through push data. This new mapping API also enables a much more straightforward mapping to HLSL shaders using the root signature and descriptor table interfaces.

The push constant API has also been replaced with the push data interface, which aims to provide much more clarity about how data is passed to the shader, without requiring any mapping information to be provided during pipeline or shader creation. Mappings are still available for shaders written for the legacy interface.

There is also a much clearer path for mapping shader constant data, with two recommended options for mapping constant data through push data; either directly in push data, or through a device address stored in push data, both of which can be mapped to shaders with set and binding interfaces.

## New Object Types

- VkTensorARM

## New Commands

- vkCmdBindResourceHeapEXT

- vkCmdBindSamplerHeapEXT

- vkCmdPushDataEXT

- vkGetImageOpaqueCaptureDataEXT

- vkGetPhysicalDeviceDescriptorSizeEXT

- vkWriteResourceDescriptorsEXT

- vkWriteSamplerDescriptorsEXT

If VK_ARM_tensors is supported:

- vkGetTensorOpaqueCaptureDataARM

If VK_EXT_custom_border_color is supported:

- vkRegisterCustomBorderColorEXT

- vkUnregisterCustomBorderColorEXT

## New Structures

- VkBindHeapInfoEXT

- VkDescriptorMappingSourceConstantOffsetEXT

- VkDescriptorMappingSourceHeapDataEXT

- VkDescriptorMappingSourceIndirectAddressEXT

- VkDescriptorMappingSourceIndirectIndexArrayEXT

- VkDescriptorMappingSourceIndirectIndexEXT

- VkDescriptorMappingSourcePushIndexEXT

- VkDescriptorMappingSourceShaderRecordIndexEXT

- VkDescriptorSetAndBindingMappingEXT

- VkDeviceAddressRangeEXT

- VkHostAddressRangeConstEXT

- VkHostAddressRangeEXT

- VkImageDescriptorInfoEXT

- VkPushDataInfoEXT

- VkResourceDescriptorInfoEXT

- VkTensorViewCreateInfoARM

- VkTexelBufferDescriptorInfoEXT

- Extending VkCommandBufferInheritanceInfo:

  - VkCommandBufferInheritanceDescriptorHeapInfoEXT

- Extending VkImageCreateInfo, VkTensorCreateInfoARM:

  - VkOpaqueCaptureDataCreateInfoEXT

- Extending VkPhysicalDeviceFeatures2, VkDeviceCreateInfo:

  - VkPhysicalDeviceDescriptorHeapFeaturesEXT

- Extending VkPhysicalDeviceProperties2:

  - VkPhysicalDeviceDescriptorHeapPropertiesEXT

- Extending VkPipelineShaderStageCreateInfo, VkShaderCreateInfoEXT:

  - VkShaderDescriptorSetAndBindingMappingInfoEXT

If VK_ARM_tensors is supported:

- Extending VkPhysicalDeviceProperties2:

  - VkPhysicalDeviceDescriptorHeapTensorPropertiesARM

If VK_EXT_custom_border_color is supported:

- Extending VkSamplerCreateInfo:

  - VkSamplerCustomBorderColorIndexCreateInfoEXT

If VK_EXT_fragment_density_map is supported:

- Extending VkImageFormatProperties2:

  - VkSubsampledImageFormatPropertiesEXT

If VK_NV_device_generated_commands is supported:

- Extending VkIndirectCommandsLayoutTokenNV:

  - VkIndirectCommandsLayoutPushDataTokenNV

## New Unions

- VkDescriptorMappingSourceDataEXT

- VkResourceDescriptorDataEXT

## New Enums

- VkDescriptorMappingSourceEXT

- VkSpirvResourceTypeFlagBitsEXT

## New Bitmasks

- VkSpirvResourceTypeFlagsEXT

- VkTensorViewCreateFlagsARM

## New Enum Constants

- `VK_EXT_DESCRIPTOR_HEAP_EXTENSION_NAME`

- `VK_EXT_DESCRIPTOR_HEAP_SPEC_VERSION`

- Extending VkAccessFlagBits2:

  - VK_ACCESS_2_RESOURCE_HEAP_READ_BIT_EXT

  - VK_ACCESS_2_SAMPLER_HEAP_READ_BIT_EXT

- Extending VkBufferUsageFlagBits:

  - VK_BUFFER_USAGE_DESCRIPTOR_HEAP_BIT_EXT

- Extending VkBufferUsageFlagBits2:

  - VK_BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT

- Extending VkImageCreateFlagBits:

  - VK_IMAGE_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_EXT

- Extending VkPipelineCreateFlagBits2:

  - VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT

- Extending VkStructureType:

  - VK_STRUCTURE_TYPE_BIND_HEAP_INFO_EXT

  - VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_DESCRIPTOR_HEAP_INFO_EXT

  - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_AND_BINDING_MAPPING_EXT

  - VK_STRUCTURE_TYPE_IMAGE_DESCRIPTOR_INFO_EXT

  - VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DATA_CREATE_INFO_EXT

  - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_FEATURES_EXT

  - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_PROPERTIES_EXT

  - VK_STRUCTURE_TYPE_PUSH_DATA_INFO_EXT

  - VK_STRUCTURE_TYPE_RESOURCE_DESCRIPTOR_INFO_EXT

  - VK_STRUCTURE_TYPE_SHADER_DESCRIPTOR_SET_AND_BINDING_MAPPING_INFO_EXT

  - VK_STRUCTURE_TYPE_TEXEL_BUFFER_DESCRIPTOR_INFO_EXT

If VK_ARM_tensors is supported:

- Extending VkSpirvResourceTypeFlagBitsEXT:

  - VK_SPIRV_RESOURCE_TYPE_TENSOR_BIT_ARM

- Extending VkStructureType:

  - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_TENSOR_PROPERTIES_ARM

- Extending VkTensorCreateFlagBitsARM:

  - VK_TENSOR_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_ARM

If VK_EXT_custom_border_color is supported:

- Extending VkStructureType:

  - VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_INDEX_CREATE_INFO_EXT

If VK_EXT_device_generated_commands is supported:

- Extending VkIndirectCommandsTokenTypeEXT:

  - VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_EXT

  - VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_SEQUENCE_INDEX_EXT

If VK_EXT_fragment_density_map is supported:

- Extending VkStructureType:

  - VK_STRUCTURE_TYPE_SUBSAMPLED_IMAGE_FORMAT_PROPERTIES_EXT

If VK_EXT_shader_object is supported:

- Extending VkShaderCreateFlagBitsEXT:

  - VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT

If VK_KHR_ray_tracing_pipeline or VK_NV_ray_tracing is supported:

- Extending VkDescriptorMappingSourceEXT:

  - VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT

  - VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT

  - VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT

- Extending VkSpirvResourceTypeFlagBitsEXT:

  - VK_SPIRV_RESOURCE_TYPE_ACCELERATION_STRUCTURE_BIT_EXT

If VK_NV_device_generated_commands is supported:

- Extending VkIndirectCommandsTokenTypeNV:

  - VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_NV

- Extending VkStructureType:

  - VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_PUSH_DATA_TOKEN_NV

## Version History

- Revision 1, 2024-06-12 (Tobias Hector)

  - Initial revision.

## See Also

No cross-references are available

## Document Notes

For more information, see the Vulkan Specification.

This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.

## Copyright

Copyright 2014-2026 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0