编译内核时出现以下错误:
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);
}
我发现了一些无用的forum。 posts。但是,否则没有提到任何错误。另外,我已经看到了类似于上面示例的示例代码。我的GPU(GeForce 580M GTX)应该支持读取图像(一方面它支持写入)。
答案 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)
首先,我无法在问题或发布的答案中添加评论,因此我将此作为答案发布。对不起。
所以即使按照您指定的方式添加了采样器标志,我也会遇到同样的错误。我甚至尝试将它作为参数传递给内核,但错误仍然存在。