C Specification

To bind a resource heap to a command buffer, call:

// Provided by VK_EXT_descriptor_heap
void vkCmdBindResourceHeapEXT(
    VkCommandBuffer                             commandBuffer,
    const VkBindHeapInfoEXT*                    pBindInfo);

Parameters

  • commandBuffer is the command buffer that the resource heap will be bound to.

  • pBindInfo is a VkBindHeapInfoEXT specifying the device address range used for the heap and any implementation reservations.

Description

Addresses in the range defined by pBindInfo->heapRange are bound as the resource heap. The application can access resources and data through this heap anywhere except for the reserved range specified by pBindInfo->reservedRangeOffset. Addresses in the range [pBindInfo->reservedRangeOffset, pBindInfo->reservedRangeOffset + minResourceHeapReservedRange) are reserved for the implementation and must not be accessed by the application at any time from when this command is recorded until there are no command buffers with that range bound.

Shaders executed by commands recorded after this command can use the specified resource heap to access resources. pBindInfo->heapRange.address will be available to shaders to access resources through the ResourceHeapEXT BuiltIn or via shader bindings.

When vkCmdBindResourceHeapEXT is recorded, it immediately invalidates all non-heap descriptor state. Similarly, recording any non-heap descriptor state commands immediately invalidates state set by this command.

Valid Usage
  • VUID-vkCmdBindResourceHeapEXT-pBindInfo-11232
    The sum of pBindInfo->reservedRangeOffset and pBindInfo->reservedRangeSize must be less than or equal to pBindInfo->heapRange.size

  • VUID-vkCmdBindResourceHeapEXT-pBindInfo-11233
    pBindInfo->reservedRangeSize must be greater than or equal to minResourceHeapReservedRange

  • VUID-vkCmdBindResourceHeapEXT-pBindInfo-11234
    pBindInfo->heapRange.size must less than or equal to maxResourceHeapSize

  • VUID-vkCmdBindResourceHeapEXT-pBindInfo-11235
    pBindInfo->heapRange.address must be a multiple of resourceHeapAlignment

  • VUID-vkCmdBindResourceHeapEXT-pBindInfo-11435
    pBindInfo->reservedRangeOffset must be a multiple of bufferDescriptorAlignment

  • VUID-vkCmdBindResourceHeapEXT-pBindInfo-11436
    pBindInfo->reservedRangeOffset must be a multiple of imageDescriptorAlignment

  • VUID-vkCmdBindResourceHeapEXT-pBindInfo-11236
    Memory bound to addresses in the range [pBindInfo->heapRange.address + pBindInfo->reservedRangeOffset, pBindInfo->heapRange.address + pBindInfo->reservedRangeOffset + pBindInfo->reservedRangeSize) must not be bound to any other command buffer as a reserved range for any heap unless the reserved range matches exactly and it is the same heap type

  • VUID-vkCmdBindResourceHeapEXT-heapRange-11237
    heapRange must be a device address range allocated to the application from a buffer created with the VK_BUFFER_USAGE_DESCRIPTOR_HEAP_BIT_EXT usage flag set

  • VUID-vkCmdBindResourceHeapEXT-commandBuffer-11238
    If commandBuffer is a secondary command buffer, it must have begun with VkCommandBufferInheritanceDescriptorHeapInfoEXT::pResourceHeapBindInfo equal to NULL

Valid Usage (Implicit)
  • VUID-vkCmdBindResourceHeapEXT-commandBuffer-parameter
    commandBuffer must be a valid VkCommandBuffer handle

  • VUID-vkCmdBindResourceHeapEXT-pBindInfo-parameter
    pBindInfo must be a valid pointer to a valid VkBindHeapInfoEXT structure

  • VUID-vkCmdBindResourceHeapEXT-commandBuffer-recording
    commandBuffer must be in the recording state

  • VUID-vkCmdBindResourceHeapEXT-commandBuffer-cmdpool
    The VkCommandPool that commandBuffer was allocated from must support VK_QUEUE_COMPUTE_BIT, or VK_QUEUE_GRAPHICS_BIT operations

  • VUID-vkCmdBindResourceHeapEXT-videocoding
    This command must only be called outside of a video coding scope

Host Synchronization
  • Host access to commandBuffer must be externally synchronized

  • Host access to the VkCommandPool that commandBuffer was allocated from must be externally synchronized

Command Properties
Command Buffer Levels Render Pass Scope Video Coding Scope Supported Queue Types Command Type

Primary
Secondary

Both

Outside

VK_QUEUE_COMPUTE_BIT
VK_QUEUE_GRAPHICS_BIT

State

Conditional Rendering

vkCmdBindResourceHeapEXT is not affected by conditional rendering

See Also

Document Notes

For more information, see the Vulkan Specification.

This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.

Copyright 2014-2026 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0