C Specification

typedef struct VkCmdProcessCommandsInfoNVX {
    VkStructureType                      sType;
    const void*                          pNext;
    VkObjectTableNVX                     objectTable;
    VkIndirectCommandsLayoutNVX          indirectCommandsLayout;
    uint32_t                             indirectCommandsTokenCount;
    const VkIndirectCommandsTokenNVX*    pIndirectCommandsTokens;
    uint32_t                             maxSequencesCount;
    VkCommandBuffer                      targetCommandBuffer;
    VkBuffer                             sequencesCountBuffer;
    VkDeviceSize                         sequencesCountOffset;
    VkBuffer                             sequencesIndexBuffer;
    VkDeviceSize                         sequencesIndexOffset;
} VkCmdProcessCommandsInfoNVX;


  • sType is the type of this structure.

  • pNext is NULL or a pointer to an extension-specific structure.

  • objectTable is the VkObjectTableNVX to be used for the generation process. Only registered objects at the time vkCmdReserveSpaceForCommandsNVX is called, will be taken into account for the reservation.

  • indirectCommandsLayout is the VkIndirectCommandsLayoutNVX that provides the command sequence to generate.

  • indirectCommandsTokenCount defines the number of input tokens used.

  • pIndirectCommandsTokens provides an array of VkIndirectCommandsTokenNVX that reference the input data for each token command.

  • maxSequencesCount is the maximum number of sequences for which command buffer space will be reserved. If sequencesCountBuffer is VK_NULL_HANDLE, this is also the actual number of sequences generated.

  • targetCommandBuffer can be the secondary VkCommandBuffer in which the commands should be recorded. If targetCommandBuffer is NULL an implicit reservation as well as execution takes place on the processing VkCommandBuffer.

  • sequencesCountBuffer can be VkBuffer from which the actual amount of sequences is sourced from as uint32_t value.

  • sequencesCountOffset is the byte offset into sequencesCountBuffer where the count value is stored.

  • sequencesIndexBuffer must be set if indirectCommandsLayout’s VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX is set and provides the used sequence indices as uint32_t array. Otherwise it must be VK_NULL_HANDLE.

  • sequencesIndexOffset is the byte offset into sequencesIndexBuffer where the index values start.


Valid Usage
  • The provided objectTable must include all objects referenced by the generation process

  • indirectCommandsTokenCount must match the indirectCommandsLayout’s tokenCount

  • The tokenType member of each entry in the pIndirectCommandsTokens array must match the values used at creation time of indirectCommandsLayout

  • If targetCommandBuffer is provided, it must have reserved command space

  • If targetCommandBuffer is provided, the objectTable must match the reservation’s objectTable and must have had all referenced objects registered at reservation time

  • If targetCommandBuffer is provided, the indirectCommandsLayout must match the reservation’s indirectCommandsLayout

  • If targetCommandBuffer is provided, the maxSequencesCount must not exceed the reservation’s maxSequencesCount

  • If sequencesCountBuffer is used, its usage flag must have the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set

  • If sequencesCountBuffer is used, sequencesCountOffset must be aligned to VkDeviceGeneratedCommandsLimitsNVX::minSequenceCountBufferOffsetAlignment

  • If sequencesIndexBuffer is used, its usage flag must have the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set

  • If sequencesIndexBuffer is used, sequencesIndexOffset must be aligned to VkDeviceGeneratedCommandsLimitsNVX::minSequenceIndexBufferOffsetAlignment

Valid Usage (Implicit)

  • pNext must be NULL

  • objectTable must be a valid VkObjectTableNVX handle

  • indirectCommandsLayout must be a valid VkIndirectCommandsLayoutNVX handle

  • pIndirectCommandsTokens must be a valid pointer to an array of indirectCommandsTokenCount valid VkIndirectCommandsTokenNVX structures

  • If targetCommandBuffer is not NULL, targetCommandBuffer must be a valid VkCommandBuffer handle

  • If sequencesCountBuffer is not VK_NULL_HANDLE, sequencesCountBuffer must be a valid VkBuffer handle

  • If sequencesIndexBuffer is not VK_NULL_HANDLE, sequencesIndexBuffer must be a valid VkBuffer handle

  • indirectCommandsTokenCount must be greater than 0

  • Each of indirectCommandsLayout, objectTable, sequencesCountBuffer, sequencesIndexBuffer, and targetCommandBuffer that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice

Host Synchronization
  • Host access to objectTable must be externally synchronized

  • Host access to targetCommandBuffer must be externally synchronized

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 (c) 2014-2020 Khronos Group. This work is licensed under a Creative Commons Attribution 4.0 International License.