Class KHRBufferDeviceAddress


  • public class KHRBufferDeviceAddress
    extends java.lang.Object
    This extension allows the application to query a 64-bit buffer device address value for a buffer, which can be used to access the buffer memory via the PhysicalStorageBuffer storage class in the GL_EXT_buffer_reference GLSL extension and SPV_KHR_physical_storage_buffer SPIR-V extension.

    Another way to describe this extension is that it adds “pointers to buffer memory in shaders”. By calling GetBufferDeviceAddress with a VkBuffer, it will return a VkDeviceAddress value which represents the address of the start of the buffer.

    GetBufferOpaqueCaptureAddress and GetDeviceMemoryOpaqueCaptureAddress allow opaque addresses for buffers and memory objects to be queried for the current process. A trace capture and replay tool can then supply these addresses to be used at replay time to match the addresses used when the trace was captured. To enable tools to insert these queries, new memory allocation flags must be specified for memory objects that will be bound to buffers accessed via the PhysicalStorageBuffer storage class. Note that this mechanism is intended only to support capture/replay tools, and is not recommended for use in other applications.

    There are various use cases this extension is designed for. It is required for ray tracing, useful for DX12 portability, and by allowing buffer addresses to be stored in memory it enables more complex data structures to be created.

    This extension can also be used to hardcode a dedicated debug channel into all shaders by querying a pointer at startup and pushing that into shaders as a run-time constant (e.g. specialization constant) that avoids impacting other descriptor limits.

    There are examples of usage in the GL_EXT_buffer_reference spec for how to use this in a high-level shading language such as GLSL. The GL_EXT_buffer_reference2 and GL_EXT_buffer_reference_uvec2 extensions were also added to help cover a few additional edge cases.

    Promotion to Vulkan 1.2

    All functionality in this extension is included in core Vulkan 1.2, with the KHR suffix omitted. However, if Vulkan 1.2 is supported and this extension is not, the bufferDeviceAddress feature is optional. The original type, enum and command names are still available as aliases of the core functionality.

    Promotion to Vulkan 1.3

    Support for the bufferDeviceAddress feature is mandatory in Vulkan 1.3, regardless of whether this extension is supported.

    VK_KHR_buffer_device_address
    Name String
    VK_KHR_buffer_device_address
    Extension Type
    Device extension
    Registered Extension Number
    258
    Revision
    1
    Extension and Version Dependencies
    Deprecation state
    Contact
    Other Extension Metadata
    Last Modified Date
    2019-06-24
    IP Status
    No known IP claims.
    Interactions and External Dependencies
    Contributors
    • Jeff Bolz, NVIDIA
    • Neil Henning, AMD
    • Tobias Hector, AMD
    • Jason Ekstrand, Intel
    • Baldur Karlsson, Valve
    • Jan-Harald Fredriksen, Arm