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。这是不正确的,并且会导致错误。一定是这里的字段之一。

于 2012-06-24T04:33:33.957 回答
0

首先,我无法对问题或已发布的答案添加评论,因此我将其发布为答案。对于那个很抱歉。

因此,即使在添加了您指定的采样器标志后,我也会遇到同样的错误。我什至尝试将它作为参数传递给内核,但错误仍然存​​在..

于 2012-07-10T23:36:23.103 回答