OpenGL中GLSL 64位原子函数使用遇编译错误求助
解决GLSL中64位整数原子函数的编译问题
关于GL_EXT_shader_atomic_int64扩展不支持的问题
- 该扩展属于厂商联合扩展,仅部分GPU和驱动版本支持。如果你使用的是NVIDIA显卡,直接使用
GL_NV_shader_atomic_int64即可,无需纠结EXT版本的支持问题。
关于GL_NV_shader_atomic_int64下atomicCompSwap的编译错误
你的代码存在两个关键问题,导致参数不匹配的编译错误:
1. 原子函数需要传入指针而非直接变量值
atomicCompSwap的第一个参数要求是指向64位整数的指针,但你直接传入了buffer中的test变量(值传递),正确做法是取变量的地址:&test。
2. 64位整数初始化应使用64位字面量
你用0u(32位无符号整数)初始化uint64_t变量,虽然隐式转换合法,但部分编译器可能出现类型解析异常,建议改用0ULL(64位无符号整数字面量)。
修正后的代码如下:
#extension GL_ARB_gpu_shader_int64 : require #extension GL_NV_shader_atomic_int64 : require layout(std430, binding = 0) coherent buffer Test{ uint64_t test; }; void main() { uint64_t origin_key = 0ULL; uint64_t key = 1ULL; atomicCompSwap(&test, origin_key, key); }
额外注意事项
- 确保你的NVIDIA显卡驱动版本足够新,
GL_NV_shader_atomic_int64扩展从Kepler架构的GPU开始支持。 - 编译时需开启对64位整数和NV原子扩展的支持,比如使用glslangValidator时,添加
-ext GL_ARB_gpu_shader_int64 -ext GL_NV_shader_atomic_int64参数。
内容的提问来源于stack exchange,提问作者wangsy
相关产品推荐
相关产品推荐

