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 : where 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 are fragment shader input variables. Except the , 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. 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 is declared with __explicitInterpAMD. add to the table of functions, p.181: +----------------------------------------------------+--------------------------------------------------------+ | Syntax | Description | +----------------------------------------------------+--------------------------------------------------------+ | genType interpolateAtVertexAMD(genType | Returns the value of the input without | | interpolant, uint vertexIdx) | any interpolation. i.e. the raw output value of | | genIType interpolateAtVertexAMD(genIType | previous shader stage. selects for which | | interpolant, uint vertexIdx) | vertex of the primitive the value of is | | genUType interpolateAtVertexAMD(genUType | returned. | | interpolant, uint vertexIdx) | This return value is equivalent with interpolating | | | the input using the following | | | set of barycentric coordinates, depending on | | | the value of : | | | | | | 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 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.