blob: 58fcf965038c10363f2d9b3f0a0565ef36e3ee8f [file] [edit]
#version 450
#extension GL_KHR_memory_scope_semantics : require
layout(local_size_x = 1) in;
layout(binding = 0) buffer BufferU { coherent uint x; } bufferu;
layout(binding = 1, r32ui) coherent uniform uimage2D imageu;
void main()
{
// The Scope, storage-class-semantics and semantics operands of these
// operations must be compile-time constants. Passing a non-constant used to
// crash the front end (null TIntermConstantUnion) or trip an id/immediate
// assert in SPIR-V generation for the Scope; each must now be diagnosed.
int dyn = int(gl_GlobalInvocationID.x);
uint origu = atomicAdd(bufferu.x, 1u, gl_ScopeDevice, gl_StorageSemanticsBuffer, dyn);
origu = atomicLoad(bufferu.x, gl_ScopeDevice, dyn, 0);
atomicStore(bufferu.x, 1u, dyn, gl_StorageSemanticsBuffer, gl_SemanticsRelease);
origu = atomicCompSwap(bufferu.x, 0u, 1u, gl_ScopeDevice, gl_StorageSemanticsBuffer,
gl_SemanticsAcquireRelease, gl_StorageSemanticsBuffer, dyn);
imageAtomicAdd(imageu, ivec2(0, 0), 1u, gl_ScopeDevice, gl_StorageSemanticsImage, dyn);
memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, dyn);
controlBarrier(dyn, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease);
}