2014-07-07 1 views
0

Je voudrais enregistrer un appel à clFinish() dans OpenCL avant d'utiliser cl_command_queue dans OpenGL (j'ai une image/texture partagée utilisée dans OpenCL/GL).glCreateSyncFromCLeventARB alternative?

J'ai trouvé dans le livre "Programmation OpenCL par exemple" (p 243) que la création d'un GLsync à partir d'un événement OpenCL en utilisant glCreateSyncFromCLeventARB est le moyen de le faire.

Le problème est que cette fonction semble être non supportée sur la plate-forme Apple. Je sais qu'Apple a sa propre façon d'implémenter l'interopérabilité OpenGL/OpenCL à l'aide de GCD. Cependant, je comprends que cela m'obligerait à changer complètement mon code et utiliser une API OpenCL non standard pour tout, et je veux que mon code soit multi-plateforme (sauf des adaptations mineures si nécessaire).

Toute autre alternative à glCreateSyncFromCLEventARGB?

Répondre

1

Selon la spécification OpenCL 1.1, si une plate-forme ou un périphérique OpenCL prend en charge l'extension cl_khr_gl_event, vous pouvez ignorer les appels clFinish/glFinish.

Spécifiquement, à la section 9.9.1 à la p. 332 il dit "En outre, cette extension modifie le comportement de clEnqueueAcquireGLObjects et clEnqueueReleaseGLObjects à garantir implicitement la synchronisation avec un contexte OpenGL lié dans le même thread que le contexte OpenCL." (Souligné par l'auteur)

Vous n'avez pas besoin réellement d'utiliser la fonction clCreateEventFromGLsyncKHR que cette extension permet, ni l'extension GL_ARB_cl_event rarement trouvé à moins que vous avez besoin d'autres types de synchronisation (autres que ce que l'offre de clEnqueueAcquireGLObjects et clEnqueueReleaseGLObjects).