0

在 OpenGL 中使用 cl_command_queue 结果之前,我想在 OpenCL 中保存对 clFinish() 的调用(我在 OpenCL/GL 中使用了共享图像/纹理)。

我在“OpenCL Programming by Example”(第 243 页)一书中发现,使用 glCreateSyncFromCLeventARB 从 OpenCL 事件创建 GLsync 是执行此操作的方法。

问题是Apple平台似乎不支持此功能。

我知道 Apple 有自己的方式来使用 GCD 实现 OpenGL/OpenCL 互操作性。但是,我知道这需要我完全更改我的代码并为所有内容使用非标准 OpenCL API,并且我希望我的代码是跨平台的(必要时进行小的修改除外)。

glCreateSyncFromCLEventARGB 的任何其他替代方案?

4

1 回答 1

1

根据 OpenCL 1.1 规范,如果 OpenCL 平台或设备支持cl_khr_gl_event扩展,那么您可以跳过clFinish/glFinish调用。

具体来说,在第 9.9.1 页第 9.9.1 节中。332 它说“此外,此扩展修改了与 OpenCL 上下文绑定在同一线程中的 OpenGL 上下文的行为并隐式保证同步clEnqueueAcquireGLObjects(强调我的)clEnqueueReleaseGLObjects

所以你实际上不需要使用这个扩展启用的 clCreateEventFromGLsyncKHR 函数,也不需要使用很少发现的 GL_ARB_cl_event 扩展,除非你需要其他类型的同步(除了 clEnqueueAcquireGLObjects 和 clEnqueueReleaseGLObjects 提供的)。

于 2014-07-07T23:14:20.480 回答