GL_OES_shader_image_atomic#

Supported Hardware#

Series6, Series6XE, Series6XT

Valid APIs#

OpenGL ES 3.x

Description#

This extension adds GLSL built-ins that provide guaranteed atomic read/write access to images when called. Image atomic operations perform a guaranteed read/modify/write operation to a given pixel in an image without overlapping with any other shader performing another atomic operation at the same time (causing a race condition). These operations can only work on integer or unsigned integer textures. They are all labelled as imageAtomic*(), and perform the same types of atomic operations added by ES 3.1 and in many Operating Systems on the CPU:

  • imageAtomicAdd

  • imageAtomicMin

  • imageAtomicMax

  • imageAtomicAnd

  • imageAtomicOr

  • imageAtomicXor

  • imageAtomicExchange

  • imageAtomicCompSwap

These are identical to the already available atomic operations for buffer objects, but function on images instead. These functions only operate on integer or unsigned integer images.

Example#

layout(binding = 0) coherent uimage2D exampleImage;
void main()
{
    ...
    // Increment the value at the current fragment coordinate in the example image.
    imageAtomicAdd(exampleImage, gl_FragCoord.xy, 1);
    ...
}