Shaders are GPU programs that process visual data—such as rays, pixels, geometry, and textures—to produce specific rendering effects. Shaders find necessary data through a process called resource binding. CPU code orchestrates the creation of GPU resources such as textures and memory buffers and then carefully arranges for shader code to access them through a binding protocol.

The new descriptor heap feature in Vulkan refactors this process from the ground up, addressing long-standing user feedback to streamline resource binding and bring greater parity to how it works in Direct3D 12 (D3D12). Descriptor heaps give direct control over descriptor memory management, are a better match for modern hardware, and simplify performance optimization of resource management. They’re especially useful for renderers using dynamic texture indexing, for complex ray tracing shaders, or when there is a shared backend supporting D3D12. This post highlights what descriptor heaps add, how they compare to descriptor sets, and how to get started.

The descriptor heap API is defined by VK_EXT_descriptor_heap, for which Khronos has published both a reference manual and usage guide. The EXT prefix signifies that the extension has received cross-vendor support. Khronos is actively seeking feedback about the current interface with the goal of refining it and promoting it to a KHR-level extension.