Vulkan-Docs/doc/specs/vulkan/appendices/VK_KHR_shader_draw_parameters.txt
Jon Leech dbfd1b68c4 Change log for July 13, 2017 Vulkan 1.0.54 spec update:
* Bump API patch number and header version number to 54 for this update.

Github Issues:

Internal Issues:

  * Fix tessellation domain to have an upper-left origin in the
    <<img-tessellation-topology-ul, tessellation toplogy image>> and related
    language. CTS and all implementations were already doing this, it was
    just a documentation bug that it was flipped to lower-left (internal
    issue 603).
  * Add a section to the style guide describing how VUID tags are changed
    and removed when the corresponding Valid Usage statements are modified
    (internal issue 829).
  * Add explicit Valid Usage statement to
    slink:VkPipelineDynamicStateCreateInfo to require that members of
    pname:pDynamicStates must be unique (internal issue 851).

New Extensions:

  * `VK_KHR_16bit_storage`
  * `VK_KHR_dedicated_allocation`
  * `VK_KHR_external_fence`
  * `VK_KHR_external_fence_capabilities`
  * `VK_KHR_external_fence_fd`
  * `VK_KHR_external_fence_win32`
  * `VK_KHR_get_memory_requirements2`
  * `VK_KHR_storage_buffer_storage_class`
  * `VK_KHR_variable_pointers`

Extensions Promoted From KHX To KHR Status:

  * `VK_KHR_external_memory`
  * `VK_KHR_external_memory_capabilities`
  * `VK_KHR_external_memory_fd`
  * `VK_KHR_external_memory_win32`
  * `VK_KHR_external_semaphore`
  * `VK_KHR_external_semaphore_capabilities`
  * `VK_KHR_external_semaphore_fd`
  * `VK_KHR_external_semaphore_win32`
  * `VK_KHR_win32_keyed_mutex`
2017-07-11 17:57:41 -07:00

115 lines
3.1 KiB
Plaintext

// Copyright (c) 2016-2017 Khronos Group. This work is licensed under a
// Creative Commons Attribution 4.0 International License; see
// http://creativecommons.org/licenses/by/4.0/
[[VK_KHR_shader_draw_parameters]]
== VK_KHR_shader_draw_parameters
*Name String*::
+VK_KHR_shader_draw_parameters+
*Extension Type*::
Device extension
*Registered Extension Number*::
64
*Status*::
Complete
*Last Modified Data*::
2016-10-05
*Revision*::
1
*IP Status*::
No known IP claims.
*Dependencies*::
- This extension is written against version 1.0 of the Vulkan API.
- Requires Vulkan 1.0.
- Requires the +SPV_KHR_shader_draw_parameters+ SPIR-V extension.
- Requires +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
*Contact*::
- Daniel Koch (dkoch 'at' nvidia.com)
*Overview*::
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 firstInstance parameter passed to
draw commands,
* code:BaseVertex, which contains the firstVertex/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
* <<interfaces-builtin-variables-baseinstance,code:BaseInstance>>
* <<interfaces-builtin-variables-basevertex,code:BaseVertex>>
* <<interfaces-builtin-variables-drawindex,code:DrawIndex>>
=== New SPIR-V Capabilities
* <<spirvenv-capabilities-table-drawparameters,DrawParameters>>
=== 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 baseVertex parameter, the value of
code:gl_BaseVertexARB is zero.
This means that code:gl_BaseVertexARB = baseVertex (for code:glDrawElements
commands with baseVertex) or 0.
In particular there are no code:glDrawArrays commands that take a baseVertex
parameter.
Now in Vulkan, we have *BaseVertex* = _vertexOffset_ (for indexed drawing
commands) or _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