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

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

New Commands

If VK_ARM_tensors is supported:

If VK_EXT_custom_border_color is supported:

New Structures

If VK_ARM_tensors is supported:

If VK_EXT_custom_border_color is supported:

If VK_EXT_fragment_density_map is supported:

If VK_NV_device_generated_commands is supported:

New Unions

New Enums

New Bitmasks

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:

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:

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:

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:

Version History

  • Revision 1, 2024-06-12 (Tobias Hector)
    • Initial revision.