我有以下计算着色器:
#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")
答案 0 :(得分:3)
根据GLSL 4.50规范,imageAtomicAdd()
需要具有coherent
内存限定符的图像变量。
这是有道理的,因为原子添加需要读取旧值,为其添加值,并回写结果。因此,它需要能够读取和写入图像。
要使其工作,您需要将声明更改为:
layout(r32i, binding=1) uniform coherent iimage2D pathTex;
如名称所示,writeonly
仅适用于专门写入图像的图像操作,例如imageStore()
。