2

次の計算シェーダーがあります。

#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によると、私が間違っていることを見つけることができません

4

1 に答える 1

4

GLSL 4.50 仕様によると、メモリ修飾子imageAtomicAdd()を持つイメージ変数が必要です。coherent

アトミックな追加では古い値を読み取り、値を追加して、結果を書き戻す必要があるため、これは理にかなっています。したがって、イメージの読み取りと書き込みの両方ができる必要があります。

これを機能させるには、宣言を次のように変更する必要があります。

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

名前が示すwriteonlyように、 は、 のように、イメージに排他的に書き込むイメージ操作でのみ機能しimageStore()ます。

于 2015-02-05T05:54:24.653 に答える