OpenCL纹理/表面引用必须是简单名称

时间:2012-06-23 01:11:48

标签: opencl

编译内核时出现以下错误:

    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);
}

我发现了一些无用的forumposts。但是,否则没有提到任何错误。另外,我已经看到了类似于上面示例的示例代码。我的GPU(GeForce 580M GTX)应该支持读取图像(一方面它支持写入)。

2 个答案:

答案 0 :(得分: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中编辑。这是不正确的,会导致错误。它必须是here字段之一。

答案 1 :(得分:0)

首先,我无法在问题或发布的答案中添加评论,因此我将此作为答案发布。对不起。

所以即使按照您指定的方式添加了采样器标志,我也会遇到同样的错误。我甚至尝试将它作为参数传递给内核,但错误仍然存​​在。