# VkIndirectCommandsLayoutTokenNV(3) Manual Page

## Name

VkIndirectCommandsLayoutTokenNV - Struct specifying the details of an indirect command layout token

## C Specification

The `VkIndirectCommandsLayoutTokenNV` structure specifies details to the function arguments that need to be known at layout creation time:

    typedef struct VkIndirectCommandsLayoutTokenNV {
        VkStructureType                  sType;
        const void*                      pNext;
        VkIndirectCommandsTokenTypeNV    tokenType;
        uint32_t                         stream;
        uint32_t                         offset;
        uint32_t                         vertexBindingUnit;
        VkBool32                         vertexDynamicStride;
        VkPipelineLayout                 pushconstantPipelineLayout;
        VkShaderStageFlags               pushconstantShaderStageFlags;
        uint32_t                         pushconstantOffset;
        uint32_t                         pushconstantSize;
        VkIndirectStateFlagsNV           indirectStateFlags;
        uint32_t                         indexTypeCount;
        const VkIndexType*               pIndexTypes;
        const uint32_t*                  pIndexTypeValues;
    } VkIndirectCommandsLayoutTokenNV;

## Members

- `sType` is the type of this structure.

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

- `tokenType` specifies the token command type.

- `stream` is the index of the input stream that contains the token argument data.

- `offset` is a relative starting offset within the input stream memory for the token argument data.

- `vertexBindingUnit` is used for the vertex buffer binding command.

- `vertexDynamicStride` sets if the vertex buffer stride is provided by the binding command rather than the current bound graphics pipeline state.

- `pushconstantPipelineLayout` is the `VkPipelineLayout` used for the push constant command.

- `pushconstantShaderStageFlags` are the shader stage flags used for the push constant command.

- `pushconstantOffset` is the offset used for the push constant command.

- `pushconstantSize` is the size used for the push constant command.

- `indirectStateFlags` are the active states for the state flag command.

- `indexTypeCount` is the optional size of the `pIndexTypes` and `pIndexTypeValues` array pairings. If not zero, it allows to register a custom `uint32_t` value to be treated as specific `VkIndexType`.

- `pIndexTypes` is the used `VkIndexType` for the corresponding `uint32_t` value entry in pname::pIndexTypeValues.

## Description

Valid Usage

- `stream` must be smaller than `VkIndirectCommandsLayoutCreateInfoNV`::`streamCount`.

- `offset` must be less than or equal to `VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV`::`maxIndirectCommandsTokenOffset`.

- `vertexBindingUnit` must stay within device supported limits for the appropriate commands.

- `pushconstantOffset` must stay within device supported limits for the appropriate commands.

- `pushconstantSize` must stay within device supported limits for the appropriate commands.

- `indirectStateFlags` must not be ´0´.

Valid Usage (Implicit)

- `sType` must be `VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV`

- `pNext` must be `NULL`

- `tokenType` must be a valid VkIndirectCommandsTokenTypeNV value

- If `pushconstantPipelineLayout` is not VK_NULL_HANDLE, `pushconstantPipelineLayout` must be a valid VkPipelineLayout handle

- `pushconstantShaderStageFlags` must be a valid combination of VkShaderStageFlagBits values

- `indirectStateFlags` must be a valid combination of VkIndirectStateFlagBitsNV values

- If `indexTypeCount` is not `0`, `pIndexTypes` must be a valid pointer to an array of `indexTypeCount` valid VkIndexType values

- If `indexTypeCount` is not `0`, `pIndexTypeValues` must be a valid pointer to an array of `indexTypeCount` `uint32_t` values

## See Also

`VkBool32`, VkIndexType, VkIndirectCommandsLayoutCreateInfoNV, VkIndirectCommandsTokenTypeNV, VkIndirectStateFlagsNV, VkPipelineLayout, VkShaderStageFlags, VkStructureType

## 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

Copyright (c) 2014-2020 Khronos Group. This work is licensed under a Creative Commons Attribution 4.0 International License.