Недавно я начал включать OpenCL в мое приложение OpenGL, которое отображает базовую систему частиц, основное взаимодействие - без событий - между двумя работами отлично. Однако, попробовав использовать функцию clCreateEventFromGLsyncKHR
для того, чтобы улучшить производительность, вместо того, чтобы позвонить glFinish
и clFinish
, я не могу получить выполняемую программу, как программа жалуется следующее сообщение об ошибке:Ошибка связи при использовании функции расширения clCreateEventFromGLsyncKHR
error LNK2019: unresolved external symbol _clCreateEventFromGLsyncKHR
Я попытался использовать обе предоставленные функции, используемые для получения указателей функции расширения (clGetExtensionFunctionAddressForPlatform
, clGetExtensionFunctionAddress
), но по причинам, которые я не могу понять, я не могу заставить его работать.
Пример кода:
#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
Update Приведенный выше код еще не работает, если я использую устройство, которое поддерживает расширение cl_khr_gl_event
Что произойдет, если изменить имя вашей переменной 'clCreateEventFromGLsyncKHR' к что-то другое? Является ли это переменной или чем-то еще, что вызывает ошибку, является то, что я пытаюсь выяснить ... –
Я получаю ошибку, связанную с неопределенным значением – user1087765
... когда я пытаюсь выполнить вызов функции – user1087765