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

时间:2015-02-04 11:49:25

标签: opengl shader 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

,我无法找到我做错的事情

1 个答案:

答案 0 :(得分:3)

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

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

要使其工作,您需要将声明更改为:

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

如名称所示,writeonly仅适用于专门写入图像的图像操作,例如imageStore()