Vulkan是否支持着色器中的原子浮点运算?

时间:2018-12-05 16:11:20

标签: glsl nvidia vulkan

对于OpenGL,存在Nvidia扩展NV_shader_atomic_float [1],它使原子读取,修改,写入操作能够使用GLSL着色器中的浮点组件来缓冲或构造内存。

Vulkan是否也存在此功能?我找不到有关任何启用该功能的扩展的信息。 Vulkan扩展程序不提供该功能吗?

[1] https://www.khronos.org/registry/OpenGL/extensions/NV/NV_shader_atomic_float.txt

2 个答案:

答案 0 :(得分:3)

否,没有提供原子浮点运算的Vulkan扩展(还可以吗?)。如果开发人员有足够的需求,Nvidia大概可以创建这样的扩展。

SPIR-V支持具有浮点类型的原子指令,但是Vulkan's SPIR-V environment spec当前禁止包含那些指令的SPIR-V模块:

  

原子指令必须声明标量32位整数类型,或者如果启用了Int64Atomics功能,则声明标量64位整数类型,用于指向的值指针

答案 1 :(得分:2)

这里是:VK_EXT_shader_atomic_float
该扩展由NVIDIA在2020年7月添加,并与所有Vulkan版本兼容。

引用规范。说明:

此扩展允许着色器在缓冲区,工作组和图像内存上包含浮点原子操作。它还宣传SPIR-V AtomicFloat32AddEXT和AtomicFloat64AddEXT功能,该功能允许在浮点数上进行原子加法。支持的操作包括OpAtomicFAddEXT,OpAtomicExchange,OpAtomicLoad和OpAtomicStore。

gpuinfo.org上已经有一些条目表示对扩展程序的支持,但是似乎需要NVIDIA驱动程序451.79.0.0或更高版本。