0

カーネルをコンパイルすると、次のエラーが発生します。

    Error: (0): Texture/surface reference must be simple name

私はそれを可能な限り次のカーネル例に減らしました。これは問題を示しています。

__kernel void accum(__global __read_only image2d_t accumulateds) {
    int2 pos = (int2)(get_global_id(0),get_global_id(1));
    float4 accum = read_imagef(accumulateds,CLK_RGBA|CLK_ADDRESS_CLAMP|CLK_FILTER_NEAREST,pos);
}

役に立たないフォーラムを見つけました。投稿しますが、それ以外の場合は、このエラーについては何も言及されていません。さらに、上記の例に似たサンプルコードを見てきました。私のGPU(GeForce 580M GTX)は、画像の読み取りをサポートする必要があります(たとえば、書き込みをサポートします)。

4

2 に答える 2

2

よく考えてみたところ、原因がわかりました。私の推測では、read_imagefは理解できないマクロです| 命令なので、プリプロセッサチェックをハードコーディングしました。どうやら、この問題はNVIDIAハードウェア(またはおそらく私の特定の実装)に固有のものです。最初の方法で書かれたコードは他の人にも機能するからです。

方法1(失敗):

float4 my_value = read_imagef(my_image,CLK_FILTER_NEAREST|CLK_ADDRESS_CLAMP,my_position);

方法2(動作):

sampler_t my_sampler = CLK_FILTER_NEAREST|CLK_ADDRESS_CLAMP;
float4 my_value = read_imagef(my_image,my_sampler,my_position);

追記として、私の元のコードでは、CLK_RGBAで|編集しました。これは正しくないため、エラーが発生します。ここのフィールドの1つである必要があります。

于 2012-06-24T04:33:33.957 に答える
0

まず、質問や投稿された回答にコメントを追加できなかったので、これを回答として投稿しています。申し訳ありません。

したがって、指定したサンプラーフラグを追加した後でも、これと同じエラーが発生します。パラメータとしてカーネルに渡そうとしましたが、エラーが解決しません。

于 2012-07-10T23:36:23.103 に答える