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

GHC 10.0.0.20260917 · lts/ghc-10.0.x · 8174fa4 · 2026-10-11

Modulevulkan-3.27GHC2021

Vulkan.Extensions.VK_AMDX_shader_enqueue

Name

VK_AMDX_shader_enqueue - device extension

VK_AMDX_shader_enqueue

Name String

VK_AMDX_shader_enqueue

Extension Type

Device extension

Registered Extension Number

135

Revision

2

Ratification Status

Not ratified

Extension and Version Dependencies

VK_KHR_synchronization2          and

VK_KHR_spirv_1_4          and

VK_EXT_extended_dynamic_state      or

Vulkan Version 1.3 and VK_KHR_maintenance5 and VK_KHR_pipeline_library

  • __This is a provisional extension and must be used with caution. See the description of provisional header files for enablement and stability details.__

API Interactions
  • Interacts with VK_VERSION_1_4

  • Interacts with VK_EXT_mesh_shader

  • Interacts with VK_KHR_maintenance5

Contact
Extension Proposal

VK_AMDX_shader_enqueue

Other Extension Metadata

Last Modified Date

2024-07-17

Provisional

__This extension is

provisional

and

should

not be used in production applications. The functionality

may

change in ways that break backwards compatibility between revisions, and before final release.__

Contributors
  • Tobias Hector, AMD

  • Matthaeus Chajdas, AMD

  • Maciej Jesionowski, AMD

  • Robert Martin, AMD

  • Qun Lin, AMD

  • Rex Xu, AMD

  • Dominik Witczak, AMD

  • Karthik Srinivasan, AMD

  • Nicolai Haehnle, AMD

  • Stuart Smith, AMD

Description

This extension adds the ability for developers to enqueue mesh and compute shader workgroups from other compute shaders.

New Commands

New Structures

New Unions

New Enum Constants

If VK_KHR_maintenance5 or Vulkan Version 1.4 is supported:

Version History

  • Revision 2, 2024-07-17 (Tobias Hector)

    • Add mesh nodes

  • Revision 1, 2021-07-22 (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.

  • 12 types
  • 7 values
  • Packagevulkan-3.27
  • Exports22
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourceVK_AMDX_shader_enqueue.hs
valuegetExecutionGraphPipelineScratchSizeAMDX
  1. :: MonadIO io
  2. => Device

    device is the logical device that executionGraph was created on.

    device must be a valid Device handle

  3. -> "executionGraph" ::: Pipeline

    executionGraph is the execution graph pipeline to query the scratch space for.

    executionGraph must be a valid Pipeline handle

    executionGraph must have been created, allocated, or retrieved from device

  4. -> io ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
#

vkGetExecutionGraphPipelineScratchSizeAMDX - Query scratch space required to dispatch an execution graph

Description

After this function returns, information about the scratch space required will be returned in pSizeInfo.

Return Codes

Success
Failure

See Also

VK_AMDX_shader_enqueue, Device, ExecutionGraphPipelineScratchSizeAMDX, Pipeline

valuegetExecutionGraphPipelineNodeIndexAMDX
  1. :: MonadIO io
  2. => Device

    device is the logical device that executionGraph was created on.

  3. -> "executionGraph" ::: Pipeline

    executionGraph is the execution graph pipeline to query the internal node index for.

  4. -> "nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX

    pNodeInfo is a pointer to a PipelineShaderStageNodeCreateInfoAMDX structure identifying the name and index of the node to query.

  5. -> io ("nodeIndex" ::: Word32)
#

vkGetExecutionGraphPipelineNodeIndexAMDX - Query internal id of a node in an execution graph

Description

Once this function returns, the contents of pNodeIndex contain the internal node index of the identified node.

Valid Usage

  • pNodeInfo->pName must not be NULL

  • pNodeInfo->index must not be SHADER_INDEX_UNUSED_AMDX

  • There must be a node in executionGraph with a shader name and index equal to pNodeInfo->pName and pNodeInfo->index

Valid Usage (Implicit)

  • device must be a valid Device handle

  • executionGraph must be a valid Pipeline handle

  • pNodeInfo must be a valid pointer to a valid PipelineShaderStageNodeCreateInfoAMDX structure

  • pNodeIndex must be a valid pointer to a uint32_t value

  • executionGraph must have been created, allocated, or retrieved from device

Return Codes

Success
Failure

See Also

VK_AMDX_shader_enqueue, Device, Pipeline, PipelineShaderStageNodeCreateInfoAMDX

valuecreateExecutionGraphPipelinesAMDX
  1. :: MonadIO io
  2. => Device

    device is the logical device that creates the execution graph pipelines.

  3. -> PipelineCache

    pipelineCache is either NULL_HANDLE, indicating that pipeline caching is disabled; or the handle of a valid pipeline cache object, in which case use of that cache is enabled for the duration of the command. The implementation must not access this object outside of the duration of this command.

  4. -> "createInfos" ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)

    pCreateInfos is a pointer to an array of ExecutionGraphPipelineCreateInfoAMDX structures.

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

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

  6. -> io (Result, "pipelines" ::: Vector Pipeline)
#

vkCreateExecutionGraphPipelinesAMDX - Creates a new execution graph pipeline object

Description

Pipelines are created and returned as described for Multiple Pipeline Creation.

Valid Usage

Valid Usage (Implicit)

  • device must be a valid Device handle

  • If pipelineCache is not NULL_HANDLE, pipelineCache must be a valid PipelineCache handle

  • pCreateInfos must be a valid pointer to an array of createInfoCount valid ExecutionGraphPipelineCreateInfoAMDX structures

  • If pAllocator is not NULL, pAllocator must be a valid pointer to a valid AllocationCallbacks structure

  • pPipelines must be a valid pointer to an array of createInfoCount Pipeline handles

  • createInfoCount must be greater than 0

  • If pipelineCache is a valid handle, it must have been created, allocated, or retrieved from device

Return Codes

Success
Failure

See Also

VK_AMDX_shader_enqueue, AllocationCallbacks, Device, ExecutionGraphPipelineCreateInfoAMDX, Pipeline, PipelineCache

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

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

  3. -> "executionGraph" ::: Pipeline

    executionGraph is the execution graph pipeline to initialize the scratch memory for.

  4. -> "scratch" ::: DeviceAddress

    scratch is the address of scratch memory to be initialized.

  5. -> "scratchSize" ::: DeviceSize

    scratchSize is a range in bytes of scratch memory to be initialized.

  6. -> io ()
#

vkCmdInitializeGraphScratchMemoryAMDX - Initialize scratch memory for an execution graph

Description

This command must be called before using scratch to dispatch the bound execution graph pipeline.

Execution of this command may modify any memory locations in the range [scratch,scratch + scratchSize). Accesses to this memory range are performed in the PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the ACCESS_2_SHADER_STORAGE_READ_BIT and ACCESS_2_SHADER_STORAGE_WRITE_BIT access flags.

If any portion of scratch is modified by any command other than cmdDispatchGraphAMDX, cmdDispatchGraphIndirectAMDX, cmdDispatchGraphIndirectCountAMDX, or cmdInitializeGraphScratchMemoryAMDX with the same execution graph, it must be reinitialized for the execution graph again before dispatching against it.

Valid Usage

  • scratch must be the device address of an allocated memory range at least as large as scratchSize

Valid Usage (Implicit)

  • executionGraph must be a valid Pipeline handle

  • scratch must be a valid DeviceAddress value

  • commandBuffer must be in the recording state

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

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

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

  • commandBuffer must be a primary CommandBuffer

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

Host Synchronization

  • 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

Both

Outside

VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdInitializeGraphScratchMemoryAMDX is not affected by conditional rendering

See Also

VK_AMDX_shader_enqueue, CommandBuffer, DeviceAddress, DeviceSize, Pipeline

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

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

  3. -> "scratch" ::: DeviceAddress

    scratch is the address of scratch memory to be used.

  4. -> "scratchSize" ::: DeviceSize

    scratchSize is a range in bytes of scratch memory to be used.

  5. -> DispatchGraphCountInfoAMDX

    pCountInfo is a host pointer to a DispatchGraphCountInfoAMDX structure defining the nodes which will be initially executed.

  6. -> io ()
#

vkCmdDispatchGraphAMDX - Dispatch an execution graph

Description

When this command is executed, the nodes specified in pCountInfo are executed. Nodes executed as part of this command are not implicitly synchronized in any way against each other once they are dispatched. There are no rasterization order guarantees between separately dispatched graphics nodes, though individual primitives within a single dispatch do adhere to rasterization order. Draw calls executed before or after the execution graph also execute relative to each graphics node with respect to rasterization order.

For this command, all device/host pointers in substructures are treated as host pointers and read only during host execution of this command. Once this command returns, no reference to the original pointers is retained.

Execution of this command may modify any memory locations in the range [scratch,scratch + scratchSize). Accesses to this memory range are performed in the PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the ACCESS_2_SHADER_STORAGE_READ_BIT and ACCESS_2_SHADER_STORAGE_WRITE_BIT access flags.

This command captures command buffer state for mesh nodes similarly to draw commands.

Valid Usage

Valid Usage (Implicit)

Host Synchronization

  • 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

Both

Outside

VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDispatchGraphAMDX is affected by conditional rendering

See Also

VK_AMDX_shader_enqueue, CommandBuffer, DeviceAddress, DeviceSize, DispatchGraphCountInfoAMDX

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

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

  3. -> "scratch" ::: DeviceAddress

    scratch is the address of scratch memory to be used.

  4. -> "scratchSize" ::: DeviceSize

    scratchSize is a range in bytes of scratch memory to be used.

  5. -> DispatchGraphCountInfoAMDX

    pCountInfo is a host pointer to a DispatchGraphCountInfoAMDX structure defining the nodes which will be initially executed.

  6. -> io ()
#

vkCmdDispatchGraphIndirectAMDX - Dispatch an execution graph with node and payload parameters read on the device

Description

When this command is executed, the nodes specified in pCountInfo are executed. Nodes executed as part of this command are not implicitly synchronized in any way against each other once they are dispatched. There are no rasterization order guarantees between separately dispatched graphics nodes, though individual primitives within a single dispatch do adhere to rasterization order. Draw calls executed before or after the execution graph also execute relative to each graphics node with respect to rasterization order.

For this command, all device/host pointers in substructures are treated as device pointers and read during device execution of this command. The allocation and contents of these pointers only needs to be valid during device execution. All of these addresses will be read in the PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the ACCESS_2_SHADER_STORAGE_READ_BIT access flag.

Execution of this command may modify any memory locations in the range [scratch,scratch + scratchSize). Accesses to this memory range are performed in the PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the ACCESS_2_SHADER_STORAGE_READ_BIT and ACCESS_2_SHADER_STORAGE_WRITE_BIT access flags.

This command captures command buffer state for mesh nodes similarly to draw commands.

Valid Usage

Valid Usage (Implicit)

Host Synchronization

  • 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

Both

Outside

VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDispatchGraphIndirectAMDX is affected by conditional rendering

See Also

VK_AMDX_shader_enqueue, CommandBuffer, DeviceAddress, DeviceSize, DispatchGraphCountInfoAMDX

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

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

  3. -> "scratch" ::: DeviceAddress

    scratch is the address of scratch memory to be used.

  4. -> "scratchSize" ::: DeviceSize

    scratchSize is a range in bytes of scratch memory to be used.

  5. -> "countInfo" ::: DeviceAddress

    countInfo is a device address of a DispatchGraphCountInfoAMDX structure defining the nodes which will be initially executed.

  6. -> io ()
#

vkCmdDispatchGraphIndirectCountAMDX - Dispatch an execution graph with all parameters read on the device

Description

When this command is executed, the nodes specified in countInfo are executed. Nodes executed as part of this command are not implicitly synchronized in any way against each other once they are dispatched.

For this command, all pointers in substructures are treated as device pointers and read during device execution of this command. The allocation and contents of these pointers only needs to be valid during device execution. All of these addresses will be read in the PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the ACCESS_2_SHADER_STORAGE_READ_BIT access flag.

Execution of this command may modify any memory locations in the range [scratch,scratch + scratchSize). Accesses to this memory range are performed in the PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the ACCESS_2_SHADER_STORAGE_READ_BIT and ACCESS_2_SHADER_STORAGE_WRITE_BIT access flags.

Valid Usage

Valid Usage (Implicit)

Host Synchronization

  • 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

Both

Outside

VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT

Action

Conditional Rendering

vkCmdDispatchGraphIndirectCountAMDX is affected by conditional rendering

See Also

VK_AMDX_shader_enqueue, CommandBuffer, DeviceAddress, DeviceSize

VkPhysicalDeviceShaderEnqueuePropertiesAMDX - Structure describing shader enqueue limits of an implementation

Members

The members of the PhysicalDeviceShaderEnqueuePropertiesAMDX structure describe the following limits:

Description

If the PhysicalDeviceShaderEnqueuePropertiesAMDX structure is included in the pNext chain of the PhysicalDeviceProperties2 structure passed to getPhysicalDeviceProperties2, it is filled in with each corresponding implementation-dependent property.

Structure Chaining

Extends the structure

See Also

VK_AMDX_shader_enqueue, StructureType

Constructors

  • PhysicalDeviceShaderEnqueuePropertiesAMDX
    • maxExecutionGraphDepth :: Word32

      maxExecutionGraphDepth defines the maximum node chain depth in the graph. The dispatched node is at depth 1 and the node enqueued by it is at depth 2, and so on. If a node enqueues itself, each recursive enqueue increases the depth by 1 as well.

    • maxExecutionGraphShaderOutputNodes :: Word32

      maxExecutionGraphShaderOutputNodes specifies the maximum number of unique nodes that can be dispatched from a single shader, and must be at least 256.

    • maxExecutionGraphShaderPayloadSize :: Word32

      maxExecutionGraphShaderPayloadSize specifies the maximum total size of payload declarations in a shader. For any payload declarations that share resources, indicated by NodeSharesPayloadLimitsWithAMDX decorations, the maximum size of each set of shared payload declarations is taken. The sum of each shared set’s maximum size and the size of each unshared payload is counted against this limit.

    • maxExecutionGraphShaderPayloadCount :: Word32

      maxExecutionGraphShaderPayloadCount specifies the maximum number of output payloads that can be initialized in a single workgroup.

    • executionGraphDispatchAddressAlignment :: Word32

      executionGraphDispatchAddressAlignment specifies the alignment of non-scratch DeviceAddress arguments consumed by graph dispatch commands.

    • maxExecutionGraphWorkgroupCount :: (Word32, Word32, Word32)

      maxExecutionGraphWorkgroupCount[3] is the maximum number of local workgroups that a shader can be dispatched with in X, Y, and Z dimensions, respectively.

    • maxExecutionGraphWorkgroups :: Word32

      maxExecutionGraphWorkgroups is the total number of local workgroups that a shader can be dispatched with.

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkPhysicalDeviceShaderEnqueueFeaturesAMDX - Structure describing whether shader enqueue within execution graphs are supported by the implementation

Members

This structure describes the following feature:

Description

If the PhysicalDeviceShaderEnqueueFeaturesAMDX 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 PhysicalDeviceShaderEnqueueFeaturesAMDX, 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_AMDX_shader_enqueue, Bool32, StructureType

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkExecutionGraphPipelineCreateInfoAMDX - Structure specifying parameters of a newly created execution graph pipeline

Description

The parameters basePipelineHandle and basePipelineIndex are described in more detail in Pipeline Derivatives.

Each shader stage provided when creating an execution graph pipeline (including those in libraries) is associated with a name and an index, determined by the inclusion or omission of a PipelineShaderStageNodeCreateInfoAMDX structure in its pNext chain. For any graphics pipeline libraries, only the name and index of the vertex or mesh shader stage is linked directly to the graph as a node - other shader stages in the pipeline will be executed after those shader stages as normal. Task shaders cannot be included in a graphics pipeline used for a draw node.

In addition to the shader name and index, an internal “node index” is also generated for each node, which can be queried with getExecutionGraphPipelineNodeIndexAMDX, and is used exclusively for initial dispatch of an execution graph.

Valid Usage

Valid Usage (Implicit)

See Also

VK_AMDX_shader_enqueue, Pipeline, PipelineCreateFlags, PipelineLayout, PipelineLibraryCreateInfoKHR, PipelineShaderStageCreateInfo, StructureType, createExecutionGraphPipelinesAMDX

Constructors

Instances5Extensible, Show, FromCStruct, ToCStruct, Zero

VkPipelineShaderStageNodeCreateInfoAMDX - Structure specifying the shader name and index with an execution graph

Description

When included in the pNext chain of a PipelineShaderStageCreateInfo structure, this structure specifies the shader name and shader index of a node when creating an execution graph pipeline. If this structure is omitted, the shader name is set to the name of the entry point in SPIR-V and the shader index is set to 0.

When dispatching a node from another shader, the name is fixed at pipeline creation, but the index can be set dynamically. By associating multiple shaders with the same name but different indexes, applications can dynamically select different nodes to execute. Applications must ensure each node has a unique name and index.

Shaders with the same name must be of the same type - e.g. a compute and graphics shader, or even two compute shaders where one is coalescing and the other is not, cannot share the same name.

Valid Usage (Implicit)

  • If pName is not NULL, pName must be a null-terminated UTF-8 string

Structure Chaining

Extends the structure

See Also

VK_AMDX_shader_enqueue, StructureType, getExecutionGraphPipelineNodeIndexAMDX

Constructors

  • PipelineShaderStageNodeCreateInfoAMDX
    • name :: Maybe ByteString

      pName is the shader name to use when creating a node in an execution graph. If pName is NULL, the name of the entry point specified in SPIR-V is used as the shader name.

    • index :: Word32

      index is the shader index to use when creating a node in an execution graph. If index is SHADER_INDEX_UNUSED_AMDX then the original index is used, either as specified by the ShaderIndexAMDX execution mode, or 0 if that too is not specified.

Instances4Show, FromCStruct, ToCStruct, Zero

VkExecutionGraphPipelineScratchSizeAMDX - Structure describing the scratch space required to dispatch an execution graph

Description

Applications can use any amount of scratch memory greater than minSize for dispatching a graph, however only the values equal to minSize + an integer multiple of sizeGranularity will be used. Greater values may result in higher performance, up to maxSize which indicates the most memory that an implementation can use effectively.

Valid Usage (Implicit)

See Also

VK_AMDX_shader_enqueue, DeviceSize, StructureType, getExecutionGraphPipelineScratchSizeAMDX

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkDispatchGraphInfoAMDX - Structure specifying node parameters for execution graph dispatch

Description

Whether payloads is consumed as a device or host pointer is defined by the command this structure is used in.

Valid Usage

See Also

VK_AMDX_shader_enqueue, DeviceOrHostAddressConstAMDX, DispatchGraphCountInfoAMDX

Constructors

Instances3Show, ToCStruct, Zero

VkDispatchGraphCountInfoAMDX - Structure specifying count parameters for execution graph dispatch

Description

Whether infos is consumed as a device or host pointer is defined by the command this structure is used in.

See Also

VK_AMDX_shader_enqueue, DeviceOrHostAddressConstAMDX, cmdDispatchGraphAMDX, cmdDispatchGraphIndirectAMDX, cmdDispatchGraphIndirectCountAMDX

Constructors

Instances3Show, ToCStruct, Zero

VkPipelineLibraryCreateInfoKHR - Structure specifying pipeline libraries to use when creating a pipeline

Valid Usage

Valid Usage (Implicit)

  • If libraryCount is not 0, pLibraries must be a valid pointer to an array of libraryCount valid Pipeline handles

Structure Chaining

Extends the structure

See Also

VK_KHR_pipeline_library, ExecutionGraphPipelineCreateInfoAMDX, Pipeline, RayTracingPipelineCreateInfoKHR, StructureType

Constructors

Instances4Show, FromCStruct, ToCStruct, Zero