/
redgpu
/
raygpu
Обзор
Документация
Войти
/
redgpu
/
raygpu
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
amalgamation/glslang/Test/spv.atomicFloat_Error.comp
112 строк
6 KB
manuel
Bump glslang to 16.0.0
31 окт 2025, 02:24
31 окт 2025, 02:24
2d4c73f
Код
Авторство
О чём код?
#version 450 core #extension GL_KHR_memory_scope_semantics : enable #pragma use_vulkan_memory_model layout(local_size_x = 16, local_size_y = 16) in; layout(binding = 0) buffer Buffer { int datai; float dataf; double datad; } buf; shared int atomi; shared float atomf; shared double atomd; layout(binding = 0, r32f) volatile coherent uniform image1D fimage1D; layout(binding = 1, r32f) volatile coherent uniform image2D fimage2D; void undeclared_errors() { //atomicAdd float resultf = 0; resultf = atomicAdd(atomf, 3.0); resultf = atomicAdd(atomf, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); resultf = atomicAdd(buf.dataf, 3.0); resultf = atomicAdd(buf.dataf, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); double resultd = 0; resultd = atomicAdd(atomd, 3.0); resultd = atomicAdd(atomd, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); resultd = atomicAdd(buf.datad, 3.0); resultd = atomicAdd(buf.datad, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); //atomicExchange resultf = atomicExchange(buf.dataf, resultf); resultf = atomicExchange(buf.dataf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease); resultf = atomicExchange(atomf, resultf); resultf = atomicExchange(atomf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease); buf.dataf += resultf; resultd = atomicExchange(buf.datad, resultd); resultd = atomicExchange(buf.datad, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease); resultd = atomicExchange(atomd, resultd); resultd = atomicExchange(atomd, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease); buf.datad += resultd; //atomic load/store resultf = atomicLoad(buf.dataf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsAcquire); atomicStore(buf.dataf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelease); resultf = atomicLoad(atomf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsAcquire); atomicStore(atomf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelease); buf.dataf += resultf; resultd = atomicLoad(buf.datad, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsAcquire); atomicStore(buf.datad, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelease); resultd = atomicLoad(atomd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsAcquire); atomicStore(atomd, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelease); buf.datad += resultd; // image atomics: atomf = imageAtomicAdd(fimage2D, ivec2(0,0), 2.0); atomf = imageAtomicAdd(fimage2D, ivec2(1,1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsAcquireRelease); atomf = imageAtomicExchange(fimage2D, ivec2(1,0), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsAcquireRelease); atomf = imageAtomicLoad(fimage2D, ivec2(1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsAcquire); imageAtomicStore(fimage2D, ivec2(2,2), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelease); buf.dataf += atomf; } #extension GL_EXT_shader_atomic_float: enable void main() { float resultf = 0; double resultd = 0; int resulti = 0; //atomicAdd resultf = atomicAdd(atomi); resultf = atomicAdd(atomi, 3.0); resultf = atomicAdd(atomi, resultf, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); resultf = atomicAdd(atomi, resultf, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease); //atomicExchange resultf = atomicExchange(buf.datai); resultf = atomicExchange(buf.datai, resultf); resultf = atomicExchange(buf.datai, resultf, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease); resultf = atomicExchange(buf.datai, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease); resultf = atomicExchange(atomi, resultf); resultf = atomicExchange(atomi, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease); buf.dataf += resultf; //atomic load/store resultf = atomicLoad(buf.datai, gl_StorageSemanticsShared, gl_SemanticsAcquire); atomicStore(buf.datai, resulti, gl_StorageSemanticsShared, gl_SemanticsRelease); // image atomics: atomf = imageAtomicAdd(fimage1D, ivec2(0,0), 2.0); atomf = imageAtomicAdd(fimage2D, ivec3(0,0,0), 2.0); atomf = imageAtomicAdd(fimage2D, 2.0); atomf = imageAtomicExchange(fimage1D, ivec2(1,0), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsAcquireRelease); atomf = imageAtomicExchange(fimage2D, 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsAcquireRelease); atomf = imageAtomicExchange(fimage2D, ivec3(1,0,1), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsAcquireRelease); atomf = imageAtomicLoad(fimage1D, ivec2(1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsAcquire); atomf = imageAtomicLoad(fimage2D, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsAcquire); atomf = imageAtomicLoad(fimage2D, ivec3(1,1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsAcquire); imageAtomicStore(fimage1D, ivec2(2,2), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelease); imageAtomicStore(fimage2D, atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelease); imageAtomicStore(fimage2D, ivec3(2,2,1), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelease); buf.dataf += atomf; }