使用clCreateEventFromGLsyncKHR扩展函数时链接错误

时间:2013-11-19 20:54:30

标签: c++ interop opencl lnk2019

我最近开始将OpenCL整合到我的OpenGL应用程序中,该应用程序渲染了一个基本的粒子系统,两个工作之间的基本互操作 - 没有事件 - 很好。但是,尝试使用clCreateEventFromGLsyncKHR函数以提高性能而不必调用glFinishclFinish,我无法获得正在运行的程序,因为程序抱怨以下内容错误:

error LNK2019: unresolved external symbol _clCreateEventFromGLsyncKHR

我试图使用用于获取扩展函数指针(clGetExtensionFunctionAddressForPlatformclGetExtensionFunctionAddress)的两个提供的函数,但由于我无法理解的原因,我无法使其工作。

示例代码:

#include <CL/cl_gl_ext.h>

typedef cl_event (*PFNCLCREATEEVENTFROMGLSYNCKHR) (cl_context context, cl_GLsync sync, cl_int *errcode_ret);

PFNCLCREATEEVENTFROMGLSYNCKHR clCreateEventFromGLsyncKHR = (PFNCLCREATEEVENTFROMGLSYNCKHR)clGetExtensionFunctionAddressForPlatform(opencl::target::inst()->platform(), "clCreateEventFromGLsyncKHR");

GLsync sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);

cl_event gl_event = clCreateEventFromGLsyncKHR(opencl::contexts["GL_CL_context"]->_get(), sync, NULL );

有人会帮助我理解我的错误吗?

对于那些感兴趣的人:

Name:                        GeForce GT 740M
Vendor:                  NVIDIA Corporation
Device OpenCL C version:             OpenCL C 1.1 
Driver version:              327.23
Profile:                     FULL_PROFILE
Version:                     OpenCL 1.1 CUDA
Extensions:                  cl_khr_byte_addressable_store cl_khr_icd cl_khr_gl_sharing cl_nv_d3d9_sharing cl_nv_d3d10_sharing cl_khr_d3d10_sharing cl_nv_d3d11_sharing cl_nv_compiler_options 
cl_nv_device_attribute_query cl_nv_pragma_unroll  cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics 
cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_fp64 

更新 如果我使用支持cl_khr_gl_event扩展名的设备,上面的代码仍然无效

1 个答案:

答案 0 :(得分:0)

您的设备不支持cl_khr_gl_event扩展名。使用clCreateEventFromGLsyncKHR方法需要该扩展名。如上所述here。通常,作为扩展结束/开始一部分的所有方法都在其名称中包含KHR / NV / AMD。

您的代码的另一个问题是,您还没有启用扩展程序,您必须通过定义以下内容来执行此操作:

#include <CL/cl_gl_ext.h>