// Copyright (c) 2016-2018 Khronos Group. This work is licensed under a // Creative Commons Attribution 4.0 International License; see // http://creativecommons.org/licenses/by/4.0/ include::meta/VK_KHR_shader_draw_parameters.txt[] *Last Modified Date*:: 2016-10-05 *IP Status*:: No known IP claims. *Interactions and External Dependencies*:: - Requires the https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_shader_draw_parameters.html[+SPV_KHR_shader_draw_parameters+] SPIR-V extension. - Requires https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_draw_parameters.txt[+GL_ARB_shader_draw_parameters+] for GLSL source languages. *Contributors*:: - Daniel Koch, NVIDIA Corporation - Jeff Bolz, NVIDIA - Daniel Rakos, AMD - Jan-Harald Fredriksen, ARM - John Kessenich, Google - Stuart Smith, IMG This extension adds support for the following SPIR-V extension in Vulkan: * +SPV_KHR_shader_draw_parameters+ The extension provides access to three additional built-in shader variables in Vulkan: * code:BaseInstance, which contains the pname:firstInstance parameter passed to draw commands, * code:BaseVertex, which contains the pname:firstVertex/pname:vertexOffset parameter passed to draw commands, and * code:DrawIndex, which contains the index of the draw call currently being processed from an indirect draw call. When using GLSL source-based shader languages, the following variables from +GL_ARB_shader_draw_parameters+ can map to these SPIR-V built-in decorations: * `in int gl_BaseInstanceARB;` -> code:BaseInstance, * `in int gl_BaseVertexARB;` -> code:BaseVertex, and * `in int gl_DrawIDARB;` -> code:DrawIndex. === New Object Types None. === New Enum Constants None. === New Enums None. === New Structures None. === New Functions None. === New Built-In Variables * <> * <> * <> === New SPIR-V Capabilities * <> === Issues 1) Is this the same functionality as +GL_ARB_shader_draw_parameters+? *RESOLVED*: It's actually a superset as it also adds in support for arrayed drawing commands. In GL for +GL_ARB_shader_draw_parameters+, code:gl_BaseVertexARB holds the integer value passed to the parameter to the command that resulted in the current shader invocation. In the case where the command has no code:baseVertex parameter, the value of code:gl_BaseVertexARB is zero. This means that code:gl_BaseVertexARB = code:baseVertex (for code:glDrawElements commands with code:baseVertex) or 0. In particular there are no code:glDrawArrays commands that take a code:baseVertex parameter. Now in Vulkan, we have code:BaseVertex = pname:vertexOffset (for indexed drawing commands) or pname:firstVertex (for arrayed drawing commands), and so Vulkan's version is really a superset of GL functionality. === Version History * Revision 1, 2016-10-05 (Daniel Koch) - Internal revisions