NAME¶
cl_khr_gl_event - Create an OpenCL event object from a GL sync object.
DESCRIPTION¶
This extension enables the function
clCreateEventFromGLsyncKHR(3clc).
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(3clc) and
clEnqueueReleaseGLObjects(3clc) 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 or
CL_DEVICE_EXTENSIONS string described in the table of
param_name values
for
clGetDeviceInfo(3clc).
NOTES¶
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(3clc), and determining completion of that
event object via
clEnqueueAcquireGLObjects(3clc). 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.
SPECIFICATION¶
OpenCL Specification[1]
SEE ALSO¶
EXTENSION(3clc),
clCreateEventFromGLsyncKHR(3clc)
AUTHORS¶
The Khronos Group
COPYRIGHT¶
Copyright © 2007-2011 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction,
including without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to permit
persons to whom the Materials are furnished to do so, subject to the condition
that this copyright notice and permission notice shall be included in all
copies or substantial portions of the Materials.
NOTES¶
- 1.
- OpenCL Specification
page 61, section 9.8 - Creating CL event objets