You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:12:52