yum-mirror/glslang

git clone https://git.yummers.dev/yum-mirror/glslang

Saddamrequire constant scope and semantics operands in memorySemanticsCheck83bc342a

main
1.2 KiB24 linesraw
1#version 450
2#extension GL_KHR_memory_scope_semantics : require
3
4layout(local_size_x = 1) in;
5layout(binding = 0) buffer BufferU { coherent uint x; } bufferu;
6layout(binding = 1, r32ui) coherent uniform uimage2D imageu;
7
8void main()
9{
10    // The Scope, storage-class-semantics and semantics operands of these
11    // operations must be compile-time constants. Passing a non-constant used to
12    // crash the front end (null TIntermConstantUnion) or trip an id/immediate
13    // assert in SPIR-V generation for the Scope; each must now be diagnosed.
14    int dyn = int(gl_GlobalInvocationID.x);
15
16    uint origu = atomicAdd(bufferu.x, 1u, gl_ScopeDevice, gl_StorageSemanticsBuffer, dyn);
17    origu = atomicLoad(bufferu.x, gl_ScopeDevice, dyn, 0);
18    atomicStore(bufferu.x, 1u, dyn, gl_StorageSemanticsBuffer, gl_SemanticsRelease);
19    origu = atomicCompSwap(bufferu.x, 0u, 1u, gl_ScopeDevice, gl_StorageSemanticsBuffer,
20                           gl_SemanticsAcquireRelease, gl_StorageSemanticsBuffer, dyn);
21    imageAtomicAdd(imageu, ivec2(0, 0), 1u, gl_ScopeDevice, gl_StorageSemanticsImage, dyn);
22    memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, dyn);
23    controlBarrier(dyn, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease);
24}