[[VK_NV_viewport_array2]]
== VK_NV_viewport_array2
*Name String*::
    VK_NV_viewport_array2
*Extension Type*::
    Device extension
*Registered Extension Number*::
    97
*Status*::
    Complete
*Last Modified Data*::
    2017-02-15
*Revision*::
    1
*Dependencies*::
    - This extension is written against version 1.0 of the Vulkan API.
    - This extension requires Vulkan 1.0.
    - This extension requires the
      https://www.khronos.org/registry/spir-v/extensions/NV/SPV_NV_viewport_array2.html[+SPV_NV_viewport_array2+]
      SPIR-V extension.
    - This extension requires the
      https://www.opengl.org/registry/specs/NV/viewport_array2.txt[+GL_NV_viewport_array2+]
      extension for GLSL source languages.
    - This extension requires the pname:geometryShader and
      pname:multiViewport features.
    - This extension interacts with the pname:tessellationShader feature.
*Contributors*::
    - Piers Daniell, NVIDIA
    - Jeff Bolz, NVIDIA
*Contact*::
    - Daniel Koch (dkoch 'at' nvidia.com)
*Overview*::
+
--
This extension adds support for the following SPIR-V extension in Vulkan:

* SPV_NV_viewport_array2

which allows a single primitive to be broadcast to multiple viewports and/or
multiple layers.
A new shader built-in output code:ViewportMaskNV is provided, which allows a
single primitive to be output to multiple viewports simultaneously.
Also, a new SPIR-V decoration is added to control whether the effective
viewport index is added into the variable decorated with the *Layer*
built-in decoration.
These capabilities allow a single primitive to be output to multiple layers
simultaneously.

This extension allows variables decorated with the code:Layer and
code:ViewportIndex built-ins to be exported from vertex or tessellation
shaders, using the code:ShaderViewportIndexLayerNV capability.

This extension adds a new code:ViewportMaskNV built-in decoration that is
available for output variables in vertex, tessellation evaluation, and
geometry shaders, and a new code:ViewportRelativeNV decoration that can be
added on variables decorated with code:Layer when using the
code:ShaderViewportMaskNV capability.

When using GLSL source-based shading languages, the code:gl_ViewportMask[]
built-in output variable and code:viewport_relative layout qualifier from
+GL_NV_viewport_array2+ map to the code:ViewportMaskNV and
code:ViewportRelativeNV decorations, respectively.
Behaviour is described in the GL_NV_viewport_array2 extension
specificiation.
--

=== New Object Types
None.

=== New Enum Constants
None.

=== New Enums
None.

=== New Structures
None.

=== New Functions
None.

=== New or Modified Built-In Variables

  * (modified) <<interfaces-builtin-variables-layer,code:Layer>>
  * (modified)
    <<interfaces-builtin-variables-viewportindex,code:ViewportIndex>>
  * <<interfaces-builtin-variables-viewportmask,code:ViewportMaskNV>>

=== New Variable Decoration

  * <<interfaces-builtin-variables-layer,code:ViewportRelativeNV in
    code:Layer>>

=== New SPIR-V Capabilities

  * <<spirvenv-capabilities-table-viewportarray2,code:ShaderViewportIndexLayerNV>>
  * <<spirvenv-capabilities-table-viewportarray2,code:ShaderViewportMaskNV>>

=== Issues

None yet!

=== Version History
  * Revision 1, 2017-02-15 (Daniel Koch)
    - Internal revisions
