Name

eglCreateSync — create a new EGL sync object

C Specification

EGLSync eglCreateSync( EGLDisplay display,
  EGLEnum type,
  EGLAttrib const * attrib_list);
 

Parameters

display

Specifies the EGL display connection.

type

Specifies the type of sync object to create.

attrib_list

Specifies attributes and attribute values for the sync object being created.

Description

sync objects are provided to enable synchronization of client API operations between threads and/or between API contexts. Sync objects may be tested or waited upon by application threads.

Sync objects have a status with two possible states: signaled and unsignaled. Initially, sync objects are unsignaled. EGL may be asked to wait for a sync object to become signaled, or a sync object's status may be queried.

Depending on the type of a sync object, its status may be changed either by an external event, or by explicitly signaling and unsignaling the sync.

eglCreateSync creates a sync object of the specified type associated with the specified display display, and returns a handle to the new object. attrib_list is an attribute-value list specifying other attributes of the sync object, terminated by an attribute entry EGL_NONE. Attributes not specified in the list will be assigned their default values.

Once the condition of the sync object is satisfied, the sync is signaled, causing any eglClientWaitSync or eglWaitSync commands blocking on sync to unblock.

Creating Fence Sync Objects

If type is EGL_SYNC_FENCE, a fence sync object is created. In this case attrib_list must be NULL or empty (containing only EGL_NONE). Attributes of the fence sync object, and their initial values, are:

EGL_SYNC_TYPE

EGL_SYNC_FENCE

EGL_SYNC_STATUS

EGL_UNSIGNALED

EGL_SYNC_CONDITION

EGL_SYNC_PRIOR_COMMANDS_COMPLETE

When a fence sync object is created, eglCreateSync also inserts a fence command into the command stream of the bound client API's current context (i.e., the context returned by eglGetCurrentContext), and associates it with the newly created sync object.

The only condition supported for fence sync objects is EGL_SYNC_PRIOR_COMMANDS_COMPLETE, which is satisfied by completion of the fence command corresponding to the sync object, and all preceding commands in the associated client API context's command stream. The sync object will not be signaled until all effects from these commands on the client API's internal and framebuffer state are fully realized. No other state is affected by execution of the fence command.

Creation of fence sync objects requires support from the bound client API, and will not succeed unless the client API satisfies one of the following properties. Note that eglWaitSync also requires satisfying these conditions.

  • client API is OpenGL, and either the OpenGL version is 3.2 or greater, or the GL_ARB_sync extension is supported.

  • client API is OpenGL ES, and either the OpenGL ES version is 3.0 or greater, or the GL_OES_EGL_sync extension is supported.

  • client API is OpenVG, and the VG_KHR_EGL_sync extension is supported.

Creating OpenCL Event Sync Objects

If type is EGL_SYNC_CL_EVENT, an OpenCL event sync object is created. In this case attrib_list must contain the attribute EGL_CL_EVENT_HANDLE, set to a valid OpenCL event handle returned by a call to clEnqueueReleaseGLObjects or clEnqueueReleaseEGLObjects; other types of OpenCL event handles are not supported. Note that EGL_CL_EVENT_HANDLE is not a queriable property of a sync object. Attributes of the OpenCL event sync object, and their initial values, are:

EGL_SYNC_TYPE

EGL_SYNC_CL_EVENT

EGL_SYNC_STATUS

Depends on status of event

EGL_SYNC_CONDITION

EGL_SYNC_CL_EVENT_COMPLETE

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. When the status of event changes to CL_COMPLETE, the status of the linked sync object will become EGL_SIGNALED.

The only condition supported for OpenCL event sync objects is EGL_SYNC_CL_EVENT_COMPLETE, which is satisfied when the status of the OpenCL event associated with the sync object changes to CL_COMPLETE.

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.

Notes

eglCreateSync is supported only if the EGL version is 1.5 or greater.

Errors

eglCreateSync returns EGL_NO_SYNC on failure.

If display is not the name of a valid, initialized EGLDisplay, an EGL_BAD_DISPLAY error is generated.

If attrib_list contains an attribute name not defined for the type of sync object being created, an EGL_BAD_ATTRIBUTE error is generated.

If type is not a supported type of sync object, an EGL_BAD_PARAMETER error is generated.

If type is EGL_SYNC_FENCE and no context is current for the bound API (i.e., eglGetCurrentContext returns EGL_NO_CONTEXT), an EGL_BAD_MATCH error is generated.

If type is EGL_SYNC_FENCE and display does not match the EGLDisplay of the currently bound context for the currently bound client API (the EGLDisplay returned by eglGetCurrentDisplay), an EGL_BAD_MATCH error is generated.

If type is EGL_SYNC_FENCE and the current context for the currently bound client API does not support fence commands, an EGL_BAD_MATCH error is generated.

If type is EGL_SYNC_CL_EVENT and EGL_CL_EVENT_HANDLE is not specified in attrib_list, or its attribute value is not a valid OpenCL event handle as described above, then an EGL_BAD_ATTRIBUTE error is generated.

See Also

clEnqueueReleaseGLObjects, clEnqueueReleaseEGLObjects, eglClientWaitSync, eglCreateSync, eglGetCurrentContext, eglGetCurrentDisplay, eglWaitSync