使用Apple的openclc进行OpenCL扩展

时间:2014-01-06 02:20:32

标签: opencl

我有兴趣使用OpenCL的可选扩展,它为OpenCL语言添加了某些功能(特别是cl_khr_gl_msaa_sharing)。我正在使用Apple的openclc在构建时编译我的OpenCL源代码,但是,由于调用这些新函数,openclc无法编译我的源代码(见下文)。我正在运行的机器确实支持扩展,如果我在运行时使用clCreateProgramWithSource()和clBuildProgram(),一切都很好。

显然,任何构建时工具都无法知道运行时支持哪些扩展。但是,我希望能够在构建时编译我的源,假设扩展存在,然后在运行时查询扩展的存在,并在扩展不存在时优雅地降级。有没有这样做的机制?

OpenCL half4 type Apple OS X的最佳答案建议在OpenCL程序中使用预处理器定义来检测扩展,但这对我没有帮助,因为这些定义是在构建时进行评估的。

特定的构建时编译器错误是这样的:错误:target不支持深度和MSAA纹理

1 个答案:

答案 0 :(得分:1)

我有类似的问题;我希望编译器假设扩展cl_khr_fp64存在,所以我可以使用样板代码

#ifdef cl_khr_fp64
    #pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64)
    #pragma OPENCL EXTENSION cl_amd_fp64 : enable
#else
    #error "Double precision floating point not supported by OpenCL implementation."
#endif

并将其编译为双精度可用。

解决方案(从XCode 6.3.1开始)选择Target>构建设置> OpenCL - 预处理,并将cl_khr_fp64添加到OPENCL_PREPROCESSOR_DEFINITIONS部分。

然后编译代码而不在XCode中抱怨,假设我的源代码中没有语法错误(这是我想要检查的)。