This extension enables the function clCreateEventFromGLsyncKHR.
This extension allows creating OpenCL event objects linked to OpenGL fence sync objects,
potentially improving efficiency of sharing images and buffers between the two APIs. The
companion GL_ARB_cl_event
OpenGL extension provides the
complementary functionality of creating an OpenGL sync object from an OpenCL event object.
In addition, this extension modifies the behavior of clEnqueueAcquireGLObjects and clEnqueueReleaseGLObjects to implicitly guarantee synchronization with an OpenGL context bound in the same thread as the OpenCL context.
If this extension is supported by an implementation, the
string cl_khr_gl_event
will be present in the CL_PLATFORM_EXTENSIONS
(see clGetPlatformInfo)
or CL_DEVICE_EXTENSIONS
string
(see clGetDeviceInfo).
Event objects can also be used to reflect the status of an OpenGL sync object. The sync object in turn refers to a fence command executing in an OpenGL command stream. This provides another method of coordinating sharing of buffers and images between OpenGL and OpenCL (see section 9.7.6.1).
If the cl_khr_gl_event
extension is supported,
then the OpenCL implementation will ensure that
any such pending OpenGL operations are complete
for an OpenGL context bound to the same
thread as the OpenCL context. This is referred
to as implicit synchronization.
If the cl_khr_gl_event
extension is
supported and the OpenGL context in question supports
fence sync objects, completion of OpenGL commands may also
be determined by placing a GL fence command after
those commands using glFenceSync
,
creating an event from the resulting GL sync object using
clCreateEventFromGLsyncKHR,
and determining completion of that event object via
clEnqueueAcquireGLObjects.
This method may be considerably more efficient than calling
glFinish
, and is referred to as
explicit synchronization
. Explicit
synchronization is most useful when an OpenGL context
bound to another thread is accessing the memory objects.
If the cl_khr_gl_event
extension
is not supported, completion of OpenGL commands may be
determined by issuing and waiting for completion of a
glFinish
command on all OpenGL
contexts with pending references to these objects. Some
implementations may offer other efficient synchronization
methods. If such methods exist they will be described
in platform-specific documentation.
Note that no synchronization method other than
glFinish
is portable between all OpenGL
implementations and all OpenCL implementations.
While this is the only way to ensure completion that is portable
to all platforms, glFinish
is
an expensive operation and its use should be avoided if the
cl_khr_gl_event
extension is supported on a platform.