yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
579d34d5
main
1#version 450 2#extension GL_KHR_memory_scope_semantics : require 3 4shared uint value; 5layout (binding = 0) buffer BufferU { coherent uint x; } bufferu; 6layout(binding = 1, r32ui) coherent uniform uimage2D imageu; 7 8void main() 9{ 10 uint origu; 11 12 // Acquire must not be used with (image) atomic store 13 atomicStore(bufferu.x, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); 14 imageAtomicStore(imageu, ivec2(0,0), value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); 15 16 // Release must not be used with (image) atomic load 17 origu = atomicLoad(bufferu.x, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease); 18 origu = imageAtomicLoad(imageu, ivec2(0,0), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease); 19 20 // AcquireRelease must not be used with (image) atomic load/store 21 atomicStore(bufferu.x, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); 22 imageAtomicStore(imageu, ivec2(0,0), value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); 23 origu = atomicLoad(bufferu.x, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); 24 origu = imageAtomicLoad(imageu, ivec2(0,0), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); 25 26 // Relaxed must not be used with memoryBarrier 27 memoryBarrier(gl_ScopeWorkgroup, 0, 0); 28 29 // Illegal semantics bits 30 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, 0, gl_StorageSemanticsBuffer, 0, 0); 31 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_StorageSemanticsBuffer | gl_SemanticsAcquireRelease, 0, 0); 32 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease, 0, gl_StorageSemanticsBuffer); 33 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease, gl_StorageSemanticsBuffer, gl_StorageSemanticsBuffer | gl_SemanticsAcquire); 34 35 // Illegal storage class semantics bits 36 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_SemanticsAcquire, gl_SemanticsAcquire, 0, 0); 37 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_SemanticsAcquire, gl_SemanticsAcquire, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); 38 39 // Semantics must not have multiple memory order bits set 40 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsRelease, 0, 0); 41 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsAcquireRelease, 0, 0); 42 43 // Storage class semantics must be non-zero when used with a non-relaxed memory order 44 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, 0, gl_SemanticsAcquireRelease, 0, 0); 45 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease, 0, gl_SemanticsAcquire); 46 47 // Semantics must have a non-relaxed memory order when used with non-zero storage class semantics 48 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, 0, 0, 0); 49 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsVolatile, 0, gl_SemanticsVolatile); 50 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease, gl_StorageSemanticsBuffer, 0); 51 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsVolatile, gl_StorageSemanticsBuffer, gl_SemanticsVolatile); 52 imageAtomicAdd(imageu, ivec2(0,0), value, gl_ScopeDevice, gl_StorageSemanticsImage, 0); 53 imageAtomicAdd(imageu, ivec2(0,0), value, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsVolatile); 54 55 // MakeAvailable requires Release or AcquireRelease 56 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, 0, gl_SemanticsMakeAvailable, 0, 0); 57 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeAvailable, 0, 0); 58 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsMakeAvailable, 0, gl_SemanticsMakeAvailable); 59 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsMakeAvailable, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeAvailable); 60 61 // MakeVisible requires Acquire or AcquireRelease 62 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, 0, gl_SemanticsMakeVisible, 0, 0); 63 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsMakeVisible, 0, 0); 64 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible, 0, gl_SemanticsMakeVisible); 65 66 // Volatile must not be used with memoryBarrier or controlBarrier 67 memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsVolatile); 68 controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, 0, gl_SemanticsVolatile); 69 controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsVolatile); 70 71 // SemUnequal must not be Release or AcquireRelease 72 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); 73 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease, gl_StorageSemanticsBuffer, gl_SemanticsRelease); 74 75 // SemUnequal must not be Acquire unless SemEqual is Acquire or AcquireRelease 76 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, 0, 0, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); 77 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); 78 79 // SemUnequal must not include MakeVisible unless SemEqual also includes MakeVisible 80 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible); 81 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible); 82 83 // SemStorageUnequal must not include any option that is not present in SemStorageEqual 84 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire, gl_StorageSemanticsShared, gl_SemanticsAcquire); 85 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); 86 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire); 87 88 // SemEqual and SemUnequal must either both include Volatile or neither 89 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, 0, gl_SemanticsVolatile, 0, 0); 90 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, 0, 0, 0, gl_SemanticsVolatile); 91 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsVolatile, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); 92 atomicCompSwap(bufferu.x, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsVolatile); 93}