| // Copyright 2017-2021 The Khronos Group Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_EXT_vertex_attribute_divisor.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2018-08-03 |
| *IP Status*:: |
| No known IP claims. |
| *Contributors*:: |
| - Vikram Kushwaha, NVIDIA |
| - Jason Ekstrand, Intel |
| |
| === Description |
| |
| This extension allows instance-rate vertex attributes to be repeated for |
| certain number of instances instead of advancing for every instance when |
| instanced rendering is enabled. |
| |
| include::{generated}/interfaces/VK_EXT_vertex_attribute_divisor.txt[] |
| |
| === Issues |
| |
| 1) What is the effect of a non-zero value for pname:firstInstance? |
| |
| *RESOLVED*: The Vulkan API should follow the OpenGL convention and offset |
| attribute fetching by pname:firstInstance while computing vertex attribute |
| offsets. |
| |
| 2) Should zero be an allowed divisor? |
| |
| *RESOLVED*: Yes. |
| A zero divisor means the vertex attribute is repeated for all instances. |
| |
| |
| === Examples |
| |
| To create a vertex binding such that the first binding uses instanced |
| rendering and the same attribute is used for every 4 draw instances, an |
| application could use the following set of structures: |
| |
| |
| [source,c++] |
| ---------------------------------------- |
| |
| const VkVertexInputBindingDivisorDescriptionEXT divisorDesc = |
| { |
| 0, |
| 4 |
| }; |
| |
| const VkPipelineVertexInputDivisorStateCreateInfoEXT divisorInfo = |
| { |
| VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT, // sType |
| NULL, // pNext |
| 1, // vertexBindingDivisorCount |
| &divisorDesc // pVertexBindingDivisors |
| } |
| |
| const VkVertexInputBindingDescription binding = |
| { |
| 0, // binding |
| sizeof(Vertex), // stride |
| VK_VERTEX_INPUT_RATE_INSTANCE // inputRate |
| }; |
| |
| const VkPipelineVertexInputStateCreateInfo viInfo = |
| { |
| VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO, // sType |
| &divisorInfo, // pNext |
| ... |
| }; |
| //... |
| ---------------------------------------- |
| |
| === Version History |
| |
| * Revision 1, 2017-12-04 (Vikram Kushwaha) |
| - First Version |
| * Revision 2, 2018-07-16 (Jason Ekstrand) |
| - Adjust the interaction between pname:divisor and pname:firstInstance |
| to match the OpenGL convention. |
| - Disallow divisors of zero. |
| * Revision 3, 2018-08-03 (Vikram Kushwaha) |
| - Allow a zero divisor. |
| - Add a physical device features structure to query/enable this feature. |