OpenGL.GL.ARB.shader_image_load_store
OpenGL extension ARB.shader_image_load_store
This module customises the behaviour of the
OpenGL.raw.GL.ARB.shader_image_load_store to provide a more
Python-friendly API
Overview (from the spec)
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.
The official definition of this extension is available here:
http://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt
Functions
Constants
GL_ALL_BARRIER_BITS (4294967295)
GL_ATOMIC_COUNTER_BARRIER_BIT (4096)
GL_BUFFER_UPDATE_BARRIER_BIT (512)
GL_COMMAND_BARRIER_BIT (64)
GL_ELEMENT_ARRAY_BARRIER_BIT (2)
GL_FRAMEBUFFER_BARRIER_BIT (1024)
GL_IMAGE_1D (36940)
GL_IMAGE_1D_ARRAY (36946)
GL_IMAGE_2D (36941)
GL_IMAGE_2D_ARRAY (36947)
GL_IMAGE_2D_MULTISAMPLE (36949)
GL_IMAGE_2D_MULTISAMPLE_ARRAY (36950)
GL_IMAGE_2D_RECT (36943)
GL_IMAGE_3D (36942)
GL_IMAGE_BINDING_ACCESS (36670)
GL_IMAGE_BINDING_FORMAT (36974)
GL_IMAGE_BINDING_LAYER (36669)
GL_IMAGE_BINDING_LAYERED (36668)
GL_IMAGE_BINDING_LEVEL (36667)
GL_IMAGE_BINDING_NAME (36666)
GL_IMAGE_BUFFER (36945)
GL_IMAGE_CUBE (36944)
GL_IMAGE_CUBE_MAP_ARRAY (36948)
GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS (37065)
GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE (37064)
GL_IMAGE_FORMAT_COMPATIBILITY_TYPE (37063)
GL_INT_IMAGE_1D (36951)
GL_INT_IMAGE_1D_ARRAY (36957)
GL_INT_IMAGE_2D (36952)
GL_INT_IMAGE_2D_ARRAY (36958)
GL_INT_IMAGE_2D_MULTISAMPLE (36960)
GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY (36961)
GL_INT_IMAGE_2D_RECT (36954)
GL_INT_IMAGE_3D (36953)
GL_INT_IMAGE_BUFFER (36956)
GL_INT_IMAGE_CUBE (36955)
GL_INT_IMAGE_CUBE_MAP_ARRAY (36959)
GL_MAX_COMBINED_IMAGE_UNIFORMS (37071)
GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS (36665)
GL_MAX_FRAGMENT_IMAGE_UNIFORMS (37070)
GL_MAX_GEOMETRY_IMAGE_UNIFORMS (37069)
GL_MAX_IMAGE_SAMPLES (36973)
GL_MAX_IMAGE_UNITS (36664)
GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS (37067)
GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS (37068)
GL_MAX_VERTEX_IMAGE_UNIFORMS (37066)
GL_PIXEL_BUFFER_BARRIER_BIT (128)
GL_SHADER_IMAGE_ACCESS_BARRIER_BIT (32)
GL_TEXTURE_FETCH_BARRIER_BIT (8)
GL_TEXTURE_UPDATE_BARRIER_BIT (256)
GL_TRANSFORM_FEEDBACK_BARRIER_BIT (2048)
GL_UNIFORM_BARRIER_BIT (4)
GL_UNSIGNED_INT_IMAGE_1D (36962)
GL_UNSIGNED_INT_IMAGE_1D_ARRAY (36968)
GL_UNSIGNED_INT_IMAGE_2D (36963)
GL_UNSIGNED_INT_IMAGE_2D_ARRAY (36969)
GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE (36971)
GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY (36972)
GL_UNSIGNED_INT_IMAGE_2D_RECT (36965)
GL_UNSIGNED_INT_IMAGE_3D (36964)
GL_UNSIGNED_INT_IMAGE_BUFFER (36967)
GL_UNSIGNED_INT_IMAGE_CUBE (36966)
GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY (36970)
GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT (1)