/
redgpu
/
raygpu
Обзор
Документация
Войти
/
redgpu
/
raygpu
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
amalgamation/glslang/Test/spv.memoryScopeSemantics.comp
149 строк
13 KB
manuel
Bump glslang to 16.0.0
31 окт 2025, 02:24
31 окт 2025, 02:24
2d4c73f
Код
Авторство
О чём код?
#version 450 #extension GL_KHR_memory_scope_semantics : require #extension GL_ARB_gpu_shader_int64 : require #pragma use_vulkan_memory_model shared uint value; shared int atomi; shared uint atomu; layout(binding = 0, r32ui) workgroupcoherent uniform uimage2D imageu; layout(binding = 1, r32i) volatile coherent uniform iimage2D imagei; layout(binding = 5, r32i) nonprivate uniform iimage2D imagej[2]; layout (binding = 2) buffer BufferU { workgroupcoherent uint x; } bufferu; layout (binding = 3) coherent buffer BufferI { uint x; } bufferi; struct A { uint x[2]; }; layout (binding = 4) volatile buffer BufferJ { subgroupcoherent A a; } bufferj[2]; layout (binding = 6) nonprivate uniform sampler2D samp[2]; layout (binding = 7) nonprivate uniform BufferK { uint x; } bufferk; shared uint64_t atomu64; shared int64_t atomi64; layout (binding = 8) volatile buffer BufferL { uint x; } bufferl; layout (binding = 9) buffer BufferM { volatile uint x; } bufferm; layout(binding = 10, r32i) volatile coherent uniform iimage2DMS imageMS; void main() { int origi = atomicAdd(atomi, 3, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsRelease); uint origu = atomicAnd(atomu, value); origi = atomicLoad(atomi, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); atomicStore(atomu, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease); origi = imageAtomicLoad(imagei, ivec2(0,0), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); origu = imageAtomicAdd(imageu, ivec2(0,0), 3u, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); imageAtomicStore(imageu, ivec2(0,0), 4u, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease); origu = atomicOr(atomu, 7u, gl_ScopeDevice, 0, 0); origu = atomicXor(atomu, 7u, gl_ScopeDevice, 0, 0); origu = atomicMin(atomu, value, gl_ScopeDevice, 0, 0); origi = atomicMax(atomi, 7, gl_ScopeDevice, 0, 0); origi = atomicExchange(atomi, origi, gl_ScopeDevice, 0, 0); origu = atomicCompSwap(atomu, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire); atomicAdd(bufferu.x, 1, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsRelease); uint y; y = bufferu.x; bufferu.x = y; y = bufferi.x; y = bufferj[0].a.x[1]; bufferi.x = y; bufferj[0].a.x[1] = y; bufferj[0].a = bufferj[1].a; bufferi.x = bufferk.x; imageLoad(imagei, ivec2(0,0)); imageLoad(imagej[0], ivec2(0,0)); imageStore(imagej[1], ivec2(0,0), ivec4(0,0,0,0)); texture(samp[0], vec2(0,0)); atomu64 = atomicMax(atomu64, uint64_t(7), gl_ScopeDevice, 0, 0); atomicCompSwap(atomi64, int64_t(10), int64_t(atomu64), gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire); y = bufferl.x; atomicAdd(bufferl.x, 1); atomicOr(bufferm.x, 2); imageAtomicAdd(imagei, ivec2(0,0), 3); atomicAdd(bufferu.x, 4u, gl_ScopeDevice, 0, 0); atomicAdd(bufferu.x, 5u, gl_ScopeDevice, 0, gl_SemanticsVolatile); imageAtomicStore(imageMS, ivec2(0,0), 1, 4, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease); imageAtomicStore(imagei, ivec2(0,0), -7, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease); controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, 0, 0); controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsRelease); controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease); controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible); controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsMakeAvailable); controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible | gl_SemanticsMakeAvailable); memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsRelease); memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease); memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible); memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsMakeAvailable); memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible | gl_SemanticsMakeAvailable); origu = atomicLoad(atomu, gl_ScopeDevice, 0, 0); origu = atomicLoad(atomu, gl_ScopeDevice, 0, gl_SemanticsVolatile); origu = atomicLoad(atomu, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); origu = atomicLoad(atomu, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire); origu = atomicLoad(atomu, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsVolatile); origu = atomicLoad(atomu, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible); origu = atomicLoad(atomu, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire | gl_SemanticsMakeVisible | gl_SemanticsVolatile); atomicStore(atomu, 10U, gl_ScopeDevice, 0, 0); atomicStore(atomu, 10U, gl_ScopeDevice, 0, gl_SemanticsVolatile); atomicStore(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease); atomicStore(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsRelease); atomicStore(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsVolatile); atomicStore(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsMakeAvailable); atomicStore(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsRelease | gl_SemanticsMakeAvailable | gl_SemanticsVolatile); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, 0, 0); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, 0, gl_SemanticsVolatile); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsVolatile); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsVolatile); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsVolatile); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsMakeAvailable); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible | gl_SemanticsMakeAvailable); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible | gl_SemanticsMakeAvailable); origu = atomicAnd(atomu, 10U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible | gl_SemanticsMakeAvailable | gl_SemanticsVolatile); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, 0, 0, 0, 0); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, 0, gl_SemanticsVolatile, 0, gl_SemanticsVolatile); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire, 0, 0); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease, 0, 0); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease, 0, 0); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsVolatile, 0, gl_SemanticsVolatile); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsVolatile, 0, gl_SemanticsVolatile); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsVolatile, 0, gl_SemanticsVolatile); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible, 0, 0); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsMakeAvailable, 0, 0); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible | gl_SemanticsMakeAvailable, 0, 0); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible | gl_SemanticsMakeAvailable | gl_SemanticsVolatile, 0, gl_SemanticsVolatile); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsVolatile, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsVolatile); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire | gl_SemanticsMakeVisible | gl_SemanticsVolatile, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire | gl_SemanticsMakeVisible | gl_SemanticsVolatile); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsVolatile, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsVolatile); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsMakeAvailable, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible | gl_SemanticsMakeAvailable, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible | gl_SemanticsMakeAvailable, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible); atomicCompSwap(atomu, 10U, 20U, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible | gl_SemanticsMakeAvailable | gl_SemanticsVolatile, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire | gl_SemanticsMakeVisible | gl_SemanticsVolatile); }