## NVIDIA DRIVE OS Linux API Reference

#### 5.1.6.1 Release For Test and Development only

Name

Name Strings

Contact

Daniel Koch, NVIDIA (dkoch 'at' nvidia.com)

Contributors

Pat Brown, NVIDIA
Michael Chock, NVIDIA

Status

Complete

Version

Revision: 2

Number

OpenGL ES Extension #201

Dependencies

OpenGL ES 3.0 and GLSL ES 3.00 are required.

This specification is written against the OpenGL ES 3.1 (March 17,
2014) and OpenGL ES 3.10 Shading Language (May 14, 2014) specifications.

This extension trivially interacts with EXT_geometry_shader.

This extension trivially interacts with EXT_tessellation_shader.

Overview

In OpenGL 3.0 and later, and in other APIs, there are three types of
interpolation qualifiers that are available for fragment shader inputs:
flat, smooth, and noperspective.  The 'flat' qualifier indicates that no
interpolation should be used. This is mandatory for integer-type
variables. The 'smooth' qualifier indicates that interpolation should be
performed in a perspective0correct manner. This is the default for
floating-point type variables.  The 'noperspective' qualifier indicates
that interpolation should be performed linearly in screen space.

While perspective-correct (smooth) and non-interpolated (flat) are the
two types of interpolation that most commonly used, there are important
use cases for linear (noperspective) interpolation.  In particular, in
some work loads where screen-space aligned geometry is common, the use of
linear interpolation can result in performance and/or power improvements.

The smooth and flat interpolation qualifiers are already supported in
OpenGL ES 3.0 and later. This extension adds support for noperspective
interpolation to OpenGL ES.

New Procedures and Functions

None.

New Tokens

None.

Additions to the OpenGL ES 3.1 Specification

Modifications to Section 12.4.1 (Clipping Shader Outputs)

(Insert a new paragraph as the second-to-last paragraph of the section)

For vertex shader outputs specified to be interpolated without
perspective correction (using the "noperspective" qualifier), the value
of <t> used to obtain the output value associated with P will be adjusted
to produce results that vary linearly in screen space.

Modifications to Section 13.4.1 (Basic Line Segment Rasterization)

(Replace the last paragraph of the section with the following language
which adds in the description of noperspective interpolation)

The "noperspective" and "flat" keywords used to declare shader outputs
affect how they are interpolated.  When neither keyword is specified,
interpolation is performed as described in equation 13.4.  When the
"noperspective" keyword is specified, interpolation is performed in the
same fashion as for depth values, as described in equation 13.5.  When
the "flat" keyword is specified, no interpolation is performed, and
outputs are taken from the corresponding input value of the provoking
vertex corresponding to that primitive (see section 12.3).

Modifications to Section 13.5.1 (Basic Polygon Rasterization)

(Replace the paragraph which describes the interpolation keywords in
the middle of p. 298)

The "noperspective" and "flat" keywords used to declare shader outputs
affect how they are interpolated.  When neither keyword is specified,
interpolation is performed as described in equation 13.7.  When the
"noperspective" keyword is specified, interpolation is performed in the
same fashion as for depth values, as described in equation 13.8. When
the "flat" keyword is specified, no interpolation is performed, and
outputs are taken from the corresponding input value of the provoking
vertex corresponding to that primitive (see section 12.3).

Modifications to Section 13.5.3 (Polygon Multisample Rasterization)

(replace the last paragraph of the section)

The "noperspective" and "flat" qualifiers affect how shader outputs are
interpolated in the same fashion as described for basic polygon
rasterization in section 13.5.1.

If OES_shader_multisample_interpolation is not supported, ignore
references to the interpolation functions in section 8.13.

If EXT_geometry_shader is supported the, noperspective keyword
can be used on the outputs from geometry shaders.

If EXT_geometry_shader is not support, ignore references to

If EXT_tessellation_shader is supported, the noperspective keyword
can be used on the outputs from tessellation shaders.

If EXT_tessellation_shader is not support, ignore references to

New State

None.

Including the following line in a shader can be used to control the
language features described in this extension:

where <behavior> is as specified in section 3.4.

A new preprocessor #define is added to the OpenGL ES Shading Language:

Modifications to Section 3.6 (Keywords):

Remove "noperspective" from the list of reserved keywords and add it to
the list of keywords.

Modifications to Section 4.3 (Storage Qualifiers):

(Add to the table of interpolation qualifiers)

Qualifier          Meaning
---------          -------
noperspective      linear interpolation

Modifications to Section 4.3.4 (Input Variables):

(Add to the list of fragment input examples:)

noperspective in float temperature;
noperspective centroid in vec2 myTexCoord;

Modifications to Section 4.3.6 (Output Variables):

(Add to the list of vertex (or tessellation or geometry) output examples:)

noperspective out float temperature;
noperspective centroid out vec2 myTexCoord;

Modifications to Section 4.5 (Interpolation Qualifiers):

(Add to the table of interpolation qualifiers:)

Qualifier          Meaning
---------          -------
noperspective      linear interpolation

(Following the description of "smooth" add the following description:)

"A variable qualified as "noperspective" must be interpolated linearly
in screen space as described in equation 13.5 of the OpenGL ES Graphics
System Specification, section 13.4 "Line Segments".

Modifications to Section 8.13 (Fragment Processing Functions), as modified

(Add to the end of the paragraph describing the interpolation functions)

"For all the interpolation functions ...
If <interpolant> is declared with the "noperspective" qualifier, the
interpolated value will be computed without perspective correction."

Modifications to Section 9 (Shading Language Grammar)

(Add to the list of tokens returned from lexical analysis)

NOPERSPECTIVE

(update the interpolation_qualifier rule to be)

interpolation_qualifier:
SMOOTH
FLAT
NOPERSPECTIVE

Issues

(1) Is this any different from the 'noperspective' functionality
that was added in OpenGL 3.0?

RESOLVED. No. This is intended to be identical and the language used
for this specification was based on the deltas between GL 4.4 and
ES 3.1.

(2) What should we call this extension?

RESOLVED: Options considered included:
Using the second option as this is consistent with the naming of
per-sample interpolation.

(3) This is a small extension. Is there anything else we should add at
the same time?

RESOLVED. No. All the other related functionality is supported in ES