blob: 64b4666a9db758ed2ffe5c5dbe38f02bbc8f350d [file] [log] [blame]
Name
AMD_texture_gather_bias_lod
Name Strings
GL_AMD_texture_gather_bias_lod
Contact
Rex Xu, AMD (Rex.Xu 'at' amd.com)
Contributors
Rex Xu, AMD
Timothy Lottes, AMD
Qun Lin, AMD
Daniel Rakos, AMD
Graham Sellers, AMD
Dominik Witczak, AMD
Matthäus G. Chajdas, AMD
Status
Shipping
Version
Last Modified Date: 05/10/2017
Author Revision: 5
Number
502
Dependencies
This extension is written against the OpenGL 4.5 (Core Profile) Specification.
This extension is written against version 4.50 of the OpenGL Shading Language Specification.
OpenGL 4.0 and GLSL 4.00 are required.
This extension interacts with ARB_sparse_texture2.
Overview
This extension was developed based on existing built-in texture gather functions to allow
implementations supporting bias of implicit level of detail and explicit control of level of
detail in texture gather operations.
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_texture_gather_bias_lod : <behavior>
where <behavior> is as specified in section 3.3.
New preprocessor #defines are added to the OpenGL Shading Language:
#define GL_AMD_texture_gather_bias_lod 1
Additions to Chapter 8 of the OpenGL Shading Language Specification (Built-in Functions)
Modify Section 8.9.3 Texture Gather Functions
(modify the first sentence of the first paragraph on p. 170)
The texture gather functions take components of a single floating-point vector operand as a
texture coordinate, determine a set of four texels to sample either from the base level of
detail and its bias (if present) of the specified texture image or from the explicit level of
detail (if present) of this texture image, and return one component from each texel in a four-
component result vector.
(modify certain functions in the "Syntax" table cell of each gather function group, adding
an optional <bias> parameter for those sampler types: gsampler2D, gsampler2DArray,
gsamplerCube, gsamplerCubeArray, and modify four-texel sampling formulas in the "Description"
table cell of textureGather() on p. 171-172)
+--------------------------------------------------------------+------------------------------+
| Syntax | Description |
+--------------------------------------------------------------+------------------------------+
| gvec4 textureGather(gsampler2D sampler, vec2 P [, int comp | Returns the value |
| [, float bias]]) | |
| gvec4 textureGather(gsampler2DArray sampler, vec3 P | gvec4( |
| [, int comp [, float bias]]) | Sample_i0_j1( |
| gvec4 textureGather(gsamplerCube sampler, vec3 P | P, base, bias).comp, |
| [, int comp [, float bias]]) | Sample_i1_j1( |
| gvec4 textureGather(gsamplerCubeArray sampler, vec4 P | P, base, bias).comp, |
| [, int comp [, float bias]]) | Sample_i1_j0( |
| ... | P, base, bias).comp, |
| | Sample_i0_j0( |
| | P, base, bias).comp) |
| | ... |
+--------------------------------------------------------------+------------------------------+
| gvec4 textureGatherOffset(gsampler2D sampler, vec2 P, | Perform a texture gather |
| ivec2 offset [, int comp | operation as in |
| [, float bias]]) | textureGather() by <offset> |
| gvec4 textureGatherOffset(gsampler2DArray sampler, vec3 P, | as described in |
| ivec2 offset [, int comp | textureOffset() except that |
| [, float bias]]) | the <offset> can be variable |
| ... | (non constant) and ... |
+--------------------------------------------------------------+------------------------------+
| gvec4 textureGatherOffsets(gsampler2D sampler, vec2 P, | Operate identically to |
| ivec2 offsets[4] [, int comp | textureGatherOffset() except |
| [, float bias]]) | that <offsets> is used to |
| gvec4 textureGatherOffsets(gsampler2DArray sampler, vec3 P, | determine the location of the|
| ivec2 offsets[4] [, int comp | four texels to sample. ... |
| [, float bias]]) | |
| ... | |
+--------------------------------------------------------------+------------------------------+
(insert new gather function table cells, at the end of the section, p. 172)
+--------------------------------------------------------------+------------------------------+
| Syntax | Description |
+--------------------------------------------------------------+------------------------------+
| gvec4 textureGatherLodAMD(gsampler2D sampler, vec2 P, | Perform a texture gather |
| float lod [, int comp]) | operation as in |
| gvec4 textureGatherLodAMD(gsampler2DArray sampler, vec3 P, | textureGather() with explicit|
| float lod [, int comp]) | LOD, but the four-texel |
| gvec4 textureGatherLodAMD(gsamplerCube sampler, vec3 P, | sampling is modified as |
| float lod [, int comp]) | follow: |
| gvec4 textureGatherLodAMD(gsamplerCubeArray sampler, vec4 P, | |
| float lod [, int comp]) | gvec4( |
| | Sample_i0_j1(P, lod).comp, |
| | Sample_i1_j1(P, lod).comp, |
| | Sample_i1_j0(P, lod).comp, |
| | Sample_i0_j0(P, lod).comp) |
+--------------------------------------------------------------+------------------------------+
| gvec4 textureGatherLodOffsetAMD(gsampler2D sampler, vec2 P, | Perform a texture gather |
| float lod, ivec2 offset | operation as in |
| [, int comp]) | textureGatherOffset() but |
| gvec4 textureGatherLodOffsetAMD(gsampler2DArray sampler, | with explicit LOD. |
| vec3 P, float lod, | |
| ivec2 offset [, int comp]) | |
+--------------------------------------------------------------+------------------------------+
| gvec4 textureGatherLodOffsetsAMD(gsampler2D sampler, vec2 P, | Perform a texture gather |
| float lod, ivec2 offsets[4] | operation as in |
| [, int comp]) | textureGatherOffsets() but |
| gvec4 textureGatherLodOffsetsAMD(gsampler2DArray sampler, | with explicit LOD. |
| vec3 P, float lod, | |
| ivec2 offsets[4] | |
| [, int comp]) | |
+--------------------------------------------------------------+------------------------------+
Dependencies on ARB_sparse_texture2
If the shader enables ARB_sparse_texture2, this extension modifies certain variants of
sparseTextureGather*(), adding optional <bias> parameter for those sampler types: gsampler2D,
gsampler2DArray, gsamplerCube, gsamplerCubeArray.
+--------------------------------------------------------------+------------------------------+
| Syntax | Description |
+--------------------------------------------------------------+------------------------------+
| int sparseTextureGatherARB(gsampler2D sampler, vec2 P, | Do a texture gather operation|
| out gvec4 texel [, int comp | as in textureGather(), but |
| [, float bias]]) | return texture access |
| int sparseTextureGatherARB(gsampler2DArray sampler, vec3 P, | residency information from |
| out gvec4 texel [, int comp | the function and the filtered|
| [, float bias]]) | lookup result in the out |
| int sparseTextureGatherARB(gsamplerCube sampler, vec3 P, | parameter <texel>. |
| out gvec4 texel [, int comp | |
| [, float bias]]) | |
| int sparseTextureGatherARB(gsamplerCubeArray sampler, vec4 P,| |
| out gvec4 texel [, int comp | |
| [, float bias]]) | |
| ... | |
+--------------------------------------------------------------+------------------------------+
| int sparseTextureGatherOffsetARB(gsampler2D sampler, vec2 P, | Do a texture gather operation|
| ivec2 offset, | as in textureGatherOffset(), |
| out gvec4 texel | but return texture access |
| [, int comp [, float bias]])| residency information from |
| int sparseTextureGatherOffsetARB(gsampler2DArray sampler, | the function and the filtered|
| vec3 P, ivec2 offset, | lookup result in the out |
| out gvec4 texel | parameter <texel>. |
| [, int comp [, float bias]])| |
| ... | |
+--------------------------------------------------------------+------------------------------+
| int sparseTextureGatherOffsetsARB(gsampler2D sampler, vec2 P,| Do a texture gather operation|
| ivec2 offsets[4], | as in textureGatherOffsets(),|
| out gvec4 texel | but return texture access |
| [, int comp | residency information from |
| [, float bias]]) | the function and the filtered|
| int sparseTextureGatherOffsetsARB(gsampler2DArray sampler, | lookup result in the out |
| vec3 P, ivec2 offsets[4], | parameter <texel>. |
| out gvec4 texel | |
| [, int comp | |
| [, float bias]]) | |
| ... | |
+--------------------------------------------------------------+------------------------------+
Meanwhile, this extension adds additional texture gather functions as follow if the shader
enables ARB_sparse_texture2, providing explicit control of level of detail.
+--------------------------------------------------------------+------------------------------+
| Syntax | Description |
+--------------------------------------------------------------+------------------------------+
| int sparseTextureGatherLodAMD(gsampler2D sampler, vec2 P, | Do a texture gather operation|
| float lod, out gvec4 texel | as in textureGather() with, |
| [, int comp]) | explicit LOD, but return |
| int sparseTextureGatherLodAMD(gsampler2DArray sampler, | texture access residency |
| vec3 P, float lod, | information from the function|
| out gvec4 texel [, int comp]) | and the filtered lookup |
| int sparseTextureGatherLodAMD(gsamplerCube sampler, vec3 P, | result in the out parameter |
| float lod, out gvec4 texel | <texel>. |
| [, int comp]) | |
| int sparseTextureGatherLodAMD(gsamplerCubeArray sampler, | |
| vec4 P, float lod, | |
| out gvec4 texel [, int comp]) | |
+--------------------------------------------------------------+------------------------------+
| int sparseTextureGatherLodOffsetAMD(gsampler2D sampler, | Do a texture gather operation|
| vec2 P, float lod, | as in textureGatherOffset() |
| ivec2 offset, | with explicit LOD, but return|
| out gvec4 texel | texture access residency |
| [, int comp]) | information from the function|
| int sparseTextureGatherLodOffsetAMD(gsampler2DArray sampler, | and the filtered lookup |
| vec3 P, float lod, | result in the out parameter |
| ivec2 offset, | <texel>. |
| out gvec4 texel | |
| [, int comp]) | |
+--------------------------------------------------------------+------------------------------+
| int sparseTextureGatherLodOffsetsAMD(gsampler2D sampler, | Do a texture gather operation|
| vec2 P, float lod, | as in textureGatherOffsets() |
| ivec2 offsets[4], | with explicit LOD, but return|
| out gvec4 texel | texture access residency |
| [, int comp]) | information from the function|
| int sparseTextureGatherLodOffsetsAMD(gsampler2DArray sampler,| and the filtered lookup |
| vec3 P, float lod, | result in the out parameter |
| ivec2 offsets[4], | <texel>. |
| out gvec4 texel | |
| [, int comp]) | |
+--------------------------------------------------------------+------------------------------+
Errors
None.
New State
None.
New Implementation Dependent State
None.
Issues
(1) Could you explain the function syntax since <bias> is added as another optional parameter?
RESOLVED: This extension adds <bias> as another optional parameter apart from the existing
parameter <comp>. The function syntax is somewhat similar to rules of default parameters in
C++. To be exact, when <comp> is not specified, <bias> should not be specified as well; when
<comp> is specified, <bias> could be specified or not. For example,
uniform sampler2D samp2D;
vec2 P;
int comp;
float bias;
...
textureGather(samp2D, P); // legal, both comp and bias are not specified
textureGather(samp2D, P, bias); // illegal, bias is specified while comp is not
textureGather(samp2D, P, comp); // legal, comp is specified while bias is not
textureGather(samp2D, p, comp, bias); // legal both comp and bias are specified
(2) Which level-of-detail do texture gather functions use, if the extension is defined?
RESOLVED: If GL_AMD_texture_gather_bias_lod extension is *enabled*, *all* texture
gather functions (ie. the ones which do not take the extra bias argument and
the ones that do) fetch texels from implicit LOD in fragment shader stage. In all
other shader stages, base level is used instead.
If the extension is *disabled*, all texture gather functions always fetch texels
from the base mip level.
Revision History
Rev. Date Author Changes
---- -------- -------- ---------------------------------------------------------------------
5 05/10/17 dwitczak Added issue 2.
4 01/24/17 dwitczak Fix sparseTextureGatherOffsetsARB() and
sparseTextureGatherLodOffsetAMD() function prototypes.
3 11/17/16 rexu Clarify that when <bias> parameter is specified, the optional <comp>
parameter, prior to <bias>, should be specified as well based on
the calling rules of default parameters.
2 11/16/16 rexu Add the interaction with ARB_sparse_texture2.
1 11/15/16 rexu Initial draft.