VkIndirectCommandsLayoutTokenNV(3)

# VkIndirectCommandsLayoutTokenNV(3) Manual Page

## Name

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

Loading… please wait.

## C Specification

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

    // Provided by VK_NV_device_generated_commands
    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 a structure extending this structure.

- `tokenType` specifies the token command type.

- `stream` is the index of the input stream containing 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 `pIndexTypeValues`.

## Description

Valid Usage

- VUID-VkIndirectCommandsLayoutTokenNV-stream-02951
  `stream` must be smaller than `VkIndirectCommandsLayoutCreateInfoNV`::`streamCount`

- VUID-VkIndirectCommandsLayoutTokenNV-offset-02952
  `offset` must be less than or equal to `VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV`::`maxIndirectCommandsTokenOffset`

- VUID-VkIndirectCommandsLayoutTokenNV-offset-06888
  `offset` must be aligned to the scalar alignment of `tokenType` or `minIndirectCommandsBufferOffsetAlignment`, whichever is lower

- VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02976
  If `tokenType` is `VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV`, `vertexBindingUnit` must stay within device supported limits for the appropriate commands

- VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02977
  If `tokenType` is `VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV`, `pushconstantPipelineLayout` must be valid

- VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02978
  If `tokenType` is `VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV`, `pushconstantOffset` must be a multiple of `4`

- VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02979
  If `tokenType` is `VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV`, `pushconstantSize` must be a multiple of `4`

- VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02980
  If `tokenType` is `VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV`, `pushconstantOffset` must be less than `VkPhysicalDeviceLimits`::`maxPushConstantsSize`

- VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02981
  If `tokenType` is `VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV`, `pushconstantSize` must be less than or equal to `VkPhysicalDeviceLimits`::`maxPushConstantsSize` minus `pushconstantOffset`

- VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02982
  If `tokenType` is `VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV`, for each byte in the range specified by `pushconstantOffset` and `pushconstantSize` and for each shader stage in `pushconstantShaderStageFlags`, there must be a push constant range in `pushconstantPipelineLayout` that includes that byte and that stage

- VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02983
  If `tokenType` is `VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV`, for each byte in the range specified by `pushconstantOffset` and `pushconstantSize` and for each push constant range that overlaps that byte, `pushconstantShaderStageFlags` must include all stages in that push constant range’s VkPushConstantRange::`stageFlags`

- VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02984
  If `tokenType` is `VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV`, `indirectStateFlags` must not be `0`

Valid Usage (Implicit)

- VUID-VkIndirectCommandsLayoutTokenNV-sType-sType
  `sType` must be `VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV`

- VUID-VkIndirectCommandsLayoutTokenNV-pNext-pNext
  `pNext` must be `NULL`

- VUID-VkIndirectCommandsLayoutTokenNV-tokenType-parameter
  `tokenType` must be a valid VkIndirectCommandsTokenTypeNV value

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

- VUID-VkIndirectCommandsLayoutTokenNV-pushconstantShaderStageFlags-parameter
  `pushconstantShaderStageFlags` must be a valid combination of VkShaderStageFlagBits values

- VUID-VkIndirectCommandsLayoutTokenNV-indirectStateFlags-parameter
  `indirectStateFlags` must be a valid combination of VkIndirectStateFlagBitsNV values

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

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

## See Also

VK_NV_device_generated_commands, `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 2014-2022 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0