| Name |
| |
| NV_compute_shader_derivatives |
| |
| Name Strings |
| |
| GL_NV_compute_shader_derivatives |
| |
| Contact |
| |
| Pat Brown, NVIDIA (pbrown 'at' nvidia.com) |
| |
| Contributors |
| |
| Ashwin Lele, NVIDIA |
| Jeff Bolz, NVIDIA |
| Michael Chock, NVIDIA |
| |
| Status |
| |
| Shipping |
| |
| Version |
| |
| Last Modified: September 4, 2019 |
| Revision: 3 |
| |
| Number |
| |
| OpenGL Extension #525 |
| OpenGL ES Extension #308 |
| |
| Dependencies |
| |
| This extension is written against the OpenGL 4.6 Specification |
| (Compatibility Profile), dated October 24, 2016. |
| |
| OpenGL 4.5 or OpenGL ES 3.2 is required. |
| |
| This extension interacts with ARB_compute_variable_group_size. |
| |
| This extension requires support for the OpenGL Shading Language (GLSL) |
| extension "NV_compute_shader_derivatives", which can be found at the |
| Khronos Group Github site here: |
| |
| https://github.com/KhronosGroup/GLSL |
| |
| Overview |
| |
| This extension adds OpenGL and OpenGL ES API support for the OpenGL |
| Shading Language (GLSL) extension "NV_compute_shader_derivatives". |
| |
| That extension, when enabled, allows applications to use derivatives in |
| compute shaders. It adds compute shader support for explicit derivative |
| built-in functions like dFdx(), automatic derivative computation in |
| texture lookup functions like texture(), use of the optional LOD bias |
| parameter to adjust the computed level of detail values in texture lookup |
| functions, and the texture level of detail query function |
| textureQueryLod(). |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| None |
| |
| Modifications to the OpenGL 4.6 Specification (Compatibility Profile) |
| |
| None |
| |
| Modifications to the OpenGL ES 3.2 Specification |
| |
| None |
| |
| Additions to the AGL/GLX/WGL Specifications |
| |
| None |
| |
| Errors |
| |
| None |
| |
| New State |
| |
| None |
| |
| New Implementation Dependent State |
| |
| None |
| |
| Dependencies on ARB_compute_variable_group_size |
| |
| If ARB_compute_variable_group_size is supported, the GLSL compiler/linker is |
| unable to enforce the following restrictions: |
| |
| * Compute shaders using the "derivative_group_quadsNV" mode must have a |
| local workgroup size whose width and height are both multiples of two. |
| |
| * Compute shaders using the "derivative_group_linearNV" mode must have a |
| local workgroup size whose total number of invocations is a multiple of four. |
| |
| Instead, we need to enforce this restriction at run time. |
| |
| Add the following to the list of errors under the heading of "insert at the |
| end of the first error block, shared between DispatchCompute and |
| DispatchComputeGroupSizeARB, p. 586" in ARB_compute_variable_group_size: |
| |
| * An INVALID_VALUE error is generated by DispatchComputeGroupSizeARB if the |
| active program for the compute shader stage has a compute shader using the |
| "derivative_group_quadsNV" layout qualifier and <group_size_x> or |
| <group_size_y> is not a multiple of two. |
| |
| * An INVALID_VALUE error is generated by DispatchComputeGroupSizeARB if the |
| active program for the compute shader stage has a compute shader using the |
| "derivative_group_linearNV" layout qualifier and the product of |
| <group_size_x>, <group_size_y>, and <group_size_z> is not a multiple of |
| four. |
| |
| Note that as of September 2019, this issue does not apply to SPIR-V compute |
| shaders because SPIR-V does not provide a mechanism to specify variable |
| local group sizes. If this changes in the future, the INVALID_VALUE error |
| above would apply both to GLSL and SPIR-V compute shaders. |
| |
| |
| Issues |
| |
| (1) How does this extension interact with ARB_compute_variable_group_size? |
| |
| RESOLVED: For compute shaders with fixed group size, the GLSL |
| specification calls for a compile- or link-time error if the local group |
| size is inconsistent with the derivative mode specified using the |
| "derivative_group_quadsNV" or "derivative_group_linearNV" layout |
| qualifiers. However, this sort of error can not be generated if |
| "local_size_variable" is also specified because the local group size is |
| not known until DispatchComputeGroupSizeARB is called. To deal with this, |
| we specify an INVALID_VALUE error if DispatchComputeGroupSizeARB is called |
| with a bad local group size. |
| |
| Revision History |
| |
| Revision 3 (pbrown), 2019/09/04 |
| - Add an interaction with ARB_compute_variable_group_size, specifying |
| that INVALID_VALUE is generated by DispatchComputeGroupSizeARB if the |
| derivative mode is inconsistent with the local group size specified in the |
| dispatch command. |
| |
| Revision 2 (mchock) |
| - Added OpenGL ES support. |
| |
| Revision 1 (pbrown) |
| - Internal revisions. |