// Copyright 2017-2021 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

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

=== Other Extension Metadata

*Last Modified Date*::
    2017-08-08
*Interactions and External Dependencies*::
  - Promoted to Vulkan 1.2 Core
  - This extension requires
    {spirv}/EXT/SPV_EXT_shader_viewport_index_layer.html[`SPV_EXT_shader_viewport_index_layer`]
  - This extension provides API support for
    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_viewport_layer_array.txt[`GL_ARB_shader_viewport_layer_array`],
    https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_vertex_shader_layer.txt[`GL_AMD_vertex_shader_layer`],
    https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_vertex_shader_viewport_index.txt[`GL_AMD_vertex_shader_viewport_index`],
    and
    https://www.khronos.org/registry/OpenGL/extensions/NV/NV_viewport_array2.txt[`GL_NV_viewport_array2`]
  - This extension requires the pname:multiViewport feature.
  - This extension interacts with the pname:tessellationShader feature.
*Contributors*::
  - Piers Daniell, NVIDIA
  - Jeff Bolz, NVIDIA
  - Jan-Harald Fredriksen, ARM
  - Daniel Rakos, AMD
  - Slawomir Grajeswki, Intel

=== Description

This extension adds support for the code:ShaderViewportIndexLayerEXT
capability from the `SPV_EXT_shader_viewport_index_layer` extension in
Vulkan.

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:ShaderViewportIndexLayerEXT capability.

When using GLSL source-based shading languages, the code:gl_ViewportIndex
and code:gl_Layer built-in variables map to the SPIR-V code:ViewportIndex
and code:Layer built-in decorations, respectively.
Behaviour of these variables is extended as described in the
`GL_ARB_shader_viewport_layer_array` (or the precursor
`GL_AMD_vertex_shader_layer`, `GL_AMD_vertex_shader_viewport_index`, and
`GL_NV_viewport_array2` extensions).

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

=== Promotion to Vulkan 1.2

All functionality in this extension is included in core Vulkan 1.2.

The single code:ShaderViewportIndexLayerEXT capability from the
`SPV_EXT_shader_viewport_index_layer` extension is replaced by the
<<spirvenv-capabilities-table-ShaderViewportIndex,code:ShaderViewportIndex>>
and <<spirvenv-capabilities-table-ShaderLayer,code:ShaderLayer>>
capabilities from SPIR-V 1.5 which are enabled by the
<<features-shaderOutputViewportIndex,shaderOutputViewportIndex>> and
<<features-shaderOutputLayer,shaderOutputLayer>> features, respectively.
Additionally, if Vulkan 1.2 is supported but this extension is not, these
capabilities are optional.

Enabling both features is equivalent to enabling the
`VK_EXT_shader_viewport_index_layer` extension.

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

=== New or Modified Built-In Variables

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

=== New SPIR-V Capabilities

  * <<spirvenv-capabilities-table-ShaderViewportIndexLayerEXT,code:ShaderViewportIndexLayerEXT>>

=== Version History

  * Revision 1, 2017-08-08 (Daniel Koch)
    - Internal drafts
