Name | |
AMD_shader_image_load_store_lod | |
Name Strings | |
GL_AMD_shader_image_load_store_lod | |
Contact | |
Rex Xu, AMD (rex.xu 'at' amd.com) | |
Contributors | |
Rex Xu, AMD | |
Zhou Jin, AMD | |
Qun Lin, AMD | |
Daniel Rakos, AMD | |
Status | |
Shipping. | |
Version | |
Last Modified Date: 07/03/2017 | |
Author Revision: 2 | |
Number | |
513 | |
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 the ARB_shader_image_load_store | |
extension to allow implementations supporting loads and stores on | |
mipmap texture images. | |
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_image_load_store_lod : <behavior> | |
where <behavior> is as specified in section 3.3. | |
New preprocessor #defines are added to the OpenGL Shading Language: | |
#define GL_AMD_shader_image_load_store_lod 1 | |
Additions to Chapter 8 of the OpenGL Shading Language Specification (Built-in | |
Functions) | |
Modify Section 8.12 Image Functions | |
(insert a new paragraph, following the fourth paragraph on p. 179) | |
... "Texture Image Loads and Stores" of the OpenGL specification. | |
Loads and stores could also be done on mipmap texture images with the | |
level-of-detail specified explicitly. In such case, the IMAGE_LOD_PARAMS | |
is used instead. Similar to IMAGE_PARAMS, the IMAGE_LOD_PARAMS in the | |
prototypes below is a placeholder representing 21 separate functions, each | |
for a different type of image variable. The IMAGE_LOD_PARAMS placeholder is | |
replaced by one of the following parameter list: | |
gimage1D image, int P, int lod | |
gimage2D image, ivec2 P, int lod | |
gimage3D image, ivec3 P, int lod | |
gimageCube image, ivec3 P, int lod | |
gimage1DArray image, ivec2 P, int lod | |
gimage2DArray image, ivec3 P, int lod | |
gimageCubeArray image, ivec3 P, int lod | |
(insert new functions to the "Syntax" table cell of each image memory | |
function group on p. 180-181) | |
+-----------------------------------------+-------------------------------+ | |
| Syntax | Description | | |
+-----------------------------------------+-------------------------------+ | |
| gvec4 imageLoadLodAMD(readonly | Loads the texel at the | | |
| IMAGE_LOD_PARAMS) | coordinate <P> from the image | | |
| | unit <image> (in | | |
| | IMAGE_MIP_PARAMS). When | | |
| | <image>, <P>, <lod> identify | | |
| | a valid texel, the bits used | | |
| | to represent the selected | | |
| | texel in the memory are | | |
| | converted to a vec4, ivec4, | | |
| | uvec4 in the manner described | | |
| | in the section 8.25 "Texture | | |
| | Image Loads and Stores" of | | |
| | the OpenGL Specification and | | |
| | returned. | | |
+-----------------------------------------+-------------------------------+ | |
| void imageStoreLodAMD(writeonly | Store <data> into the texel | | |
| IMAGE_LOD_PARAMS, | at the coordinate <P> from | | |
| gvec4 data) | the image specified by | | |
| | <image>. When <image>, <P>, | | |
| | <lod> identify a valid texel, | | |
| | the bits used to represent | | |
| | <data> are converted to the | | |
| | format of the image unit in | | |
| | the manner described in | | |
| | section 8.25 "Texture Image | | |
| | Loads and Stores" of the | | |
| | OpenGL Specification and | | |
| | stored to the specified texel.| | |
+-----------------------------------------+-------------------------------+ | |
Dependencies on ARB_sparse_texture2 | |
If the shader enables ARB_sparse_texture2, this extension adds additional | |
image load functions. | |
+-------------------------------------------------+-----------------------+ | |
| Syntax | Description | | |
+-------------------------------------------------+-----------------------+ | |
| int sparseImageLoadLodAMD(gimage2D image, | Loads a texel from | | |
| ivec2 P, int lod, | the image <image> as | | |
| out gvec4 texel) | in imageLoadLodAMD(), | | |
| int sparseImageLoadLodAMD(gimage3D image, | but return texture | | |
| ivec3 P, int lod, | access residency | | |
| out gvec4 texel) | information from the | | |
| int sparseImageLoadLodAMD(gimageCube image, | function and the | | |
| ivec3 P, int lod, | filtered lookup | | |
| out gvec4 texel) | result in the out | | |
| int sparseImageLoadLodAMD(gimage2DArray image, | parameter <texel>. | | |
| ivec3 P, int lod, | | | |
| out gvec4 texel) | | | |
| int sparseImageLoadLodAMD(gimageCuberray image, | | | |
| ivec3 P, int lod, | | | |
| out gvec4 texel) | | | |
+-------------------------------------------------+-----------------------+ | |
Errors | |
None. | |
New State | |
None. | |
New Implementation Dependent State | |
None. | |
Issues | |
(1) What is the intention of this extension? | |
RESOLVED: This extension is designed to support loads and stores on | |
mipmap texture images with the level-of-detail specified explicitly. | |
Revision History | |
Rev. Date Author Changes | |
---- -------- -------- ------------------------------------------------- | |
2 07/03/17 rexu Rename this extension and use suffix "lod" to | |
keep the consistency with existing texture and | |
image functions. Remove gimage2DRect and | |
gimageBuffer dimensions for these new built-in | |
functions in that they do not support mipmapping. | |
1 06/30/17 rexu Initial draft. |