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

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

=== Other Extension Metadata

*Last Modified Date*::
    2018-07-19
*Interactions and External Dependencies*::
  - This extension requires
    {spirv}/NV/SPV_NV_mesh_shader.html[`SPV_NV_mesh_shader`]
  - This extension provides API support for
    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_mesh_shader.txt[`GLSL_NV_mesh_shader`]
*Contributors*::
  - Pat Brown, NVIDIA
  - Jeff Bolz, NVIDIA
  - Daniel Koch, NVIDIA
  - Piers Daniell, NVIDIA
  - Pierre Boudier, NVIDIA

=== Description

This extension provides a new mechanism allowing applications to generate
collections of geometric primitives via programmable mesh shading.
It is an alternative to the existing programmable primitive shading
pipeline, which relied on generating input primitives by a fixed function
assembler as well as fixed function vertex fetch.

There are new programmable shader types -- the task and mesh shader -- to
generate these collections to be processed by fixed-function primitive
assembly and rasterization logic.
When task and mesh shaders are dispatched, they replace the core
<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization stages>>,
including vertex array attribute fetching, vertex shader processing,
tessellation, and geometry shader processing.

This extension also adds support for the following SPIR-V extension in
Vulkan:

  * {spirv}/NV/SPV_NV_mesh_shader.html[`SPV_NV_mesh_shader`]

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

=== New or Modified Built-In Variables

  * <<interfaces-builtin-variables-taskcount,TaskCountNV>>
  * <<interfaces-builtin-variables-primitivecount,PrimitiveCountNV>>
  * <<interfaces-builtin-variables-primitiveindices,PrimitiveIndicesNV>>
  * <<interfaces-builtin-variables-clipdistancepv,ClipDistancePerViewNV>>
  * <<interfaces-builtin-variables-culldistancepv,CullDistancePerViewNV>>
  * <<interfaces-builtin-variables-layerpv,LayerPerViewNV>>
  * <<interfaces-builtin-variables-meshviewcount,MeshViewCountNV>>
  * <<interfaces-builtin-variables-meshviewindices,MeshViewIndicesNV>>
  * (modified)code:Position
  * (modified)code:PointSize
  * (modified)code:ClipDistance
  * (modified)code:CullDistance
  * (modified)code:PrimitiveId
  * (modified)code:Layer
  * (modified)code:ViewportIndex
  * (modified)code:WorkgroupSize
  * (modified)code:WorkgroupId
  * (modified)code:LocalInvocationId
  * (modified)code:GlobalInvocationId
  * (modified)code:LocalInvocationIndex
  * (modified)code:DrawIndex
  * (modified)code:ViewportMaskNV
  * (modified)code:PositionPerViewNV
  * (modified)code:ViewportMaskPerViewNV

=== New SPIR-V Capability

  * <<spirvenv-capabilities-table-MeshShadingNV,MeshShadingNV>>

=== Issues

. How to name this extension?
+
--
*RESOLVED*: VK_NV_mesh_shader

Other options considered:

  * VK_NV_mesh_shading
  * VK_NV_programmable_mesh_shading
  * VK_NV_primitive_group_shading
  * VK_NV_grouped_drawing
--

. Do we need a new VkPrimitiveTopology?
+
--
*RESOLVED*: No.
We skip the InputAssembler stage.
--

. Should we allow Instancing?
+
--
*RESOLVED*: No.
There is no fixed function input, other than the IDs.
However, allow offsetting with a "`first`" value.
--

. Should we use existing vkCmdDraw or introduce new functions?
+
--
*RESOLVED*: Introduce new functions.

New functions make it easier to separate from "`programmable primitive
shading`" chapter, less "`dual use`" language about existing functions
having alternative behavior.
The text around the existing "`draws`" is heavily based around emitting
vertices.
--

. If new functions, how to name?
+
--
*RESOLVED*: CmdDrawMeshTasks*

Other options considered:

  * CmdDrawMeshed
  * CmdDrawTasked
  * CmdDrawGrouped
--

. Should VK_SHADER_STAGE_ALL_GRAPHICS be updated to include the new stages?
+
--
*RESOLVED*: No.
If an application were to be recompiled with headers that include additional
shader stage bits in VK_SHADER_STAGE_ALL_GRAPHICS, then the previously valid
application would no longer be valid on implementations that do not support
mesh or task shaders.
This means the change would not be backwards compatible.
It is too bad VkShaderStageFlagBits does not have a dedicated "`all
supported graphics stages`" bit like VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
which would have avoided this problem.
--

=== Version History

  * Revision 1, 2018-07-19 (Christoph Kubisch, Daniel Koch)
    - Internal revisions
