// Copyright (c) 2019-2021 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_EXT_vertex_input_dynamic_state.txt[]

=== Other Extension Metadata

*Last Modified Date*::
    2020-08-21
*IP Status*::
    No known IP claims.
*Contributors*::
  - Jeff Bolz, NVIDIA
  - Spencer Fricke, Samsung
  - Stu Smith, AMD

=== Description

One of the states that contributes to the combinatorial explosion of
pipeline state objects that need to be created, is the vertex input binding
and attribute descriptions.
By allowing them to be dynamic applications may reduce the number of
pipeline objects they need to create.

This extension adds dynamic state support for what is normally static state
in slink:VkPipelineVertexInputStateCreateInfo.

include::{generated}/interfaces/VK_EXT_vertex_input_dynamic_state.txt[]

=== Version History

 * Revision 2, 2020-11-05 (Piers Daniell)
   - Make slink:VkVertexInputBindingDescription2EXT extensible
   - Add new slink:VkVertexInputAttributeDescription2EXT struct for the
     pname:pVertexAttributeDescriptions parameter to
     flink:vkCmdSetVertexInputEXT so it is also extensible

 * Revision 1, 2020-08-21 (Piers Daniell)
   - Internal revisions
