计算着色器中的图像原子添加

Image atomic addition in a compute shader

我有以下计算着色器:

#version 430

layout(std430, binding=0) buffer wks{
    ivec2 w[];
};

layout(r32i, binding=1) uniform writeonly iimage2D pathTex;

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

void main(){
    imageAtomicAdd(pathTex, w[0], 1); // line 12
}

这给了我这个错误:

0(12) : error C1317: qualified actual parameter #1 cannot be converted to less qualified parameter ("im")

根据OpenGL wiki

我找不到我做错了什么

根据 GLSL 4.50 规范,imageAtomicAdd() 需要具有 coherent 内存限定符的图像变量。

这是有道理的,因为原子添加需要读取旧值,向其添加一个值,然后写回结果。因此,它需要能够读取和写入图像。

要完成这项工作,您需要将声明更改为:

layout(r32i, binding=1) uniform coherent iimage2D pathTex;

顾名思义,writeonly 仅适用于专门写入图像的图像操作,例如 imageStore()