HORIZON HASKELLDocslts/ghc-9.14.x45dd5372026-10-11Search names, modules, packages, or :: a typeCtrl K

GHC 9.14.1 · lts/ghc-9.14.x · 45dd537 · 2026-10-11

Modulevulkan-3.27GHC2021

Vulkan.Extensions.VK_KHR_device_address_commands

Name

VK_KHR_device_address_commands - device extension

VK_KHR_device_address_commands

Name String

VK_KHR_device_address_commands

Extension Type

Device extension

Registered Extension Number

319

Revision

1

Ratification Status

Ratified

Extension and Version Dependencies

VK_KHR_get_physical_device_properties2                  or

Vulkan Version 1.1              and

VK_KHR_buffer_device_address          or

Vulkan Version 1.2      and

VK_KHR_synchronization2      and

VK_EXT_extended_dynamic_state or Vulkan Version 1.3

API Interactions
  • Interacts with VK_VERSION_1_2

  • Interacts with VK_AMD_buffer_marker

  • Interacts with VK_EXT_conditional_rendering

  • Interacts with VK_EXT_mesh_shader

  • Interacts with VK_EXT_transform_feedback

  • Interacts with VK_KHR_acceleration_structure

  • Interacts with VK_KHR_draw_indirect_count

Contact
Extension Proposal

VK_KHR_device_address_commands

Other Extension Metadata

Last Modified Date

2026-03-10

Contributors
  • Tobias Hector, AMD

  • Matthew Netsch, Qualcomm Technologies, Inc

  • Jan-Harald Fredriksen, Arm

  • Mike Blumenkrantz, Valve

  • Allan MacKinnon, Google

  • Daniel Koch, NVIDIA

  • Autumn Ashton, Valve

  • Piers Daniell, NVIDIA

  • Stuart Smith, AMD

  • Caterina Shablia, Collabora

  • Piotr Byszewski, Cognizant

  • James Fitzpatrick, Imagination

  • Daniel Story, Nintendo

  • Baldur Karlsson, Valve

  • Jon Leech, Khronos

  • Samuel Pitoiset, Valve

  • Lionel Landwerlin, Intel

  • Hans-Kristian Arntzen, Valve

  • Žiga Markuš, LunarG

  • Spencer Fricke, Lunarg

  • Per Inge Mathisen, Arm

  • Vikram Kushwaha, NVIDIA

  • Ralph Potter, Samsung

  • Marijn Suijten, Traverse Research

  • Ricard Garcia, Igalia

  • Mengyang Liu, AMD

  • Artem Kharytoniuk, LunarG

  • Marty Johnson, Khronos

  • Alyssa Rosenzweig, Valve

Description

This extension enables applications to use device addresses in place of buffer objects for most functionality.

New Commands

If VK_KHR_draw_indirect_count or Vulkan Version 1.2 and VK_EXT_mesh_shader is supported:

If VK_AMD_buffer_marker is supported:

If VK_EXT_conditional_rendering is supported:

If VK_EXT_mesh_shader is supported:

If VK_EXT_transform_feedback is supported:

If VK_KHR_acceleration_structure is supported:

If VK_KHR_draw_indirect_count or Vulkan Version 1.2 is supported:

New Structures

If VK_AMD_buffer_marker is supported:

If VK_EXT_conditional_rendering is supported:

If VK_EXT_transform_feedback is supported:

If VK_KHR_acceleration_structure is supported:

New Enums

New Bitmasks

New Enum Constants

If VK_AMD_buffer_marker is supported:

If VK_EXT_conditional_rendering is supported:

If VK_EXT_transform_feedback is supported:

If VK_KHR_acceleration_structure is supported:

Version History

  • Revision 1, 2026-03-10 (Tobias Hector)

    • Initial revision

See Also

No cross-references are available

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.

  • 29 types
  • 22 values
  • Packagevulkan-3.27
  • Exports67
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourceVK_KHR_device_address_commands.hs
valuecmdCopyMemoryKHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command will be recorded.

  3. -> "copyMemoryInfo" ::: Maybe CopyDeviceMemoryInfoKHR

    pCopyMemoryInfo a pointer to a CopyDeviceMemoryInfoKHR structure describing the copies to perform.

  4. -> io ()
#

vkCmdCopyMemoryKHR - Copy data between memory ranges

Valid Usage

Valid Usage (Implicit)

  • If pCopyMemoryInfo is not NULL, pCopyMemoryInfo must be a valid pointer to a valid CopyDeviceMemoryInfoKHR structure

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_TRANSFER_BIT operations

  • This command must only be called outside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Outside

Outside

VK_QUEUE_TRANSFER_BIT

Action

Conditional Rendering

vkCmdCopyMemoryKHR is not affected by conditional rendering

See Also

VK_KHR_device_address_commands, CommandBuffer, CopyDeviceMemoryInfoKHR

valuecmdCopyMemoryToImageKHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command will be recorded.

  3. -> "copyMemoryInfo" ::: Maybe CopyDeviceMemoryImageInfoKHR

    pCopyMemoryInfo a pointer to a CopyDeviceMemoryImageInfoKHR structure describing the copies to perform.

  4. -> io ()
#

vkCmdCopyMemoryToImageKHR - Copy data from memory ranges to an image

Valid Usage

Valid Usage (Implicit)

  • If pCopyMemoryInfo is not NULL, pCopyMemoryInfo must be a valid pointer to a valid CopyDeviceMemoryImageInfoKHR structure

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_TRANSFER_BIT operations

  • This command must only be called outside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Outside

Outside

VK_QUEUE_TRANSFER_BIT

Action

Conditional Rendering

vkCmdCopyMemoryToImageKHR is not affected by conditional rendering

See Also

VK_KHR_device_address_commands, CommandBuffer, CopyDeviceMemoryImageInfoKHR

valuecmdCopyImageToMemoryKHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command will be recorded.

  3. -> "copyMemoryInfo" ::: Maybe CopyDeviceMemoryImageInfoKHR

    pCopyMemoryInfo a pointer to a CopyDeviceMemoryImageInfoKHR structure describing the copies to perform.

  4. -> io ()
#

vkCmdCopyImageToMemoryKHR - Copy data from an image to memory ranges

Valid Usage

Valid Usage (Implicit)

  • If pCopyMemoryInfo is not NULL, pCopyMemoryInfo must be a valid pointer to a valid CopyDeviceMemoryImageInfoKHR structure

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_TRANSFER_BIT operations

  • This command must only be called outside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Outside

Outside

VK_QUEUE_TRANSFER_BIT

Action

Conditional Rendering

vkCmdCopyImageToMemoryKHR is not affected by conditional rendering

See Also

VK_KHR_device_address_commands, CommandBuffer, CopyDeviceMemoryImageInfoKHR

valuecmdUpdateMemoryKHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command will be recorded.

  3. -> "dstRange" ::: DeviceAddressRangeKHR

    pDstRange is a pointer to the DeviceAddressRangeKHR selecting the memory range to be updated.

  4. -> "dstFlags" ::: AddressCommandFlagsKHR

    dstFlags is a AddressCommandFlagsKHR value defining the copy flags for the destination address range.

  5. -> "dataSize" ::: DeviceSize

    dataSize is the number of bytes to update, and must be a multiple of 4.

  6. -> "data" ::: Ptr ()

    pData is a pointer to the source data for the buffer update, and must be at least dataSize bytes in size.

  7. -> io ()
#

vkCmdUpdateMemoryKHR - Update the content of device memory from host memory

Description

The source data is copied from pData to the command buffer when the command is called, and then copied to dstRange when the command is executed on a device.

Due to the data being copied into command buffers, memory range copies are recommended for larger data transfers, to avoid excessive memory consumption.

Valid Usage

Valid Usage (Implicit)

  • pDstRange must be a valid pointer to a valid DeviceAddressRangeKHR structure

  • dstFlags must be a valid combination of AddressCommandFlagBitsKHR values

  • pData must be a valid pointer to an array of dataSize bytes

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_TRANSFER_BIT operations

  • This command must only be called outside of a render pass instance

  • This command must not be called between suspended render pass instances

  • This command must only be called outside of a video coding scope

  • dataSize must be greater than 0

Host Synchronization

  • Host access to commandBuffer must be externally synchronized

  • Host access to the CommandPool 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

Outside

Outside

VK_QUEUE_TRANSFER_BIT

Action

Conditional Rendering

vkCmdUpdateMemoryKHR is not affected by conditional rendering

See Also

VK_KHR_device_address_commands, AddressCommandFlagsKHR, CommandBuffer, DeviceAddressRangeKHR, DeviceSize

valuecmdFillMemoryKHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command will be recorded.

  3. -> "dstRange" ::: DeviceAddressRangeKHR

    pDstRange is a pointer to the DeviceAddressRangeKHR selecting the memory range to be filled.

  4. -> "dstFlags" ::: AddressCommandFlagsKHR

    dstFlags is a AddressCommandFlagsKHR value defining the copy flags for the destination address range.

  5. -> "data" ::: Word32

    data is the 4-byte word written repeatedly to the destination range to fill size bytes of data.

  6. -> io ()
#

vkCmdFillMemoryKHR - Fill a memory range with a fixed 4-byte bit pattern

Description

The bit pattern of data is determined by the host endianness. For example, an unsigned integer value of 1 will result in a different bit pattern on a little endian machine compared to a big endian machine.

Valid Usage

Valid Usage (Implicit)

  • pDstRange must be a valid pointer to a valid DeviceAddressRangeKHR structure

  • dstFlags must be a valid combination of AddressCommandFlagBitsKHR values

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_TRANSFER_BIT operations

  • This command must only be called outside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Outside

Outside

VK_QUEUE_TRANSFER_BIT

Action

Conditional Rendering

vkCmdFillMemoryKHR is not affected by conditional rendering

See Also

VK_KHR_device_address_commands, AddressCommandFlagsKHR, CommandBuffer, DeviceAddressRangeKHR

valuecmdCopyQueryPoolResultsToMemoryKHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which this command will be recorded.

  3. -> QueryPool

    queryPool is the query pool managing the queries containing the desired results.

  4. -> "firstQuery" ::: Word32

    firstQuery is the initial query index.

  5. -> "queryCount" ::: Word32

    queryCount is the number of queries. firstQuery and queryCount together define a range of queries.

  6. -> "dstRange" ::: StridedDeviceAddressRangeKHR

    pDstRange is a pointer to a StridedDeviceAddressRangeKHR describing a range of memory addressed with a stride that will receive the results of the copy command.

  7. -> "dstFlags" ::: AddressCommandFlagsKHR

    dstFlags is a AddressCommandFlagsKHR value defining the flags for the destination address range.

  8. -> QueryResultFlags

    queryResultFlags is a bitmask of QueryResultFlagBits specifying how and when results are returned.

  9. -> io ()
#

vkCmdCopyQueryPoolResultsToMemoryKHR - Copy the results of queries in a query pool to a memory range

Description

Any results written for a query are written according to a layout dependent on the query type.

Results for any query in queryPool identified by firstQuery and queryCount that is available are copied to pDstRange.

If QUERY_RESULT_WITH_AVAILABILITY_BIT is set, results for all queries in queryPool identified by firstQuery and queryCount are copied to pDstRange, along with an extra availability value written directly after the results of each query and interpreted as an unsigned integer. A value of zero indicates that the results are not yet available, otherwise the query is complete and results are available.

If VK_QUERY_RESULT_WITH_STATUS_BIT_KHR is set, results for all queries in queryPool identified by firstQuery and queryCount are copied to pDstRange, along with an extra status value written directly after the results of each query and interpreted as a signed integer. A value of zero indicates that the results are not yet available. Positive values indicate that the operations within the query completed successfully, and the query results are valid. Negative values indicate that the operations within the query completed unsuccessfully.

VkQueryResultStatusKHR defines specific meaning for values returned here, though implementations are free to return other values.

If the status value written is negative, indicating that the operations within the query completed unsuccessfully, then all other results written by this command are undefined unless otherwise specified for any of the results of the used query type.

Results for any available query written by this command are final and represent the final result of the query. If QUERY_RESULT_PARTIAL_BIT is set, then for any query that is unavailable, an intermediate result between zero and the final result value is written for that query. Otherwise, any result written by this command is undefined.

If QUERY_RESULT_64_BIT is set, results and availability or status values for all queries are written as an array of 64-bit values. If the queryPool was created with QUERY_TYPE_PERFORMANCE_QUERY_KHR, results for each query are written as an array of the type indicated by PerformanceCounterKHR::storage for the counter being queried. Otherwise, results and availability or status values are written as an array of 32-bit values. If an unsigned integer query’s value overflows the result type, the value may either wrap or saturate. If the maintenance7 feature is enabled, for an unsigned integer query, the 32-bit result value must be equal to the 32 least significant bits of the equivalent 64-bit result value. If a signed integer query’s value overflows the result type, the value is undefined. If a floating-point query’s value is not representable as the result type, the value is undefined.

This command defines an execution dependency between other query commands that reference the same query.

The first synchronization scope includes all commands which reference the queries in queryPool indicated by query that occur earlier in submission order. If flags does not include QUERY_RESULT_WAIT_BIT, cmdEndQueryIndexedEXT, cmdWriteTimestamp2, cmdEndQuery, and cmdWriteTimestamp are excluded from this scope.

The second synchronization scope includes all commands which reference the queries in queryPool indicated by query that occur later in submission order.

The operation of this command happens after the first scope and happens before the second scope.

cmdCopyQueryPoolResultsToMemoryKHR is considered to be a transfer operation, and its writes to buffer memory must be synchronized using PIPELINE_STAGE_TRANSFER_BIT and ACCESS_TRANSFER_WRITE_BIT before using the results.

Valid Usage

Valid Usage (Implicit)

  • queryPool must be a valid QueryPool handle

  • pDstRange must be a valid pointer to a valid StridedDeviceAddressRangeKHR structure

  • dstFlags must be a valid combination of AddressCommandFlagBitsKHR values

  • queryResultFlags must be a valid combination of QueryResultFlagBits values

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_TRANSFER_BIT operations

  • This command must only be called outside of a render pass instance

  • This command must not be called between suspended render pass instances

  • This command must only be called outside of a video coding scope

  • Both of commandBuffer, and queryPool must have been created, allocated, or retrieved from the same Device

Host Synchronization

  • Host access to commandBuffer must be externally synchronized

  • Host access to the CommandPool 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

Outside

Outside

VK_QUEUE_TRANSFER_BIT

Action

Conditional Rendering

vkCmdCopyQueryPoolResultsToMemoryKHR is not affected by conditional rendering

See Also

VK_KHR_device_address_commands, AddressCommandFlagsKHR, CommandBuffer, QueryPool, QueryResultFlags, StridedDeviceAddressRangeKHR

valuecmdBeginConditionalRendering2EXT
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which this command will be recorded.

  3. -> ConditionalRenderingBeginInfo2EXT

    pConditionalRenderingBegin is a pointer to a ConditionalRenderingBeginInfo2EXT structure specifying parameters of conditional rendering.

  4. -> io ()
#

vkCmdBeginConditionalRendering2EXT - Define the beginning of a conditional rendering block

Valid Usage

  • Conditional rendering must not already be active

Valid Usage (Implicit)

Host Synchronization

  • Host access to commandBuffer must be externally synchronized

  • Host access to the CommandPool 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

Action State

Conditional Rendering

vkCmdBeginConditionalRendering2EXT is not affected by conditional rendering

See Also

VK_EXT_conditional_rendering, VK_KHR_device_address_commands, CommandBuffer, ConditionalRenderingBeginInfo2EXT

valuecmdBindTransformFeedbackBuffers2EXT
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> "firstBinding" ::: Word32

    firstBinding is the index of the first transform feedback binding whose state is updated by the command.

  4. -> "bindingCount" ::: Word32

    bindingCount is the number of transform feedback bindings whose state is updated by the command.

  5. -> "bindingInfos" ::: Vector BindTransformFeedbackBuffer2InfoEXT

    pBindingInfos is a pointer to an array of BindTransformFeedbackBuffer2InfoEXT structures specifying the ranges of memory to be used to capture transform feedback data.

  6. -> io ()
#

vkCmdBindTransformFeedbackBuffers2EXT - Bind transform feedback memory ranges to a command buffer

Description

Element i of pBindingInfos replaces the current state for the transform feedback binding firstBinding + i, for i in [0,bindingCount).

Valid Usage

Valid Usage (Implicit)

  • If pBindingInfos is not NULL, pBindingInfos must be a valid pointer to an array of bindingCount valid BindTransformFeedbackBuffer2InfoEXT structures

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called outside of a video coding scope

  • If pBindingInfos is not NULL, bindingCount must be greater than 0

Host Synchronization

  • Host access to commandBuffer must be externally synchronized

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

Command Properties

'

Conditional Rendering

vkCmdBindTransformFeedbackBuffers2EXT is not affected by conditional rendering

See Also

VK_EXT_transform_feedback, VK_KHR_device_address_commands, BindTransformFeedbackBuffer2InfoEXT, CommandBuffer

valuecmdBeginTransformFeedback2EXT
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> "firstCounterRange" ::: Word32

    firstCounterRange is the index of the first transform feedback buffer corresponding to pCounterInfos[0].

  4. -> "counterRangeCount" ::: Word32

    counterRangeCount is the size of the pCounterRanges array.

  5. -> "counterInfos" ::: Vector BindTransformFeedbackBuffer2InfoEXT

    pCounterInfos is NULL or a pointer to an array of BindTransformFeedbackBuffer2InfoEXT structures defining memory ranges containing counters used to resume transform feedback from a previous location.

  6. -> io ()
#

vkCmdBeginTransformFeedback2EXT - Make transform feedback active in the command buffer

Description

If pCounterInfos is NULL, it is equivalent to an array of BindTransformFeedbackBuffer2InfoEXT structures with each element having a addressRange.size of 0.

If the addressRange.size of an element of pCounterInfos at index i is 0, transform feedback data written to XfbBuffer with a XFB Buffer Number equal to the sum of i and firstCounterRange will be written starting at an offset of 0 in the bound transform feedback buffer. If the addressRange.size of an element of pCounterInfos at index i is not 0, it will instead be written starting at an offset equal to the 32-bit value found at pCounterInfos[i].addressRange.address.

The active transform feedback buffers will capture primitives emitted from the corresponding XfbBuffer in the bound graphics pipeline. Any XfbBuffer emitted that does not output to an active transform feedback buffer will not be captured.

Valid Usage

Valid Usage (Implicit)

  • If counterRangeCount is not 0, and pCounterInfos is not NULL, pCounterInfos must be a valid pointer to an array of counterRangeCount valid BindTransformFeedbackBuffer2InfoEXT structures

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • 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 CommandPool 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

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

State

Conditional Rendering

vkCmdBeginTransformFeedback2EXT is not affected by conditional rendering

See Also

VK_EXT_transform_feedback, VK_KHR_device_address_commands, BindTransformFeedbackBuffer2InfoEXT, CommandBuffer

valuecmdEndTransformFeedback2EXT
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> "firstCounterRange" ::: Word32
  4. -> "counterRangeCount" ::: Word32

    counterRangeCount is the size of the pCounterInfos array.

  5. -> "counterInfos" ::: Vector BindTransformFeedbackBuffer2InfoEXT

    pCounterInfos is NULL or a pointer to an array of BindTransformFeedbackBuffer2InfoEXT structures defining memory ranges used to write counters used to later resume transform feedback.

  6. -> io ()
#

vkCmdEndTransformFeedback2EXT - Make transform feedback inactive in the command buffer

Description

If pCounterInfos is NULL, it is equivalent to an array of BindTransformFeedbackBuffer2InfoEXT structures with each element having a addressRange.size of 0.

If the addressRange.size of an element of pCounterInfos at index i is 0, no data is written to the address range. If the addressRange.size of an element of pCounterInfos at index i is not 0, the byte offset, where the next vertex data would be written to in the transform feedback buffer at a binding equal to the sum of i and firstCounterBuffer, is written to that range’s address.

Valid Usage

Valid Usage (Implicit)

  • If counterRangeCount is not 0, and pCounterInfos is not NULL, pCounterInfos must be a valid pointer to an array of counterRangeCount valid BindTransformFeedbackBuffer2InfoEXT structures

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • 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 CommandPool 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

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

State

Conditional Rendering

vkCmdEndTransformFeedback2EXT is not affected by conditional rendering

See Also

VK_EXT_transform_feedback, VK_KHR_device_address_commands, BindTransformFeedbackBuffer2InfoEXT, CommandBuffer

valuecmdDrawIndirectByteCount2EXT
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> "instanceCount" ::: Word32

    instanceCount is the number of instances to draw.

  4. -> "firstInstance" ::: Word32

    firstInstance is the instance ID of the first instance to draw.

  5. -> "counterInfo" ::: BindTransformFeedbackBuffer2InfoEXT

    pCounterInfo is a pointer to a BindTransformFeedbackBuffer2InfoEXT defining the range of memory that the byte count is read from.

  6. -> "counterOffset" ::: Word32

    counterOffset is subtracted from the byte count.

  7. -> "vertexStride" ::: Word32

    vertexStride is the stride in bytes between each element of the vertex data that is used to calculate the vertex count from the counter value. This value is typically the same value that was used in the graphics pipeline state when the transform feedback was captured as the XfbStride.

  8. -> io ()
#

vkCmdDrawIndirectByteCount2EXT - Draw primitives with indirect parameters where the vertex count is derived from the counter byte value in the counter memory range

Description

When the command is executed, primitives are assembled in the same way as done with cmdDraw except the vertexCount is calculated based on the byte count read from counterBuffer at offset counterBufferOffset. The assembled primitives execute the bound graphics pipeline.

The effective vertexCount is calculated as follows:

const uint32_t * counterBufferPtr = (const uint8_t *)counterRange.address;
vertexCount = floor(max(0, (*counterBufferPtr - counterOffset)) / vertexStride);

The effective firstVertex is zero.

Valid Usage

Valid Usage (Implicit)

  • pCounterInfo must be a valid pointer to a valid BindTransformFeedbackBuffer2InfoEXT structure

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDrawIndirectByteCount2EXT is affected by conditional rendering

See Also

VK_EXT_transform_feedback, VK_KHR_device_address_commands, BindTransformFeedbackBuffer2InfoEXT, CommandBuffer

valuecmdWriteMarkerToMemoryAMD
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command will be recorded.

  3. -> MemoryMarkerInfoAMD

    pInfo specifies a pointer to an MemoryMarkerInfoAMD structure defining parameters of this command.

  4. -> io ()
#

vkCmdWriteMarkerToMemoryAMD - Execute a pipelined write of a marker value into a memory range

Description

When cmdWriteMarkerToMemoryAMD is submitted to a queue, it defines an execution dependency between prior operations and writing the marker value, as well as a memory dependency from earlier buffer marker write commands.

The first synchronization scope includes operations performed by operations that occur earlier in submission order in the pipeline stage identified by pInfo->stage. It additionally includes other buffer marker write commands that occur earlier in submission order that specified either the same pInfo->stage or a stage that is logically earlier.

The second synchronization scope includes only the buffer marker write.

The first access scope includes only accesses performed by other buffer marker write commands.

The second access scope is empty.

The access scope for buffer marker writes falls under the ACCESS_TRANSFER_WRITE_BIT flag, and is performed by either pInfo->stage or PIPELINE_STAGE_TRANSFER_BIT. Synchronization commands should specify this access flag and both pipeline stages when defining dependencies with this command.

Similar to cmdWriteTimestamp2, if an implementation is unable to write a marker at any specific pipeline stage, it may instead do so at any logically later stage.

Implementations may only support a limited number of pipelined marker write operations in flight at a given time. Thus an excessive number of marker write operations may degrade command execution performance.

Valid Usage

Valid Usage (Implicit)

Host Synchronization

  • Host access to commandBuffer must be externally synchronized

  • Host access to the CommandPool 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 VK_QUEUE_TRANSFER_BIT

Action

Conditional Rendering

vkCmdWriteMarkerToMemoryAMD is not affected by conditional rendering

See Also

VK_AMD_buffer_marker, VK_KHR_device_address_commands, CommandBuffer, MemoryMarkerInfoAMD

valuecmdBindIndexBuffer3KHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> BindIndexBuffer3InfoKHR

    pInfo is a pointer to a BindIndexBuffer3InfoKHR structure defining parameters of this command.

  4. -> io ()
#

vkCmdBindIndexBuffer3KHR - Bind an address range as an index buffer to a command buffer

Description

The bound index buffer range is set to the range of memory indicated by pInfo->addressRange.

If the nullDescriptor feature is enabled, pInfo->addressRange.size and pInfo->addressRange.address can be 0. When the size and address are 0, every index read from this binding will return a value of zero.

Valid Usage (Implicit)

Host Synchronization

  • Host access to commandBuffer must be externally synchronized

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

Command Properties

'

Conditional Rendering

vkCmdBindIndexBuffer3KHR is not affected by conditional rendering

See Also

VK_KHR_device_address_commands, BindIndexBuffer3InfoKHR, CommandBuffer

valuecmdBindVertexBuffers3KHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> "firstBinding" ::: Word32

    firstBinding is the index of the first vertex input binding whose state is updated by the command.

  4. -> "bindingInfos" ::: Vector BindVertexBuffer3InfoKHR
  5. -> io ()
#

vkCmdBindVertexBuffers3KHR - Bind strided address ranges as vertex buffers to a command buffer and dynamically set strides

Description

The values taken from the address ranges defined by elements i of pInfos replace the current state for the vertex input binding firstBinding + i, for i in [0, bindingCount). The vertex input binding is updated to the range of memory indicated by pInfos[i]. All vertex input attributes that use each of these bindings will use these updated addresses in their address calculations for subsequent drawing commands. If the nullDescriptor feature is enabled, elements of pInfos can have a addressRange.size and addressRange.address of 0. If a vertex input attribute is bound to a vertex input binding with a size and address of 0, the values taken from memory are considered to be zero, and missing G, B, or A components are filled with (0,0,1).

This command also dynamically sets the byte strides between consecutive elements within the strided range defined by pInfos[i] to the value of pInfos[i].addressRange.stride when drawing using shader objects, or when the graphics pipeline is created with DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE set in PipelineDynamicStateCreateInfo::pDynamicStates. Otherwise, strides are specified by the VkVertexInputBindingDescription::stride values used to create the currently active pipeline.

If drawing using shader objects or if the bound pipeline state object was also created with the DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then cmdSetVertexInputEXT can be used instead of cmdBindVertexBuffers2 to set the stride.

Unlike the static state to set the same, stride for each address range must be between 0 and the maximum extent of the attributes in the binding. cmdSetVertexInputEXT does not have this restriction so can be used if other stride values are desired.

Valid Usage

  • The sum of firstBinding and bindingCount must be less than or equal to PhysicalDeviceLimits::maxVertexInputBindings

  • The addressRange.stride of all elements of pInfos must be either 0 or greater than or equal to the maximum extent of all vertex input attributes fetched from the corresponding binding, where the extent is calculated as the VertexInputAttributeDescription::offset plus VertexInputAttributeDescription::format size

Valid Usage (Implicit)

  • pBindingInfos must be a valid pointer to an array of bindingCount valid BindVertexBuffer3InfoKHR structures

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called outside of a video coding scope

  • bindingCount must be greater than 0

Host Synchronization

  • Host access to commandBuffer must be externally synchronized

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

Command Properties

'

Conditional Rendering

vkCmdBindVertexBuffers3KHR is not affected by conditional rendering

See Also

VK_KHR_device_address_commands, BindVertexBuffer3InfoKHR, CommandBuffer

valuecmdDrawIndirect2KHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> DrawIndirect2InfoKHR

    pInfo is a pointer to a DrawIndirect2InfoKHR structure defining parameters of this command.

  4. -> io ()
#

vkCmdDrawIndirect2KHR - Draw primitives with indirect parameters through an address range

Description

cmdDrawIndirect2KHR behaves similarly to cmdDraw except that the parameters are read by the device from an address range during execution. pInfo->drawCount draws are executed by the command, with parameters taken from pInfo->addressRange starting at addressRange.address and increasing by addressRange.stride bytes for each successive draw. The parameters of each draw are encoded in an array of DrawIndirectCommand structures.

Valid Usage

Valid Usage (Implicit)

  • pInfo must be a valid pointer to a valid DrawIndirect2InfoKHR structure

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDrawIndirect2KHR is affected by conditional rendering

See Also

VK_KHR_device_address_commands, CommandBuffer, DrawIndirect2InfoKHR

valuecmdDrawIndexedIndirect2KHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> DrawIndirect2InfoKHR

    pInfo is a pointer to a DrawIndirect2InfoKHR structure defining parameters of this command.

  4. -> io ()
#

vkCmdDrawIndexedIndirect2KHR - Draw primitives with indirect parameters through an address range and with indexed vertices

Description

cmdDrawIndexedIndirect2KHR behaves similarly to cmdDrawIndexed except that the parameters are read by the device from an address range during execution. pInfo->drawCount draws are executed by the command, with parameters taken from pInfo->addressRange starting at addressRange.address and increasing by addressRange.stride bytes for each successive draw. The parameters of each draw are encoded in an array of DrawIndexedIndirectCommand structures.

Valid Usage

Valid Usage (Implicit)

  • pInfo must be a valid pointer to a valid DrawIndirect2InfoKHR structure

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDrawIndexedIndirect2KHR is affected by conditional rendering

See Also

VK_KHR_device_address_commands, CommandBuffer, DrawIndirect2InfoKHR

valuecmdDrawIndirectCount2KHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> DrawIndirectCount2InfoKHR

    pInfo is a pointer to a DrawIndirectCount2InfoKHR structure defining parameters of this command.

  4. -> io ()
#

vkCmdDrawIndirectCount2KHR - Draw primitives with indirect parameters and draw count through address ranges

Description

cmdDrawIndirectCount2KHR behaves similarly to cmdDrawIndirect2KHR except that the draw count is read by the device from an address range during execution. The command will read an unsigned 32-bit integer from pInfo->countAddressRange and use this as the draw count.

Valid Usage

Valid Usage (Implicit)

  • pInfo must be a valid pointer to a valid DrawIndirectCount2InfoKHR structure

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDrawIndirectCount2KHR is affected by conditional rendering

See Also

VK_KHR_device_address_commands, VK_KHR_draw_indirect_count, VK_VERSION_1_2, CommandBuffer, DrawIndirectCount2InfoKHR

valuecmdDrawIndexedIndirectCount2KHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> DrawIndirectCount2InfoKHR

    pInfo is a pointer to a DrawIndirectCount2InfoKHR structure defining parameters of this command.

  4. -> io ()
#

vkCmdDrawIndexedIndirectCount2KHR - Draw primitives with indirect parameters and draw count through address ranges and with indexed vertices

Description

cmdDrawIndexedIndirectCount2KHR behaves similarly to cmdDrawIndexedIndirect2KHR except that the draw count is read by the device from an address range during execution. The command will read an unsigned 32-bit integer from pInfo->countAddressRange and use this as the draw count.

Valid Usage

Valid Usage (Implicit)

  • pInfo must be a valid pointer to a valid DrawIndirectCount2InfoKHR structure

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDrawIndexedIndirectCount2KHR is affected by conditional rendering

See Also

VK_KHR_device_address_commands, VK_KHR_draw_indirect_count, VK_VERSION_1_2, CommandBuffer, DrawIndirectCount2InfoKHR

valuecmdDrawMeshTasksIndirect2EXT
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> DrawIndirect2InfoKHR

    pInfo is a pointer to a DrawIndirect2InfoKHR structure defining parameters of this command.

  4. -> io ()
#

vkCmdDrawMeshTasksIndirect2EXT - Issue a mesh tasks draw with indirect parameters through an address range

Description

cmdDrawMeshTasksIndirect2EXT behaves similarly to cmdDrawMeshTasksEXT except that the parameters are read by the device from an address range during execution. pInfo->drawCount draws are executed by the command, with parameters taken from pInfo->addressRange starting at addressRange.address and increasing by addressRange.stride bytes for each successive draw. The parameters of each draw are encoded in an array of DrawMeshTasksIndirectCommandEXT structures.

Valid Usage

Valid Usage (Implicit)

  • pInfo must be a valid pointer to a valid DrawIndirect2InfoKHR structure

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDrawMeshTasksIndirect2EXT is affected by conditional rendering

See Also

VK_EXT_mesh_shader, VK_KHR_device_address_commands, CommandBuffer, DrawIndirect2InfoKHR

valuecmdDrawMeshTasksIndirectCount2EXT
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> DrawIndirectCount2InfoKHR

    pInfo is a pointer to a DrawIndirectCount2InfoKHR structure defining parameters of this command.

  4. -> io ()
#

vkCmdDrawMeshTasksIndirectCount2EXT - Perform an indirect mesh tasks draw with the draw count sourced from an address range

Description

cmdDrawMeshTasksIndirectCount2EXT behaves similarly to cmdDrawMeshTasksIndirect2EXT except that the draw count is read by the device from an address range during execution. The command will read an unsigned 32-bit integer from pInfo->countAddressRange and use this as the draw count.

Valid Usage

Valid Usage (Implicit)

  • pInfo must be a valid pointer to a valid DrawIndirectCount2InfoKHR structure

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_GRAPHICS_BIT operations

  • This command must only be called inside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Inside

Outside

VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDrawMeshTasksIndirectCount2EXT is affected by conditional rendering

See Also

VK_EXT_mesh_shader, VK_KHR_device_address_commands, VK_KHR_draw_indirect_count, VK_VERSION_1_2, CommandBuffer, DrawIndirectCount2InfoKHR

valuecmdDispatchIndirect2KHR
  1. :: MonadIO io
  2. => CommandBuffer

    commandBuffer is the command buffer into which the command is recorded.

  3. -> DispatchIndirect2InfoKHR

    pInfo is a pointer to a DispatchIndirect2InfoKHR structure defining parameters of this command.

  4. -> io ()
#

vkCmdDispatchIndirect2KHR - Dispatch compute work items with indirect parameters through an address range

Description

cmdDispatchIndirect2KHR behaves similarly to cmdDispatchIndirect except that the parameters, encoded in a DispatchIndirectCommand structure, are read by the device from an address range during execution.

Valid Usage

Valid Usage (Implicit)

  • pInfo must be a valid pointer to a valid DispatchIndirect2InfoKHR structure

  • commandBuffer must be in the recording state

  • The CommandPool that commandBuffer was allocated from must support QUEUE_COMPUTE_BIT operations

  • This command must only be called outside of a render pass instance

  • This command must not be called between suspended render pass instances

  • 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 CommandPool 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

Outside

Outside

VK_QUEUE_COMPUTE_BIT

Action

Conditional Rendering

vkCmdDispatchIndirect2KHR is affected by conditional rendering

See Also

VK_KHR_device_address_commands, CommandBuffer, DispatchIndirect2InfoKHR

valuecreateAccelerationStructure2KHR
  1. :: (Extendss AccelerationStructureCreateInfo2KHR a, PokeChain a, MonadIO io)
  2. => Device

    device is the logical device that creates the acceleration structure object.

  3. -> AccelerationStructureCreateInfo2KHR a

    pCreateInfo is a pointer to a AccelerationStructureCreateInfo2KHR structure containing parameters affecting creation of the acceleration structure.

  4. -> "allocator" ::: Maybe AllocationCallbacks

    pAllocator controls host memory allocation as described in the Memory Allocation chapter.

  5. -> io AccelerationStructureKHR
#

vkCreateAccelerationStructure2KHR - Create a new acceleration structure object using a device address

Description

Similar to other objects in Vulkan, the acceleration structure creation merely creates an object with a specific “shape”. The type and quantity of geometry that can be built into an acceleration structure is determined by the parameters of AccelerationStructureCreateInfo2KHR.

The acceleration structure data is stored in the object referred to by AccelerationStructureCreateInfo2KHR::addressRange.address.

Once the AccelerationStructureKHR object has been created, it must be populated by acceleration structure build or acceleration structure copy commands such as cmdBuildAccelerationStructuresKHR and cmdCopyAccelerationStructureKHR. Acceleration structures created with this command must not be used by host commands.

The expected usage for a trace capture/replay tool is that it will serialize and later deserialize the acceleration structure data using acceleration structure copy commands. During capture the tool will use cmdCopyAccelerationStructureToMemoryKHR with a mode of COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR, and cmdCopyMemoryToAccelerationStructureKHR with a mode of COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR during replay.

Valid Usage

Valid Usage (Implicit)

  • device must be a valid Device handle

Return Codes

Success
Failure

See Also

VK_KHR_acceleration_structure, VK_KHR_device_address_commands, AccelerationStructureCreateInfo2KHR, AccelerationStructureKHR, AllocationCallbacks, Device

VkStridedDeviceAddressRangeKHR - Structure specifying a device address range with a stride

Valid Usage

  • If size is not 0, address must not be 0

  • The sum of address and size must be less than or equal to the sum of an address retrieved from a Buffer and the value of BufferCreateInfo::size used to create that Buffer

  • stride must be less than or equal to size

Valid Usage (Implicit)

  • If address is not 0, address must be a valid DeviceAddress value

See Also

VK_KHR_copy_memory_indirect, VK_KHR_device_address_commands, BindVertexBuffer3InfoKHR, CopyMemoryIndirectInfoKHR, CopyMemoryToImageIndirectInfoKHR, DeviceAddress, DeviceSize, DrawIndirect2InfoKHR, DrawIndirectCount2InfoKHR, cmdCopyQueryPoolResultsToMemoryKHR

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkDeviceAddressRangeKHR - Structure specifying a device address range

Valid Usage

  • If size is not 0, address must not be 0

  • The sum of address and size must be less than or equal to the sum of an address retrieved from a Buffer and the value of BufferCreateInfo::size used to create that Buffer

Valid Usage (Implicit)

  • If address is not 0, address must be a valid DeviceAddress value

See Also

VK_EXT_descriptor_heap, VK_KHR_device_address_commands, AccelerationStructureCreateInfo2KHR, BindHeapInfoEXT, BindIndexBuffer3InfoKHR, BindTransformFeedbackBuffer2InfoEXT, ConditionalRenderingBeginInfo2EXT, DeviceAddress, DeviceMemoryCopyKHR, DeviceMemoryImageCopyKHR, DeviceSize, DispatchIndirect2InfoKHR, DrawIndirectCount2InfoKHR, MemoryMarkerInfoAMD, MemoryRangeBarrierKHR, ResourceDescriptorDataEXT, TexelBufferDescriptorInfoEXT, cmdFillMemoryKHR, cmdUpdateMemoryKHR

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero
datadata DeviceMemoryCopyKHR
#

VkDeviceMemoryCopyKHR - Structure specifying a memory range copy operation

Description

This structure defines a copy operation where srcRange.size bytes will be copied from srcRange.address to dstRange.address.

Valid Usage

Valid Usage (Implicit)

See Also

VK_KHR_device_address_commands, AddressCommandFlagsKHR, CopyDeviceMemoryInfoKHR, DeviceAddressRangeKHR, StructureType

Constructors

Instances5Show, Storable, FromCStruct, ToCStruct, Zero

VkCopyDeviceMemoryInfoKHR - Structure specifying a buffer copy operation

Valid Usage

  • The range of memory backing the address range defined by the srcRange member of any element of pRegions must not overlap the memory backing the address range defined by the srcRange or dstRange of any element of pRegions

Valid Usage (Implicit)

  • pNext must be NULL

  • pRegions must be a valid pointer to an array of regionCount valid DeviceMemoryCopyKHR structures

  • regionCount must be greater than 0

See Also

VK_KHR_device_address_commands, DeviceMemoryCopyKHR, StructureType, cmdCopyMemoryKHR

Constructors

Instances4Show, FromCStruct, ToCStruct, Zero
datadata DeviceMemoryImageCopyKHR (es :: [Type])
#

VkDeviceMemoryImageCopyKHR - Structure specifying a copy operation between a memory range and texels in an image

Description

This structure defines a copy operation where srcRange.size bytes will be copied from srcRange.address to dstRange.address.

Valid Usage

Valid Usage (Implicit)

See Also

VK_KHR_device_address_commands, AddressCommandFlagsKHR, CopyDeviceMemoryImageInfoKHR, DeviceAddressRangeKHR, Extent3D, ImageLayout, ImageSubresourceLayers, Offset3D, StructureType

Constructors

Instances5Extensible, Show, FromCStruct, ToCStruct, Zero

VkCopyDeviceMemoryImageInfoKHR - Structure specifying copy operations between an image and memory ranges

Valid Usage

  • The range of memory backing the address range defined by the addressRange member of any element of pRegions must not overlap the memory backing the address range defined by the addressRange of any other element of pRegions

Valid Usage (Implicit)

  • pNext must be NULL

  • image must be a valid Image handle

  • pRegions must be a valid pointer to an array of regionCount valid DeviceMemoryImageCopyKHR structures

  • regionCount must be greater than 0

See Also

VK_KHR_device_address_commands, DeviceMemoryImageCopyKHR, Image, StructureType, cmdCopyImageToMemoryKHR, cmdCopyMemoryToImageKHR

Constructors

Instances4Show, FromCStruct, ToCStruct, Zero
datadata MemoryRangeBarriersInfoKHR (es :: [Type])
#

VkMemoryRangeBarriersInfoKHR - Structure specifying memory range barriers

Description

When this structure is included in the pNext chain of DependencyInfo, it defines a set of memory dependencies, as well as queue family ownership transfer operations, for a specified set of memory ranges.

If this structure is not included in the pNext chain of DependencyInfo, it is equivalent to specifying it with a memoryRangeBarrierCount of 0.

Each member of pMemoryRangeBarriers defines a separate memory dependency.

Valid Usage (Implicit)

  • If memoryRangeBarrierCount is not 0, pMemoryRangeBarriers must be a valid pointer to an array of memoryRangeBarrierCount valid MemoryRangeBarrierKHR structures

Structure Chaining

Extends the structure

See Also

VK_KHR_device_address_commands, MemoryRangeBarrierKHR, StructureType

Constructors

Instances5Extensible, Show, FromCStruct, ToCStruct, Zero

VkMemoryRangeBarrierKHR - Structure specifying a memory range barrier

Description

This structure defines a memory dependency limited to an address range, and can define a queue family ownership transfer operation for that range.

The first synchronization scope and access scope described by this structure include only operations and memory accesses specified by srcStageMask and srcAccessMask.

The second synchronization scope and access scope described by this structure include only operations and memory accesses specified by dstStageMask and dstAccessMask.

Both access scopes are limited to only memory accesses to memory in addressRange.

If the buffer from which address was queried was created with a sharing mode of SHARING_MODE_EXCLUSIVE, and srcQueueFamilyIndex is not equal to dstQueueFamilyIndex, this memory range barrier defines a queue family ownership transfer operation. When executed on a queue in the family identified by srcQueueFamilyIndex, this barrier defines a queue family release operation for the specified address range, and the second synchronization scope does not apply to this operation. When executed on a queue in the family identified by dstQueueFamilyIndex, this barrier defines a queue family acquire operation for the specified address range, and the first synchronization scope does not apply to this operation.

A queue family ownership transfer operation is also defined if the values are not equal, and either is one of the special queue family values reserved for external memory ownership transfers, as described in https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#synchronization-queue-transfers. A queue family release operation is defined when dstQueueFamilyIndex is one of those values, and a queue family acquire operation is defined when srcQueueFamilyIndex is one of those values.

Valid Usage

Valid Usage (Implicit)

See Also

VK_KHR_device_address_commands, AccessFlags2, AddressCommandFlagsKHR, DeviceAddressRangeKHR, MemoryRangeBarriersInfoKHR, PipelineStageFlags2, StructureType

Constructors

Instances5Show, Storable, FromCStruct, ToCStruct, Zero

VkPhysicalDeviceDeviceAddressCommandsFeaturesKHR - Structure describing support for device address commands

Members

This structure describes the following feature:

Description

If the PhysicalDeviceDeviceAddressCommandsFeaturesKHR structure is included in the pNext chain of the PhysicalDeviceFeatures2 structure passed to getPhysicalDeviceFeatures2, it is filled in to indicate whether each corresponding feature is supported. If the application wishes to use a Device with any features described by PhysicalDeviceDeviceAddressCommandsFeaturesKHR, it must add an instance of the structure, with the desired feature members set to TRUE, to the pNext chain of DeviceCreateInfo when creating the Device.

Structure Chaining

Extends the structures

See Also

VK_KHR_device_address_commands, Bool32, StructureType

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkConditionalRenderingBeginInfo2EXT - Structure specifying conditional rendering begin information

Description

If the 32-bit value at addressRange.address is zero, then the rendering commands are discarded, otherwise they are executed as normal. If the value of the predicate in memory changes while conditional rendering is active, the rendering commands may be discarded in an implementation-dependent way. Some implementations may latch the value of the predicate upon beginning conditional rendering while others may read it before every rendering command.

Valid Usage

Valid Usage (Implicit)

See Also

VK_EXT_conditional_rendering, VK_KHR_device_address_commands, AddressCommandFlagsKHR, ConditionalRenderingFlagsEXT, DeviceAddressRangeKHR, StructureType, cmdBeginConditionalRendering2EXT

Constructors

Instances5Show, Storable, FromCStruct, ToCStruct, Zero

VkAccelerationStructureCreateInfo2KHR - Structure specifying the parameters of a newly created acceleration structure object using a device address

Description

Applications should create an acceleration structure with a specific AccelerationStructureTypeKHR other than ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR.

ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR is intended to be used by API translation layers. This can be used at acceleration structure creation time in cases where the actual acceleration structure type (top or bottom) is not yet known. The actual acceleration structure type must be specified as ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_KHR, ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR when the build is performed.

During replay, if createFlags includes ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR, addressRange.address must be an address used to create an identical acceleration structure on the same implementation. The address must be in the range of an identically created Buffer at the same offset.

Applications should avoid creating acceleration structures with application-provided addresses and implementation-provided addresses in the same process, to reduce the likelihood of ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR errors.

The expected usage for this is that a trace capture/replay tool will add the BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT flag and BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT to all buffers used as storage for an acceleration structure with ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR included in createFlags. This also means that the tool will need to add MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT to memory allocations to allow the BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT flag to be set where the application may not have otherwise required it. During capture the tool will save the queried opaque device addresses in the trace. During replay, the buffers will be created specifying the original address so any address values stored in the trace data will remain valid.

Implementations are expected to separate such buffers in the GPU address space so normal allocations will avoid using these addresses. Applications and tools should avoid mixing application-provided and implementation-provided addresses for buffers created with BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, to avoid address space allocation conflicts.

If the acceleration structure will be the target of a build operation, the required size for an acceleration structure can be queried with getAccelerationStructureBuildSizesKHR. If the acceleration structure is going to be the target of a copy, cmdWriteAccelerationStructuresPropertiesKHR can be used to obtain the size required depending on the type of copy.

If the acceleration structure will be the target of a build operation with BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV it must include ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV in createFlags and include AccelerationStructureMotionInfoNV as an extension structure in pNext with the number of instances as metadata for the object.

Valid Usage

Valid Usage (Implicit)

See Also

VK_KHR_acceleration_structure, VK_KHR_device_address_commands, AccelerationStructureCreateFlagsKHR, AccelerationStructureTypeKHR, AddressCommandFlagsKHR, DeviceAddressRangeKHR, StructureType, createAccelerationStructure2KHR

Constructors

Instances5Extensible, Show, FromCStruct, ToCStruct, Zero

VkBindIndexBuffer3InfoKHR - Index buffer binding info

Valid Usage

Valid Usage (Implicit)

See Also

VK_KHR_device_address_commands, AddressCommandFlagsKHR, DeviceAddressRangeKHR, IndexType, StructureType, cmdBindIndexBuffer3KHR

Constructors

Instances5Show, Storable, FromCStruct, ToCStruct, Zero

VkBindVertexBuffer3InfoKHR - Bind vertex buffer info

Valid Usage

Valid Usage (Implicit)

See Also

VK_KHR_device_address_commands, AddressCommandFlagsKHR, Bool32, StridedDeviceAddressRangeKHR, StructureType, cmdBindVertexBuffers3KHR

Constructors

Instances5Show, Storable, FromCStruct, ToCStruct, Zero
datadata DrawIndirect2InfoKHR
#

VkDrawIndirect2InfoKHR - Draw indirect info

Valid Usage

Valid Usage (Implicit)

See Also

VK_KHR_device_address_commands, AddressCommandFlagsKHR, StridedDeviceAddressRangeKHR, StructureType, cmdDrawIndexedIndirect2KHR, cmdDrawIndirect2KHR, cmdDrawMeshTasksIndirect2EXT

Constructors

Instances5Show, Storable, FromCStruct, ToCStruct, Zero

VkDrawIndirectCount2InfoKHR - Draw indirect count info

Valid Usage

Valid Usage (Implicit)

See Also

VK_KHR_device_address_commands, AddressCommandFlagsKHR, DeviceAddressRangeKHR, StridedDeviceAddressRangeKHR, StructureType, cmdDrawIndexedIndirectCount2KHR, cmdDrawIndirectCount2KHR, cmdDrawMeshTasksIndirectCount2EXT

Constructors

Instances5Show, Storable, FromCStruct, ToCStruct, Zero

VkDispatchIndirect2InfoKHR - Dispatch indirect info

Valid Usage

Valid Usage (Implicit)

See Also

VK_KHR_device_address_commands, AddressCommandFlagsKHR, DeviceAddressRangeKHR, StructureType, cmdDispatchIndirect2KHR

Constructors

Instances5Show, Storable, FromCStruct, ToCStruct, Zero

VkBindTransformFeedbackBuffer2InfoEXT - Bind transform feedback buffer info

Valid Usage

Valid Usage (Implicit)

See Also

VK_EXT_transform_feedback, VK_KHR_device_address_commands, AddressCommandFlagsKHR, DeviceAddressRangeKHR, StructureType, cmdBeginTransformFeedback2EXT, cmdBindTransformFeedbackBuffers2EXT, cmdDrawIndirectByteCount2EXT, cmdEndTransformFeedback2EXT

Constructors

Instances5Show, Storable, FromCStruct, ToCStruct, Zero
datadata MemoryMarkerInfoAMD
#

VkMemoryMarkerInfoAMD - Memory marker write info

Valid Usage

Valid Usage (Implicit)

See Also

VK_AMD_buffer_marker, VK_KHR_device_address_commands, AddressCommandFlagsKHR, DeviceAddressRangeKHR, PipelineStageFlags2, StructureType, cmdWriteMarkerToMemoryAMD

Constructors

Instances5Show, Storable, FromCStruct, ToCStruct, Zero
newtypenewtype AddressCommandFlagBitsKHR
#

VkAddressCommandFlagBitsKHR - Bitmask specifying address copy parameters

Description

If neither ADDRESS_COMMAND_STORAGE_BUFFER_USAGE_BIT_KHR nor ADDRESS_COMMAND_UNKNOWN_STORAGE_BUFFER_USAGE_BIT_KHR are specified, the address range must not be aliased with any buffer allocated with the BUFFER_USAGE_STORAGE_BUFFER_BIT. If neither ADDRESS_COMMAND_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR nor ADDRESS_COMMAND_UNKNOWN_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR are specified, the address range must not be aliased with any buffer allocated with the BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT.

Buffers can return overlapping address ranges if they are bound to overlapping ranges of a DeviceMemory object. Applications should ensure that if they do this kind of aliasing, that they consistently either include or do not include BUFFER_USAGE_STORAGE_BUFFER_BIT and BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT on aliased buffers when considering these flags.

See Also

VK_KHR_device_address_commands, AddressCommandFlagsKHR

Instances8Eq, Ord, Read, Show, Bits, FiniteBits, …
newtypenewtype AccelerationStructureKHR
#
Instances7Eq, Ord, Show, Storable, HasObjectType, IsHandle, …

VkConditionalRenderingFlagBitsEXT - Specify the behavior of conditional rendering

Description

  • CONDITIONAL_RENDERING_INVERTED_BIT_EXT specifies the condition used to determine whether to discard rendering commands or not. That is, if the 32-bit predicate read from buffer memory at offset is zero, the rendering commands are not discarded, and if non zero, then they are discarded.

See Also

VK_EXT_conditional_rendering, ConditionalRenderingFlagsEXT

Instances8Eq, Ord, Read, Show, Bits, FiniteBits, …

VkAccelerationStructureCreateFlagBitsKHR - Bitmask specifying additional creation parameters for acceleration structure

Description

See Also

VK_KHR_acceleration_structure, AccelerationStructureCreateFlagsKHR

Instances8Eq, Ord, Read, Show, Bits, FiniteBits, …
newtypenewtype AccelerationStructureTypeKHR
#

VkAccelerationStructureTypeKHR - Type of acceleration structure

Description

See Also

VK_KHR_acceleration_structure, VK_NV_ray_tracing, AccelerationStructureBuildGeometryInfoKHR, AccelerationStructureCreateInfo2KHR, AccelerationStructureCreateInfoKHR, AccelerationStructureInfoNV

Instances6Eq, Ord, Read, Show, Storable, Zero