gpt4 book ai didi

c++ - 使用 clCreateEventFromGLsyncKHR 扩展函数时出现链接错误

转载 作者:太空宇宙 更新时间:2023-11-04 13:59:00 26 4
gpt4 key购买 nike

我最近开始将 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 扩展的设备,上面的代码仍然不起作用

最佳答案

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

您的代码的另一个问题是您还没有启用扩展,您必须通过定义以下内容来完成:

#include <CL/cl_gl_ext.h>

关于c++ - 使用 clCreateEventFromGLsyncKHR 扩展函数时出现链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20081798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com