blob: 92f4a732cfaf1e188c53375370d74a7b08ae2a95 [file] [log] [blame]
Name
KHR_cl_event
Name Strings
EGL_KHR_cl_event
Contributors
Jon Leech, Khronos
Alon Or-bach, Samsung Electronics
Contact
Jon Leech (jon 'at' alumni.caltech.edu)
IP Status
No known claims.
Notice
Copyright (c) 2010-2013 The Khronos Group Inc. Copyright terms at
http://www.khronos.org/registry/speccopyright.html
Status
This extension is obsolete and has been replaced by EGL_KHR_cl_event2.
Khronos recommends implementers who support this extension also
implement cl_event2, and begin transitioning developers to using that
extension. See issue 17 for the reason.
Complete. Approved by the EGL Working Group on 2013/05/15.
Approved by the Khronos Board of Promoters on 2013/07/19.
Version
Version 10, December 4, 2013
Number
EGL Extension #60
Dependencies
EGL 1.4 and the EGL_KHR_fence_sync extension are required.
This extension is written against the language added to EGL 1.2 by
the EGL_KHR_fence_sync extension.
An OpenCL implementation supporting sharing OpenCL event objects
with EGL is required.
Overview
This extension allows creating an EGL fence sync object linked to an
OpenCL event object, potentially improving efficiency of sharing
images between the two APIs. The companion cl_khr_egl_event
extension provides the complementary functionality of creating an
OpenCL event object from an EGL fence sync object.
New Types
None. However, event handles of type cl_event, defined in the OpenCL
header files, may be included in the attribute list passed to
eglCreateSyncKHR.
New Procedures and Functions
None
New Tokens
Accepted as attribute names in the <attrib_list> argument
of eglCreateSyncKHR:
EGL_CL_EVENT_HANDLE_KHR 0x309C
Returned in <values> for eglGetSyncAttribKHR <attribute>
EGL_SYNC_TYPE_KHR:
EGL_SYNC_CL_EVENT_KHR 0x30FE
Returned in <values> for eglGetSyncAttribKHR <attribute>
EGL_SYNC_CONDITION_KHR:
EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF
Changes to Chapter 3 of the EGL 1.2 Specification (EGL Functions and Errors)
Add following the description of fence sync objects in section 3.8.1
(e.g. following the paragraph beginning "<Fence sync objects> are
created..."
"A <CL event sync object> reflects the status of a corresponding
OpenCL event object to which the sync object is linked. This
provides another method of coordinating sharing of images between
EGL and OpenCL (see Chapter 9 of the OpenCL 1.0 Specification and
the cl_khr_egl_sharing extension). Waiting on such a sync object is
equivalent to waiting for completion of the linked CL event object."
Add following the description of fence sync objects (prior to the
"Errors" section for eglCreateSyncKHR):
"If <type> is EGL_SYNC_CL_EVENT_KHR, a CL event sync object is
created. In this case <attrib_list> must contain the attribute
EGL_CL_EVENT_HANDLE_KHR, set to a valid OpenCL event. Note that
EGL_CL_EVENT_HANDLE_KHR is not a queriable property of a sync
object. Attributes of the CL event sync objects are set as follows:
Attribute Name Initial Attribute Value(s)
------------- --------------------------
EGL_SYNC_TYPE_KHR EGL_SYNC_CL_EVENT_KHR
EGL_SYNC_STATUS_KHR Depends on status of <event>
EGL_SYNC_CONDITION_KHR EGL_SYNC_CL_EVENT_COMPLETE_KHR
The status of such a sync object depends on <event>. When the status
of <event> is CL_QUEUED, CL_SUBMITTED, or CL_RUNNING, the status of
the linked sync object will be EGL_UNSIGNALED_KHR. When the status
of <event> changes to CL_COMPLETE, the status of the linked sync
object will become EGL_SIGNALED_KHR.
Creating a linked sync object places a reference on the linked
OpenCL event object. When the sync object is deleted, the reference
will be removed from the event object.
However, implementations are not required to validate the OpenCL
event, and passing an invalid event handle in <attrib_list> may
result in undefined behavior up to and including program
termination."
Add to the "Errors" section for eglCreateSyncKHR:
"* If <type> is EGL_SYNC_CL_EVENT_KHR then
** If EGL_CL_EVENT_HANDLE_KHR is not specified in <attrib_list>
or is not a valid OpenCL event handle returned by a call to
clEnqueueReleaseGLObjects or clEnqueueReleaseEGLObjects, then
EGL_NO_SYNC_KHR is returned and an EGL_BAD_ATTRIBUTE error is
generated.
Replace the EGL_SYNC_CONDITION_KHR row of table 3.cc with:
"Attribute Description Supported Sync Objects
----------------- ----------------------- ----------------------
EGL_SYNC_CONDITION_KHR Signaling condition EGL_SYNC_FENCE_KHR or
EGL_SYNC_CL_EVENT_KHR
Table 3.cc Attributes Accepted by eglGetSyncAttribKHR Command"
Replace the second paragraph describing eglDestroySync with:
"If any eglClientWaitSyncKHR commands are blocking on <sync> when
eglDestroySyncKHR is called, <sync> is flagged for deletion and will
be deleted when the associated fence command or CL event object has
completed, and <sync> is no longer blocking any eglClientWaitSyncKHR
command. Otherwise, the sync object is destroyed immediately."
Sample Code
None
Conformance Tests
None yet
Issues
1) Does this extension need to introduce eglWaitSync
functionality?
RESOLVED: The EGL_KHR_wait_sync extension introduces this, to allow
server-side synchronization, without blocking the client from issuing
commands. Whilst this is not a required dependency, GPU-to-GPU
synchronization is the most likely use of this extension.
2) What should the command to create a sync object linked to an
OpenCL event look like?
RESOLVED: We reuse the general attribute list mechanism rather than
having a constructor specific to CL events. This was intended in the
sync object design from the start.
3) How will the OpenCL header dependencies interact with
specifying the API for this extension?
DISCUSSION: To use this extension, OpenCL event handles of type cl_event
are specified in the attribute lists passed to eglCreateSyncKHR. Because
no formal parameters are of type cl_event, the EGL headers do not need
to define this type. Applications must #include the appropriate OpenCL
header files as well as <EGL/eglext.h> when using this extension.
This issue resolution is consistent with the equivalent issue for
GL_ARB_cl_event.
4) Should all possible statuses of the CL event be reflected through to the
state of the sync object?
DISCUSSION: CL event objects have four execution statuses:
CL_QUEUED, CL_SUBMITTED, CL_RUNNING, and CL_COMPLETE. GL sync
objects have only two statuses: UNSIGNALED and SIGNALED. The
cl_khr_gl_event extension maps UNSIGNALED into CL_SUBMITTED, and
SIGNALED into CL_COMPLETE.
RESOLVED: Invert the cl_khr_egl_event mapping. CL_QUEUED,
CL_SUBMITTED, and CL_RUNNING all map into UNSIGNALED.
CL_COMPLETE maps into SIGNALED.
This issue resolution is consistent with the equivalent issue for
GL_ARB_cl_event.
5) Are there any restrictions on the use of a sync object linked to a CL
event object?
RESOLVED: No restrictions.
6) How are sync object lifetimes defined?
RESOLVED: A sync object linked to a CL event object places a single
reference on the event. Deleting the sync object removes that reference.
eglDestroySync has a dependency on the completion of the linked event
object, and will not delete the sync objectwhile the event object has not
yet completed. This is equivalent to behavior of deleting a fence sync
object, where deletion of the object will be deferred until the underlying
fence command has completed.
This issue resolution is consistent with the equivalent issue for
GL_ARB_cl_event.
7) Should all OpenCL events be supported?
RESOLVED: No. Only events returned by clEnqueueReleaseGLObjects, or
clEnqueueReleaseEGLObjects since those are the only known use cases for
this extension.
8) Why has this extension been obsoleted and replaced by
EGL_KHR_cl_event2?
RESOLVED: Starting with the December 4, 2013 release of EGL 1.4, EGLint
is defined to be the same size as the native platform "int" type. Handle
and pointer attribute values *cannot* be represented in attribute lists
on platforms where sizeof(handle/pointer) > sizeof(int). Existing
extensions which assume this functionality are being replaced with new
extensions specifying new entry points to work around this issue. See
the latest EGL 1.4 Specification for more details.
Revision History
Version 10, 2013/12/04 (Jon Leech) - add issue 8 explaining that OpenCL
event handles cannot be safely passed in attribute lists on 64-bit
platforms, and suggest using EGL_KHR_cl_event2 instead.
Version 9, 2013/08/12 (Jon Leech) - remove unused cl_event type from the
extension and from <EGL/eglext.h> (Bug 10661).
Version 8, 2013/07/19 (Jon Leech) - assign extension number and
missing enum value, and clean up a few typos for publication.
Version 7, 2013/07/08 (Jon Leech) - assign enums (Bug 10490).
Version 6, 2013/06/11 (Alon Or-bach) - typo correction
Version 5, 2013/05/30 (Alon Or-bach) - wording cleanup
Version 4, 2013/05/15 (Alon Or-bach) - updated issue resolutions as agreed,
consistent with GL_ARB_cl_event, including using typedef for cl_event
Version 3, 2013/04/25 (Alon Or-bach) - remove use of CL context,
accept events from clEnqueueAcquireEGLObjects and minor cleanup
Version 2, 2012/06/26 (Jon Leech) - update link to complementary CL
extension.
Version 1, 2010/05/18 (Jon Leech) - initial version based on
equivalent GL_ARB_cl_event extension.