首页 文章

使用Apple的openclc进行OpenCL扩展

提问于
浏览
1

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

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

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

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

1 回答

  • 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> Build Settings> OpenCL - Preprocessing,并将 cl_khr_fp64 添加到 OPENCL_PREPROCESSOR_DEFINITIONS 部分 .

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

相关问题