C Specification

The VkGeneratedCommandsInfoEXT is defined as:

// Provided by VK_EXT_device_generated_commands
typedef struct VkGeneratedCommandsInfoEXT {
    VkStructureType                sType;
    const void*                    pNext;
    VkShaderStageFlags             shaderStages;
    VkIndirectExecutionSetEXT      indirectExecutionSet;
    VkIndirectCommandsLayoutEXT    indirectCommandsLayout;
    VkDeviceAddress                indirectAddress;
    VkDeviceSize                   indirectAddressSize;
    VkDeviceAddress                preprocessAddress;
    VkDeviceSize                   preprocessSize;
    uint32_t                       maxSequenceCount;
    VkDeviceAddress                sequenceCountAddress;
    uint32_t                       maxDrawCount;
} VkGeneratedCommandsInfoEXT;

Members

  • sType is a VkStructureType value identifying this structure.

  • pNext is NULL or a pointer to a structure extending this structure.

  • shaderStages is the mask of shader stages used by the commands.

  • indirectExecutionSet is the indirect execution set to be used for binding shaders.

  • indirectCommandsLayout is the VkIndirectCommandsLayoutEXT that specifies the command sequence data.

  • indirectAddress is an address that holds the indirect buffer data.

  • indirectAddressSize is the size in bytes of indirect buffer data starting at indirectAddress.

  • preprocessAddress specifies a physical address of the VkBuffer used for preprocessing the input data for execution. If this structure is used with vkCmdExecuteGeneratedCommandsEXT with its isPreprocessed set to VK_TRUE, then the preprocessing step is skipped but data in this address may still be modified. The contents and the layout of this address are opaque to applications and must not be modified outside functions related to device-generated commands or copied to another buffer for reuse.

  • preprocessSize is the maximum byte size within preprocessAddress that is available for preprocessing.

  • maxSequenceCount is used to determine the number of sequences to execute.

  • sequenceCountAddress specifies an optional physical address of a single uint32_t value containing the requested number of sequences to execute.

  • maxDrawCount is the maximum number of indirect draws that can be executed by any COUNT-type multi-draw indirect tokens. The draw count in the indirect buffer is clamped to this value for these token types.

Description

If sequenceCountAddress is not NULL, then maxSequenceCount is the maximum number of sequences that can be executed. The actual number is min(maxSequenceCount, *sequenceCountAddress). If sequenceCountAddress is NULL, then maxSequenceCount is the exact number of sequences to execute.

If the action command token for the layout is not a COUNT-type multi-draw indirect token, maxDrawCount is ignored.

Valid Usage
  • VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11063
    If vkGetGeneratedCommandsMemoryRequirementsEXT returns a non-zero size, preprocessAddress must not be NULL

  • VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11064
    VkDeviceMemory objects bound to the underlying buffer for preprocessAddress must have been allocated using one of the memory types allowed in the memoryTypeBits member of the VkMemoryRequirements structure returned by vkGetGeneratedCommandsMemoryRequirementsEXT

  • VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11065
    If the indirectCommandsLayout uses a token of VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT, then the indirectExecutionSet’s push constant layout must contain the updateRange specified in VkIndirectCommandsPushConstantTokenEXT

  • VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11066
    If the indirectCommandsLayout uses a token of VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT, then the indirectExecutionSet’s push constant layout must contain the updateRange specified in VkIndirectCommandsPushConstantTokenEXT

  • VUID-VkGeneratedCommandsInfoEXT-maxSequenceCount-11067
    maxSequenceCount must be less or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectSequenceCount and VkGeneratedCommandsMemoryRequirementsInfoEXT::maxSequenceCount that was used to determine the preprocessSize

  • VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11068
    If sequenceCountAddress is not NULL, the value contained in the address must be less or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectSequenceCount and VkGeneratedCommandsMemoryRequirementsInfoEXT::maxSequenceCount that was used to determine the preprocessSize

  • VUID-VkGeneratedCommandsInfoEXT-maxSequenceCount-10246
    maxSequenceCount must not be zero

  • VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11069
    The underlying buffer for preprocessAddress must have the VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT bit set in its usage flag

  • VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11070
    If the underlying buffer for preprocessAddress is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object

  • VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11144
    If the indirectCommandsLayout contains a VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, then the descriptor and push constant layout info provided either by pipelineLayout or through a VkPipelineLayoutCreateInfo in pNext of the VkIndirectCommandsLayoutCreateInfoEXT used to create indirectCommandsLayout must be compatible with the descriptor and push constant layout info used by indirectExecutionSet

  • VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11002
    If indirectCommandsLayout was created with a token sequence that contained the VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, the shader stages used to create the initial shader state of indirectExecutionSet must equal the VkIndirectCommandsExecutionSetTokenEXT::shaderStages used to create indirectCommandsLayout

  • VUID-VkGeneratedCommandsInfoEXT-preprocessSize-11071
    preprocessSize must be greater than or equal to the memory requirement’s size returned by vkGetGeneratedCommandsMemoryRequirementsEXT using the matching inputs (indirectCommandsLayout, …​) as within this structure

  • VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11072
    The underlying buffer for sequenceCountAddress must have the VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR bit set in its usage flag

  • VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11073
    If sequenceCountAddress is not NULL, sequenceCountAddress must be aligned to 4

  • VUID-VkGeneratedCommandsInfoEXT-indirectAddress-11074
    indirectAddress must be aligned to 4

  • VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11075
    If the underlying buffer for sequenceCountAddress is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object

  • VUID-VkGeneratedCommandsInfoEXT-indirectAddress-11076
    indirectAddress must not be NULL

  • VUID-VkGeneratedCommandsInfoEXT-indirectAddressSize-11077
    indirectAddressSize must be greater than zero

  • VUID-VkGeneratedCommandsInfoEXT-maxDrawCount-11078
    When not ignored, maxDrawCount × maxSequenceCount must be less than 2^24

  • VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11079
    If indirectCommandsLayout was created using a VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT token and shader objects are not bound then the bound graphics pipeline must have been created with VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE in pDynamicStates

  • VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11083
    If the token sequence of the passed indirectCommandsLayout contains a VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, the indirectExecutionSet must not be VK_NULL_HANDLE

  • VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-10241
    If the token sequence of the passed indirectCommandsLayout does not contains a VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, the indirectExecutionSet must be VK_NULL_HANDLE

  • VUID-VkGeneratedCommandsInfoEXT-indirectExecutionSet-11080
    If indirectExecutionSet is VK_NULL_HANDLE, a VkGeneratedCommandsPipelineInfoEXT or VkGeneratedCommandsShaderInfoEXT must be included in the pNext chain

Valid Usage (Implicit)
  • VUID-VkGeneratedCommandsInfoEXT-sType-sType
    sType must be VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT

  • VUID-VkGeneratedCommandsInfoEXT-shaderStages-parameter
    shaderStages must be a valid combination of VkShaderStageFlagBits values

  • VUID-VkGeneratedCommandsInfoEXT-shaderStages-requiredbitmask
    shaderStages must not be 0

  • VUID-VkGeneratedCommandsInfoEXT-indirectExecutionSet-parameter
    If indirectExecutionSet is not VK_NULL_HANDLE, indirectExecutionSet must be a valid VkIndirectExecutionSetEXT handle

  • VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-parameter
    indirectCommandsLayout must be a valid VkIndirectCommandsLayoutEXT handle

  • VUID-VkGeneratedCommandsInfoEXT-commonparent
    Both of indirectCommandsLayout, and indirectExecutionSet that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice

See Also

Document Notes

For more information, see the Vulkan Specification

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

Copyright 2014-2025 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0