slang
slang copied to clipboard
Implement "Atomic" GLSL functions to match to how much HLSL side works
This task is to implement "atomic" functions that OpenGL 4.6 spec requires.
This is also a part of the other umbrella task #3362 .
There are 32 function names related to this task and they are described in the section 8.10 and 8.11 of OpenGL 4.6 spec. The function names are listed below:
uint atomicCounterIncrement(atomic_uint c) uint atomicCounterDecrement(atomic_uint c) uint atomicCounter(atomic_uint c) uint atomicCounterAdd(atomic_uint c, uint data) uint atomicCounterSubtract(atomic_uint c, uint data) uint atomicCounterMin(atomic_uint c, uint data) uint atomicCounterMax(atomic_uint c, uint data) uint atomicCounterAnd(atomic_uint c, uint data) uint atomicCounterOr(atomic_uint c, uint data) A uint atomicCounterXor(atomic_uint c, uint data) uint atomicCounterExchange(atomic_uint c, uint data) uint atomicCounterCompSwap(atomic_uint c, uint compare, uint data) uint atomicAdd(inout uint mem, uint data) int atomicAdd(inout int mem, int data) uint atomicMin(inout uint mem, uint data) int atomicMin(inout int mem, int data) uint atomicMax(inout uint mem, uint data) int atomicMax(inout int mem, int data) uint atomicAnd(inout uint mem, uint data) int atomicAnd(inout int mem, int data) uint atomicOr(inout uint mem, uint data) int atomicOr(inout int mem, int data) uint atomicXor(inout uint mem, uint data) int atomicXor(inout int mem, int data) uint atomicExchange(inout uint mem, uint data) int atomicExchange(inout int mem, int data) uint atomicCompSwap(inout uint mem, uint compare, uint data) int atomicCompSwap(inout int mem, int compare, int data)
in addition to the provided: various extra type support via: { GL_EXT_shader_atomic_float
GL_EXT_shader_atomic_float2 & GL_EXT_shader_explicit_arithmetic_types
GL_EXT_shader_atomic_int64 } (+16 for int64 uint64) (+12 for float float16_t double)
total: 32+16+12 = 60
(hlsl supports these types for the most part, this is to reach parity)
and likley need to add the functions at a later date since it connects more with GL_KHR_memory_scope_semantics: atomicLoad atomicStore (+2*7 functions = 14)