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

include::{generated}/meta/{refprefix}VK_NV_compute_shader_derivatives.adoc[]

=== Other Extension Metadata

*Last Modified Date*::
    2018-07-19
*IP Status*::
    No known IP claims.
*Interactions and External Dependencies*::
  - This extension provides API support for
    {GLSLregistry}/nv/GLSL_NV_compute_shader_derivatives.txt[`GL_NV_compute_shader_derivatives`]
*Contributors*::
  - Pat Brown, NVIDIA

=== Description

This extension adds Vulkan support for the
{spirv}/NV/SPV_NV_compute_shader_derivatives.html[`SPV_NV_compute_shader_derivatives`]
SPIR-V extension.

The SPIR-V extension provides two new execution modes, both of which allow
compute shaders to use built-ins that evaluate compute derivatives
explicitly or implicitly.
Derivatives will be computed via differencing over a 2x2 group of shader
invocations.
The code:DerivativeGroupQuadsNV execution mode assembles shader invocations
into 2x2 groups, where each group has x and y coordinates of the local
invocation ID of the form (2m+{0,1}, 2n+{0,1}).
The code:DerivativeGroupLinearNV execution mode assembles shader invocations
into 2x2 groups, where each group has local invocation index values of the
form 4m+{0,1,2,3}.

include::{generated}/interfaces/VK_NV_compute_shader_derivatives.adoc[]

=== New SPIR-V Capability

  * <<spirvenv-capabilities-table-ComputeDerivativeGroupQuadsNV,
    code:ComputeDerivativeGroupQuadsNV>>
  * <<spirvenv-capabilities-table-ComputeDerivativeGroupLinearNV,
    code:ComputeDerivativeGroupLinearNV>>

=== Issues

(1) Should we specify that the groups of four shader invocations used for
derivatives in a compute shader are the same groups of four invocations that
form a "`quad`" in shader subgroups?

*RESOLVED*: Yes.


=== Examples

None.

=== Version History

  * Revision 1, 2018-07-19 (Pat Brown)
  ** Initial draft
