j00*_*0hi 5 nvidia glsl vulkan
对于OpenGL,NV_shader_atomic_float存在Nvidia扩展[1] ,该扩展使原子读取,修改,写入操作能够使用GLSL着色器中的浮点组件来缓冲或纹理存储。
Vulkan是否也存在此功能?我找不到有关任何启用该功能的扩展的信息。Vulkan扩展程序不提供该功能吗?
[1] https://www.khronos.org/registry/OpenGL/extensions/NV/NV_shader_atomic_float.txt
不,没有Vulkan扩展可以提供原子浮点运算(还可以吗?)。如果Nvidia看到足够的开发人员需求,便可以创建这样的扩展。
SPIR-V支持带有浮点类型的原子指令,但是Vulkan的SPIR-V环境规范当前禁止包含这些指令的SPIR-V模块:
对于Pointer指向的值,原子指令必须声明标量32位整数类型或标量64位整数类型(如果
Int64Atomics启用了此功能)。
如下:
该扩展已由 NVIDIA 于 2020 年 7 月添加,并且与所有 Vulkan 版本兼容。VK_EXT_shader_atomic_float
引用规范。描述:
此扩展允许着色器在缓冲区、工作组和图像内存上包含浮点原子操作。它还宣传了 SPIR-V AtomicFloat32AddEXT 和 AtomicFloat64AddEXT 功能,允许对浮点数进行原子加法。支持的操作包括 OpAtomicFAddEXT、OpAtomicExchange、OpAtomicLoad 和 OpAtomicStore。
gpuinfo.org上已经有一些条目表明支持该扩展。需要 NVIDIA 驱动程序 451.79.0.0 或更高版本等 Applear。