Safe Haskell | None |
---|---|
Language | Haskell2010 |
Name
VK_KHR_buffer_device_address - device extension
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
- Requires Vulkan 1.0
- Requires
VK_KHR_get_physical_device_properties2
- Deprecation state
- Promoted to Vulkan 1.2
- Contact
Other Extension Metadata
- Last Modified Date
- 2019-06-24
- IP Status
- No known IP claims.
- Interactions and External Dependencies
- Promoted to Vulkan 1.2 Core
- This extension requires SPV_KHR_physical_storage_buffer
- This extension provides API support for GL_EXT_buffer_reference and GL_EXT_buffer_reference2 and GL_EXT_buffer_reference_uvec2
- Contributors
- Jeff Bolz, NVIDIA
- Neil Henning, AMD
- Tobias Hector, AMD
- Jason Ekstrand, Intel
- Baldur Karlsson, Valve
- Jan-Harald Fredriksen, Arm
Description
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 Buffer
, it will return a
DeviceAddress
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
capability is optional. The
original type, enum and command names are still available as aliases of
the core functionality.
New Commands
New Structures
DeviceMemoryOpaqueCaptureAddressInfoKHR
Extending
BufferCreateInfo
:Extending
MemoryAllocateInfo
:Extending
PhysicalDeviceFeatures2
,DeviceCreateInfo
:
New Enum Constants
KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION
Extending
BufferCreateFlagBits
:Extending
BufferUsageFlagBits
:Extending
MemoryAllocateFlagBits
:Extending
Result
:Extending
StructureType
:
New SPIR-V Capabilities
Version History
Revision 1, 2019-06-24 (Jan-Harald Fredriksen)
- Internal revisions based on VK_EXT_buffer_device_address
See Also
BufferDeviceAddressInfoKHR
, BufferOpaqueCaptureAddressCreateInfoKHR
,
DeviceMemoryOpaqueCaptureAddressInfoKHR
,
MemoryOpaqueCaptureAddressAllocateInfoKHR
,
PhysicalDeviceBufferDeviceAddressFeaturesKHR
,
getBufferDeviceAddressKHR
, getBufferOpaqueCaptureAddressKHR
,
getDeviceMemoryOpaqueCaptureAddressKHR
Document Notes
For more information, see the Vulkan Specification
This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.
Documentation
pattern ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR :: Result Source #
getBufferOpaqueCaptureAddressKHR :: MonadIO io => Device -> BufferDeviceAddressInfo -> io Word64 Source #
getBufferDeviceAddressKHR :: MonadIO io => Device -> BufferDeviceAddressInfo -> io DeviceAddress Source #
getDeviceMemoryOpaqueCaptureAddressKHR :: MonadIO io => Device -> DeviceMemoryOpaqueCaptureAddressInfo -> io Word64 Source #
type PhysicalDeviceBufferDeviceAddressFeaturesKHR = PhysicalDeviceBufferDeviceAddressFeatures Source #
pattern KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION :: forall a. Integral a => a Source #
type KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME = "VK_KHR_buffer_device_address" Source #
pattern KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #