// Copyright (c) 2017-2020 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0

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

=== Other Extension Metadata

*Last Modified Date*::
    2017-02-15
*Interactions and External Dependencies*::
  - This extension requires
    {spirv}/NV/SPV_NV_viewport_array2.html[`SPV_NV_viewport_array2`]
  - This extension provides API support for
    https://www.khronos.org/registry/OpenGL/extensions/NV/NV_viewport_array2.txt[`GL_NV_viewport_array2`]
  - 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

=== Description

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 code: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.

ifdef::VK_EXT_shader_viewport_index_layer[]
[NOTE]
.Note
====
The code:ShaderViewportIndexLayerNV capability is equivalent to the
code:ShaderViewportIndexLayerEXT capability added by
`apiext:VK_EXT_shader_viewport_index_layer`.
====
endif::VK_EXT_shader_viewport_index_layer[]

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

=== 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-ShaderViewportIndexLayerNV,code:ShaderViewportIndexLayerNV>>
  * <<spirvenv-capabilities-table-ShaderViewportMaskNV,code:ShaderViewportMaskNV>>

=== Version History

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