Shaders are GPU applications that course of visible knowledge—similar to rays, pixels, geometry, and textures—to supply particular rendering results. Shaders discover essential knowledge by a course of known as useful resource binding. CPU code orchestrates the creation of GPU sources similar to textures and reminiscence buffers after which fastidiously arranges for shader code to entry them by a binding protocol.
The brand new descriptor heap function in Vulkan refactors this course of from the bottom up, addressing long-standing person suggestions to streamline useful resource binding and convey larger parity to the way it works in Direct3D 12 (D3D12). Descriptor heaps give direct management over descriptor reminiscence administration, are a greater match for contemporary {hardware}, and simplify efficiency optimization of useful resource administration. They’re particularly helpful for renderers utilizing dynamic texture indexing, for advanced ray tracing shaders, or when there’s a shared backend supporting D3D12. This put up highlights what descriptor heaps add, how they evaluate to descriptor units, and tips on how to get began.
The descriptor heap API is outlined by VK_EXT_descriptor_heap, for which Khronos has printed each a reference guide and utilization information. The EXT prefix signifies that the extension has obtained cross-vendor assist. Khronos is actively looking for suggestions concerning the present interface with the aim of refining it and selling it to a KHR-level extension.
NVIDIA drivers 610 and later present VK_EXT_descriptor_heap with assist extending to each tooling and code samples. NVIDIA Nsight Graphics 2026.2 introduces descriptor heap assist by the identical acquainted body seize and inspection workflow, to rapidly slim down descriptor-related points. The open supply descriptor_heap pattern utility is a useful start line to find out how the extension can be utilized in follow.
To attempt it, obtain the newest model of Nsight Graphics and look underneath Assist > Samples for the descriptor heap pattern. Be aware that this menu is simply accessible solely on Home windows. On Linux, you will have to obtain and construct the pattern.


What are the advantages of shifting from descriptor units to heaps?
Descriptors are vendor-specific bytes that describe sources similar to buffers and textures. For instance, a descriptor would possibly include a low-level pointer plus some metadata, however to the shader it’s merely an opaque chunk of reminiscence. The useful resource binding course of largely consists of managing descriptors and strategies of accessing them in each CPU and shader code.
Vulkan initially solely offered descriptor units, that are arrays of descriptors that may be composed and reused by totally different shaders. These require cumbersome descriptor set layouts, further grouping, and allocation by swimming pools. The VK_EXT_descriptor_buffer extension launched application-managed reminiscence for descriptors, however retained the set-based binding mannequin, layouts, and different required layers of infrastructure.
In distinction, VK_EXT_descriptor_heap vastly simplifies the ideas to only user-written descriptors in a user-allocated “heap” of reminiscence (to not be confused with binary heap knowledge buildings). Just one heap of useful resource descriptors will be certain at a time, and the Vulkan documentation recommends that the identical heap be used all through the lifetime of the appliance as a result of binding a brand new heap can have important value and have an effect on efficiency. A separate heap is used particularly for samplers, following the identical pointers. Accessing descriptors within the shader will be completed utilizing quite a lot of strategies, described within the following sections.
In return for this flexibility, the appliance accepts the accountability of reminiscence allocation and format. The next offers a short introduction to the API, together with a comparability in opposition to descriptor units. For extra full particulars, see the Descriptor Heap Information.
Easy methods to use descriptor heaps
Prepared to start out coding? To make use of descriptor heaps and supported tooling, you’ll need these variations of software program:
NVIDIA Driver 610 or later for every part described on this put up. Early entry to new driver-level descriptor heap updates could generally be accessible within the Vulkan developer beta driver.
Vulkan Headers 1.4.340 or later (included with the Vulkan SDK)
Nsight Graphics 2026.2
As with all Vulkan extension, the VK_EXT_descriptor_heap extension should be requested earlier than use. Add VK_EXT_DESCRIPTOR_HEAP_EXTENSION_NAME and VkPhysicalDeviceDescriptorHeapFeaturesEXT to the VkDeviceCreateInfo extensions and pNext chain.
To make use of present shader code with none modifications, descriptors will be mapped to set and binding indices with VkShaderDescriptorSetAndBindingMappingInfoEXT when creating the shader. For particulars, see mapping the heap to present shaders. The next two examples are additionally demonstrated within the descriptor_heap pattern:
Push Index: With the mapping supply set to VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, the descriptor location will get offset by a worth learn from the push fixed knowledge. This enables the appliance to pick out totally different ranges of descriptors per-draw, for a similar shader.
Fixed Offset: Less complicated but, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT simply provides a continuing offset for the set/binding descriptor location. The shader could all the time entry the identical descriptor for that binding, or if the binding is an array or has a bindingCount, the shader can then select its personal index from the offset dynamically.
Within the following GLSL and Slang shader examples, the entire heap has been mapped to bindings with a zero fixed offset. The shaders then successfully index descriptors within the heap globally. The applying mapping code specifies not simply the binding set and placement but in addition kind and stride element concerning the descriptors, which should be matched by the kinds certain within the corresponding shader code.
GLSL:
uniform texture2D heapImages[];
format(set = 0, binding = 1)
uniform sampler heapSamplers[];
format(push_constant)
uniform PushConstants {
uint textureIndex;
} push;
format(location = 0) in vec2 uv;
format(location = 0) out vec4 outColor;
void major
{
outColor = texture(
sampler2D(
heapTextures[nonuniformEXT(push.textureIndex)],
heapSamplers[0]),
uv);
}
Slang shading language:
Texture2D heapImages[];
[[vk::binding(1, 0)]]
SamplerState heapSamplers[];
[[vk::push_constant]]
ConstantBuffer push;
[shader(“fragment”)]
float4 fragmentMain(float2 uv : TEXCOORD0) : SV_Target
{
return heapImages[NonUniformResourceIndex(push.textureIndex)].Pattern(
heapSamplers[0], uv);
}
This group could look acquainted, particularly for many who are used to D3D12 descriptor heaps:
Shaders can index descriptors dynamically
Indices are managed by the appliance
Heaps are globally certain state
Nonetheless, Vulkan differs from D3D12 in a number of methods, together with that the appliance chooses the precise reminiscence location for the heap, and that descriptors of various sorts will be totally different sizes.
Direct descriptor heap entry
Shaders can index descriptor arrays instantly from certain useful resource and sampler descriptor heaps as an alternative of mapping descriptors to set and binding indices. This strategy implies pointer aliasing, requires cautious indexing for legitimate entry and the VK_KHR_shader_untyped_pointers extension should be enabled. To be taught extra, see the untyped shader mannequin part of the Vulkan information.
The descriptor_heap utility contains an instance utilizing untyped pointers and it additionally works with Nsight Graphics. This functionality is now accessible to attempt, however the function is new and nonetheless maturing throughout shader languages and toolchains. Keep tuned for updates.
Inspection and debugging
In Nsight Graphics 2026.2, descriptor heaps present up in the identical shader useful resource views builders already use to see descriptor units. In case you’re utilizing VkShaderDescriptorSetAndBindingMappingInfoEXT, solely the mapped descriptors are proven.
For instance, see the six textures for one dice in Determine 2. To view the mapping values, click on on the pipeline or shader object linked within the API Inspector, and look within the Object Browser undercreateInfo > pNext > pMappings (Determine 3).




Seize and replay of descriptor heaps in debugging instruments requires implementations to assist the system function VkPhysicalDeviceDescriptorHeapFeaturesEXT::descriptorHeapCaptureReplay. NVIDIA drivers have added assist for this function beginning with driver model 610.
If that is your first time working with Nsight Graphics, the method is to first create a seize after which examine it with the graphics debugger and dwell replay:
Click on Begin Exercise
Click on Launch Graphics Seize within the dialog window
Press F11 or click on the Seize button within the utility window to create a seize file, which accommodates all of the Vulkan API calls used to render a body
Terminate the app
Again in Nsight Graphics, it’s best to see the seize file doc. Within the doc tab, click on Begin Graphics Debugger
Within the toolbar on the high of the window, click on Begin Reside Replay
Discover home windows underneath Graphics Debugger. Isolate draw calls by typing “draw” into the Filter textual content field of the Occasions itemizing on the left. Then click on FS to examine the fragment shader API state
Get began with descriptor heaps
Descriptor heaps are prepared to make use of with NVIDIA drivers and developer instruments. One of the simplest ways to know descriptor heaps is to start out constructing with them.
Run and examine a pattern: The simplest approach is to run the pattern that comes with Nsight Graphics underneath Assist > Samples
Construct and debug domestically: Directions for constructing the descriptor_heap pattern are in its repository at https://github.com/nvpro-samples/vk_mini_samples/
Present suggestions: For Nsight Graphics points, use Assist > Ship Suggestions. For points with the vk_mini_samples implementation, open a GitHub subject. Suggestions on real-world use and adoption is appreciated and will be mentioned on the NVIDIA Developer Boards and posted within the Khronos Vulkan-Docs repository.
Be looking out for future updates as utilization patterns mature and shading language assist continues to evolve.
