This extension provides GLSL built-in functions allowing shaders to load from, store to, and perform atomic read-modify-write operations to a single level of a texture object from any shader stage. These built-in functions are named imageLoad(), imageStore(), and imageAtomic*(), respectively, and accept integer texel coordinates to identify the texel accessed. The extension adds the notion of "image units" to the OpenGL API, to which texture levels are bound for access by the GLSL built-in functions. To allow shaders to specify the image unit to access, GLSL provides a new set of data types ("image*") similar to samplers. Each image variable is assigned an integer value to identify an image unit to access, which is specified using Uniform*() APIs in a manner similar to samplers.
This extension also provides the capability to explicitly enable "early" per-fragment tests, where operations like depth and stencil testing are performed prior to fragment shader execution. In unextended OpenGL, fragment shaders never have any side effects and implementations can sometimes perform per-fragment tests and discard some fragments prior to executing the fragment shader. Since this extension allows fragment shaders to write to texture and buffer object memory using the built-in image functions, such optimizations could lead to non-deterministic results. To avoid this, implementations supporting this extension may not perform such optimizations on shaders having such side effects. However, enabling early per-fragment tests guarantees that such tests will be performed prior to fragment shader execution, and ensures that image stores and atomics will not be performed by fragment shader invocations where these per-fragment tests fail.
Finally, this extension provides both a GLSL built-in function and an OpenGL API function allowing applications some control over the ordering of image loads, stores, and atomics relative to other OpenGL pipeline operations accessing the same memory. Because the extension provides the ability to perform random accesses to texture or buffer object memory, such accesses are not easily tracked by the OpenGL driver. To avoid the need for heavy-handed synchronization at the driver level, this extension requires manual synchronization. The MemoryBarrier() OpenGL API function allows applications to specify a bitfield indicating the set of OpenGL API operations to synchronize relative to shader memory access. The memoryBarrier() GLSL built-in function provides a synchronization point within a given shader invocation to ensure that all memory accesses performed prior to the synchronization point complete prior to any started after the synchronization point.
Requires OpenGL 3. and GLSL 1.30. Promoted to core in OpenGL 4..
| Modifier and Type | Field and Description |
|---|---|
| public static final int | GL_ALL_BARRIER_BITS
Accepted by the |
| public static final int | GL_ATOMIC_COUNTER_BARRIER_BIT
Accepted by the |
| public static final int | GL_BUFFER_UPDATE_BARRIER_BIT
Accepted by the |
| public static final int | GL_COMMAND_BARRIER_BIT
Accepted by the |
| public static final int | GL_ELEMENT_ARRAY_BARRIER_BIT
Accepted by the |
| public static final int | GL_FRAMEBUFFER_BARRIER_BIT
Accepted by the |
| public static final int | GL_IMAGE_1D
Returned by the |
| public static final int | GL_IMAGE_1D_ARRAY
Returned by the |
| public static final int | GL_IMAGE_2D
Returned by the |
| public static final int | GL_IMAGE_2D_ARRAY
Returned by the |
| public static final int | GL_IMAGE_2D_MULTISAMPLE
Returned by the |
| public static final int | GL_IMAGE_2D_MULTISAMPLE_ARRAY
Returned by the |
| public static final int | GL_IMAGE_2D_RECT
Returned by the |
| public static final int | GL_IMAGE_3D
Returned by the |
| public static final int | GL_IMAGE_BINDING_ACCESS
Accepted by the |
| public static final int | GL_IMAGE_BINDING_FORMAT
Accepted by the |
| public static final int | GL_IMAGE_BINDING_LAYER
Accepted by the |
| public static final int | GL_IMAGE_BINDING_LAYERED
Accepted by the |
| public static final int | GL_IMAGE_BINDING_LEVEL
Accepted by the |
| public static final int | GL_IMAGE_BINDING_NAME
Accepted by the |
| public static final int | GL_IMAGE_BUFFER
Returned by the |
| public static final int | GL_IMAGE_CUBE
Returned by the |
| public static final int | GL_IMAGE_CUBE_MAP_ARRAY
Returned by the |
| public static final int | GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS
Returned in the |
| public static final int | GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE
Returned in the |
| public static final int | GL_IMAGE_FORMAT_COMPATIBILITY_TYPE
Accepted by the |
| public static final int | GL_INT_IMAGE_1D
Returned by the |
| public static final int | GL_INT_IMAGE_1D_ARRAY
Returned by the |
| public static final int | GL_INT_IMAGE_2D
Returned by the |
| public static final int | GL_INT_IMAGE_2D_ARRAY
Returned by the |
| public static final int | GL_INT_IMAGE_2D_MULTISAMPLE
Returned by the |
| public static final int | GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY
Returned by the |
| public static final int | GL_INT_IMAGE_2D_RECT
Returned by the |
| public static final int | GL_INT_IMAGE_3D
Returned by the |
| public static final int | GL_INT_IMAGE_BUFFER
Returned by the |
| public static final int | GL_INT_IMAGE_CUBE
Returned by the |
| public static final int | GL_INT_IMAGE_CUBE_MAP_ARRAY
Returned by the |
| public static final int | GL_MAX_COMBINED_IMAGE_UNIFORMS
Accepted by the |
| public static final int | GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS
Accepted by the |
| public static final int | GL_MAX_FRAGMENT_IMAGE_UNIFORMS
Accepted by the |
| public static final int | GL_MAX_GEOMETRY_IMAGE_UNIFORMS
Accepted by the |
| public static final int | GL_MAX_IMAGE_SAMPLES
Accepted by the |
| public static final int | GL_MAX_IMAGE_UNITS
Accepted by the |
| public static final int | GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS
Accepted by the |
| public static final int | GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS
Accepted by the |
| public static final int | GL_MAX_VERTEX_IMAGE_UNIFORMS
Accepted by the |
| public static final int | GL_PIXEL_BUFFER_BARRIER_BIT
Accepted by the |
| public static final int | GL_SHADER_IMAGE_ACCESS_BARRIER_BIT
Accepted by the |
| public static final int | GL_TEXTURE_FETCH_BARRIER_BIT
Accepted by the |
| public static final int | GL_TEXTURE_UPDATE_BARRIER_BIT
Accepted by the |
| public static final int | GL_TRANSFORM_FEEDBACK_BARRIER_BIT
Accepted by the |
| public static final int | GL_UNIFORM_BARRIER_BIT
Accepted by the |
| public static final int | GL_UNSIGNED_INT_IMAGE_1D
Returned by the |
| public static final int | GL_UNSIGNED_INT_IMAGE_1D_ARRAY
Returned by the |
| public static final int | GL_UNSIGNED_INT_IMAGE_2D
Returned by the |
| public static final int | GL_UNSIGNED_INT_IMAGE_2D_ARRAY
Returned by the |
| public static final int | GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE
Returned by the |
| public static final int | GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY
Returned by the |
| public static final int | GL_UNSIGNED_INT_IMAGE_2D_RECT
Returned by the |
| public static final int | GL_UNSIGNED_INT_IMAGE_3D
Returned by the |
| public static final int | GL_UNSIGNED_INT_IMAGE_BUFFER
Returned by the |
| public static final int | GL_UNSIGNED_INT_IMAGE_CUBE
Returned by the |
| public static final int | GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY
Returned by the |
| public static final int | GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT
Accepted by the |
| Access | Constructor and Description |
|---|---|
| protected |
| Modifier and Type | Method and Description |
|---|---|
| public static void | glBindImageTexture(int
the index of the image unit to which to bind the texture unit, int the name of the texture to bind to the image unit texture, int the level of the texture that is to be bound level, boolean whether a layered texture binding is to be established layered, int if layer, int layered is false, specifies the layer of texture to be bound to the image unit. Ignored otherwise.a token indicating the type of access that will be performed on the image access, int the format that the elements of the image will be treated as for the purposes of formatted stores format)Binds a level of a texture to an image unit. |
| public static void | glMemoryBarrier(int
the barriers to insert (bitwise combination). One or more of: barriers)Defines a barrier ordering memory transactions. |
| GL_ALL_BARRIER_BITS | back to summary |
|---|---|
| public static final int GL_ALL_BARRIER_BITS Accepted by the | |
| GL_ATOMIC_COUNTER_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_ATOMIC_COUNTER_BARRIER_BIT Accepted by the | |
| GL_BUFFER_UPDATE_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_BUFFER_UPDATE_BARRIER_BIT Accepted by the | |
| GL_COMMAND_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_COMMAND_BARRIER_BIT Accepted by the | |
| GL_ELEMENT_ARRAY_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_ELEMENT_ARRAY_BARRIER_BIT Accepted by the | |
| GL_FRAMEBUFFER_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_FRAMEBUFFER_BARRIER_BIT Accepted by the | |
| GL_IMAGE_1D | back to summary |
|---|---|
| public static final int GL_IMAGE_1D Returned by the | |
| GL_IMAGE_1D_ARRAY | back to summary |
|---|---|
| public static final int GL_IMAGE_1D_ARRAY Returned by the | |
| GL_IMAGE_2D | back to summary |
|---|---|
| public static final int GL_IMAGE_2D Returned by the | |
| GL_IMAGE_2D_ARRAY | back to summary |
|---|---|
| public static final int GL_IMAGE_2D_ARRAY Returned by the | |
| GL_IMAGE_2D_MULTISAMPLE | back to summary |
|---|---|
| public static final int GL_IMAGE_2D_MULTISAMPLE Returned by the | |
| GL_IMAGE_2D_MULTISAMPLE_ARRAY | back to summary |
|---|---|
| public static final int GL_IMAGE_2D_MULTISAMPLE_ARRAY Returned by the | |
| GL_IMAGE_2D_RECT | back to summary |
|---|---|
| public static final int GL_IMAGE_2D_RECT Returned by the | |
| GL_IMAGE_3D | back to summary |
|---|---|
| public static final int GL_IMAGE_3D Returned by the | |
| GL_IMAGE_BINDING_ACCESS | back to summary |
|---|---|
| public static final int GL_IMAGE_BINDING_ACCESS Accepted by the | |
| GL_IMAGE_BINDING_FORMAT | back to summary |
|---|---|
| public static final int GL_IMAGE_BINDING_FORMAT Accepted by the | |
| GL_IMAGE_BINDING_LAYER | back to summary |
|---|---|
| public static final int GL_IMAGE_BINDING_LAYER Accepted by the | |
| GL_IMAGE_BINDING_LAYERED | back to summary |
|---|---|
| public static final int GL_IMAGE_BINDING_LAYERED Accepted by the | |
| GL_IMAGE_BINDING_LEVEL | back to summary |
|---|---|
| public static final int GL_IMAGE_BINDING_LEVEL Accepted by the | |
| GL_IMAGE_BINDING_NAME | back to summary |
|---|---|
| public static final int GL_IMAGE_BINDING_NAME Accepted by the | |
| GL_IMAGE_BUFFER | back to summary |
|---|---|
| public static final int GL_IMAGE_BUFFER Returned by the | |
| GL_IMAGE_CUBE | back to summary |
|---|---|
| public static final int GL_IMAGE_CUBE Returned by the | |
| GL_IMAGE_CUBE_MAP_ARRAY | back to summary |
|---|---|
| public static final int GL_IMAGE_CUBE_MAP_ARRAY Returned by the | |
| GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS | back to summary |
|---|---|
| public static final int GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS Returned in the | |
| GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE | back to summary |
|---|---|
| public static final int GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE Returned in the | |
| GL_IMAGE_FORMAT_COMPATIBILITY_TYPE | back to summary |
|---|---|
| public static final int GL_IMAGE_FORMAT_COMPATIBILITY_TYPE Accepted by the | |
| GL_INT_IMAGE_1D | back to summary |
|---|---|
| public static final int GL_INT_IMAGE_1D Returned by the | |
| GL_INT_IMAGE_1D_ARRAY | back to summary |
|---|---|
| public static final int GL_INT_IMAGE_1D_ARRAY Returned by the | |
| GL_INT_IMAGE_2D | back to summary |
|---|---|
| public static final int GL_INT_IMAGE_2D Returned by the | |
| GL_INT_IMAGE_2D_ARRAY | back to summary |
|---|---|
| public static final int GL_INT_IMAGE_2D_ARRAY Returned by the | |
| GL_INT_IMAGE_2D_MULTISAMPLE | back to summary |
|---|---|
| public static final int GL_INT_IMAGE_2D_MULTISAMPLE Returned by the | |
| GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY | back to summary |
|---|---|
| public static final int GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY Returned by the | |
| GL_INT_IMAGE_2D_RECT | back to summary |
|---|---|
| public static final int GL_INT_IMAGE_2D_RECT Returned by the | |
| GL_INT_IMAGE_3D | back to summary |
|---|---|
| public static final int GL_INT_IMAGE_3D Returned by the | |
| GL_INT_IMAGE_BUFFER | back to summary |
|---|---|
| public static final int GL_INT_IMAGE_BUFFER Returned by the | |
| GL_INT_IMAGE_CUBE | back to summary |
|---|---|
| public static final int GL_INT_IMAGE_CUBE Returned by the | |
| GL_INT_IMAGE_CUBE_MAP_ARRAY | back to summary |
|---|---|
| public static final int GL_INT_IMAGE_CUBE_MAP_ARRAY Returned by the | |
| GL_MAX_COMBINED_IMAGE_UNIFORMS | back to summary |
|---|---|
| public static final int GL_MAX_COMBINED_IMAGE_UNIFORMS Accepted by the | |
| GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS | back to summary |
|---|---|
| public static final int GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS Accepted by the | |
| GL_MAX_FRAGMENT_IMAGE_UNIFORMS | back to summary |
|---|---|
| public static final int GL_MAX_FRAGMENT_IMAGE_UNIFORMS Accepted by the | |
| GL_MAX_GEOMETRY_IMAGE_UNIFORMS | back to summary |
|---|---|
| public static final int GL_MAX_GEOMETRY_IMAGE_UNIFORMS Accepted by the | |
| GL_MAX_IMAGE_SAMPLES | back to summary |
|---|---|
| public static final int GL_MAX_IMAGE_SAMPLES Accepted by the | |
| GL_MAX_IMAGE_UNITS | back to summary |
|---|---|
| public static final int GL_MAX_IMAGE_UNITS Accepted by the | |
| GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS | back to summary |
|---|---|
| public static final int GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS Accepted by the | |
| GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS | back to summary |
|---|---|
| public static final int GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS Accepted by the | |
| GL_MAX_VERTEX_IMAGE_UNIFORMS | back to summary |
|---|---|
| public static final int GL_MAX_VERTEX_IMAGE_UNIFORMS Accepted by the | |
| GL_PIXEL_BUFFER_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_PIXEL_BUFFER_BARRIER_BIT Accepted by the | |
| GL_SHADER_IMAGE_ACCESS_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_SHADER_IMAGE_ACCESS_BARRIER_BIT Accepted by the | |
| GL_TEXTURE_FETCH_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_TEXTURE_FETCH_BARRIER_BIT Accepted by the | |
| GL_TEXTURE_UPDATE_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_TEXTURE_UPDATE_BARRIER_BIT Accepted by the | |
| GL_TRANSFORM_FEEDBACK_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_TRANSFORM_FEEDBACK_BARRIER_BIT Accepted by the | |
| GL_UNIFORM_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_UNIFORM_BARRIER_BIT Accepted by the | |
| GL_UNSIGNED_INT_IMAGE_1D | back to summary |
|---|---|
| public static final int GL_UNSIGNED_INT_IMAGE_1D Returned by the | |
| GL_UNSIGNED_INT_IMAGE_1D_ARRAY | back to summary |
|---|---|
| public static final int GL_UNSIGNED_INT_IMAGE_1D_ARRAY Returned by the | |
| GL_UNSIGNED_INT_IMAGE_2D | back to summary |
|---|---|
| public static final int GL_UNSIGNED_INT_IMAGE_2D Returned by the | |
| GL_UNSIGNED_INT_IMAGE_2D_ARRAY | back to summary |
|---|---|
| public static final int GL_UNSIGNED_INT_IMAGE_2D_ARRAY Returned by the | |
| GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE | back to summary |
|---|---|
| public static final int GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE Returned by the | |
| GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY | back to summary |
|---|---|
| public static final int GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY Returned by the | |
| GL_UNSIGNED_INT_IMAGE_2D_RECT | back to summary |
|---|---|
| public static final int GL_UNSIGNED_INT_IMAGE_2D_RECT Returned by the | |
| GL_UNSIGNED_INT_IMAGE_3D | back to summary |
|---|---|
| public static final int GL_UNSIGNED_INT_IMAGE_3D Returned by the | |
| GL_UNSIGNED_INT_IMAGE_BUFFER | back to summary |
|---|---|
| public static final int GL_UNSIGNED_INT_IMAGE_BUFFER Returned by the | |
| GL_UNSIGNED_INT_IMAGE_CUBE | back to summary |
|---|---|
| public static final int GL_UNSIGNED_INT_IMAGE_CUBE Returned by the | |
| GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY | back to summary |
|---|---|
| public static final int GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY Returned by the | |
| GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT | back to summary |
|---|---|
| public static final int GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT Accepted by the | |
| ARBShaderImageLoadStore | back to summary |
|---|---|
| protected ARBShaderImageLoadStore() | |
| glBindImageTexture | back to summary |
|---|---|
| public static void glBindImageTexture(int unit, int texture, int level, boolean layered, int layer, int access, int format) Binds a level of a texture to an image unit.
| |
| glMemoryBarrier | back to summary |
|---|---|
| public static void glMemoryBarrier(int barriers) Defines a barrier ordering memory transactions.
| |