skia / external / github.com / KhronosGroup / OpenGL-Registry / 0dc24166d162723781f1bf9fe433f71fa03a7aa0 / . / extensions / NV / NV_compute_shader_derivatives.txt

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