blob: 39bea6413759263a27afbb8553506ba7bc37b51d [file] [log] [blame]
Name
AMD_shader_explicit_vertex_parameter
Name Strings
GL_AMD_shader_explicit_vertex_parameter
Contact
Qun Lin, AMD (Quentin.Lin 'at' amd.com)
Contributors
Qun Lin, AMD
Graham Sellers, AMD
Daniel Rakos, AMD
Dominik Witczak, AMD
Status
Pending
Version
Last Modified Date: 04/21/2016
Author Revision: 2
Number
OpenGL Extension #485
Dependencies
OpenGL 2.0 or ARB_shader_objects is required.
This extension is written against the OpenGL Shading Language
Specification, Version 4.50.
Overview
Unextended GLSL provides a set of fixed function interpolation modes and
even those are limited to certain types of interpolants (for example,
interpolation of integer and double isn't supported).
This extension introduces new built-in functions allowing access to vertex
parameters explicitly in the fragment shader. It also exposes barycentric
coordinates as new built-in variables, which can be used to implement
custom interpolation algorithms using shader code.
IP Status
None.
New Procedures and Functions
None.
New Tokens
None.
Modifications to the OpenGL Shading Language Specification, Version 4.50
Including the following line in a shader can be used to control the
language features described in this extension:
#extension GL_AMD_shader_explicit_vertex_parameter : <behavior>
where <behavior> is as specified in section 3.3.
New preprocessor #defines are added to the OpenGL Shading Language:
#define GL_AMD_shader_explicit_vertex_parameter 1
Additions to Chapter 3 of the OpenGL Shading Language (GLSL) Specification,
version 4.50, (Basics)
Modify section 3.6, Keywords p. 17
(Add __explicitInterpAMD to the list of keywords)
...smooth noperspective __explicitInterpAMD
Additions to Chapter 4 of the OpenGL Shading Language (GLSL) Specification,
version 4.50, (Variables and Types)
Modify section 4.5, Interpolation Qualifiers p.81
(Add explicitInterpAMD to interpolation qualifier list)
+-------------------+------------------------------------------------+
| Qualifier | Meaning |
+-------------------+------------------------------------------------+
| explicitInterpAMD | Explicit interpolation |
+-------------------+------------------------------------------------+
(Add a new paragraph after the description of noperspective)
A variable qualified as __explicitInterpAMD can only be used as the
parameter of the built-in function interpolateAtVertex in fragment shader,
and it cannot be qualified with any other auxiliary storage qualifiers.
Additions to Chapter 7 of the OpenGL Shading Language (GLSL) Specification,
version 4.50 (Built-in variables)
Modify Section 7.1, Built-in Languages Variable, p. 110
(Add to the list of built-in variables for the fragment languages)
In the fragment language, built-in variables are intrinsically declared as:
in vec2 gl_BaryCoordNoPerspAMD;
in vec2 gl_BaryCoordNoPerspCentroidAMD;
in vec2 gl_BaryCoordNoPerspSampleAMD;
in vec2 gl_BaryCoordSmoothAMD;
in vec2 gl_BaryCoordSmoothCentroidAMD;
in vec2 gl_BaryCoordSmoothSampleAMD;
in vec3 gl_BaryCoordPullModelAMD
The built-in variables <gl_BaryCoord??AMD> are fragment shader input
variables. Except the <gl_BaryCoordPullModelAMD>, the variables provide
the (I,J) pair of the barycentric coordinates interpolated at a fixed
location within the pixel. The K coordinate can be derived given the
identity I+J+K=1.0.
<gl_BaryCoordPullModelAMD> returns (1/W, 1/I, 1/J) at the pixel center and
the shader can use it to calculate gradients and to interpolate I, J, and
W to any desired sample location.
The interpolation mode of gl_BaryCoord??AMD variables are as follows
+---------------------------------+-----------------------------------------------------------+
| Variable name | Description |
+---------------------------------+-----------------------------------------------------------+
| gl_BaryCoordNoPerspAMD | Linear interpolation evaluated at the pixel's center |
| gl_BaryCoordNoPerspCentroidAMD | Linear interpolation evaluated at the centroid |
| gl_BaryCoordNoPerspSampleAMD | Linear interpolation evaluated at each covered sample |
| gl_BaryCoordSmoothAMD | Perspective interpolation evaluated at the pixel's center |
| gl_BaryCoordSmoothCentroidAMD | Perspective interpolation evaluated at the centroid |
| gl_BaryCoordSmoothSampleAMD | Perspective interpolation evaluated at each covered sample|
+---------------------------------+-----------------------------------------------------------+
Additions to Chapter 8 of the OpenGL Shading Language (GLSL) Specification,
version 4.30 (Built-in functions)
Modify Section 8.13.2, "Interpolation Functions", p. 180
(Add to the end of last paragraph in this page)
The return value of the functions interpolateAtCentroid,
interpolateAtSample, and interpolateAtOffset is undefined if <interpolant>
is declared with __explicitInterpAMD.
add to the table of functions, p.181:
+----------------------------------------------------+--------------------------------------------------------+
| Syntax | Description |
+----------------------------------------------------+--------------------------------------------------------+
| genType interpolateAtVertexAMD(genType | Returns the value of the input <interpolant> without |
| interpolant, uint vertexIdx) | any interpolation. i.e. the raw output value of |
| genIType interpolateAtVertexAMD(genIType | previous shader stage. <vertexIdx> selects for which |
| interpolant, uint vertexIdx) | vertex of the primitive the value of <interpolant> is |
| genUType interpolateAtVertexAMD(genUType | returned. |
| interpolant, uint vertexIdx) | This return value is equivalent with interpolating |
| | the input <interpolant> using the following |
| | set of barycentric coordinates, depending on |
| | the value of <vertexIdx>: |
| | |
| | vertexIdx Barycentric coordinates |
| | 0 I=0, J=0, K=1 |
| | 1 I=1, J=0, K=0 |
| | 2 I=0, J=1, K=0 |
| | |
| | However this order has no association with the vertex |
| | order specified by the application in the originating |
| | draw. |
| | The value of <vertexIdx> must be constant integer |
| | expression with a value in the range [0, 2]. |
+----------------------------------------------------+--------------------------------------------------------+
Additions to Chapter 9 of the OpenGL Shading Language (GLSL) Specification,
version 4.30, (Shading Language Grammar)
Modify Chapter 9, Shading Language Grammar for Core Profile, p. 187
(Add new token __EXPLICITINTERPAMD to list)
... NOPERSPECTIVE FLAT SMOOTH __EXPLICITINTERPAMD
Modify Chapter 9, Shading Language Grammar for Core Profile, p. 194
(Add __EXPLICITINTERPAMD to grammar interpolation_qualifier)
interpolation_qualifier:
SMOOTH
FLAT
NOPERSPECTIVE
__EXPLICITINTERPAMD
Additions to the AGL/GLX/WGL Specifications
None.
GLX Protocol
None.
Errors
None.
Issues
Revision History
Rev. Date Author Changes
---- -------- -------- -----------------------------------------
2 05/19/2016 dwitczak Minor update.
1 04/21/2016 qlin Internal revisions.