blob: 5ca5676cee26f37c6c2a2465262be16163d67d6d [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title xmlns:xlink="http://www.w3.org/1999/xlink">eglCreateSync - EGL Reference Pages</title>
<link rel="stylesheet" type="text/css" href="khronos-man.css"/>
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"/>
</head>
<body>
<header/>
<div class="refentry" id="eglCreateSync">
<div class="titlepage"/>
<div class="refnamediv">
<h2>Name</h2>
<p>eglCreateSync —
create a new <abbr class="acronym">EGL</abbr> sync object
</p>
</div>
<div class="refsynopsisdiv">
<h2>C Specification</h2>
<div class="funcsynopsis">
<table style="border: 0; cellspacing: 0; cellpadding: 0;" class="funcprototype-table">
<tr>
<td>
<code class="funcdef">EGLSync <strong class="fsfunc">eglCreateSync</strong>(</code>
</td>
<td>EGLDisplay <var class="pdparam">display</var>, </td>
</tr>
<tr>
<td> </td>
<td>EGLEnum <var class="pdparam">type</var>, </td>
</tr>
<tr>
<td> </td>
<td>EGLAttrib const * <var class="pdparam">attrib_list</var><code>)</code>;</td>
</tr>
</table>
<div class="funcprototype-spacer"> </div>
</div>
</div>
<div class="refsect1" id="parameters">
<h2>Parameters</h2>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<em class="parameter">
<code>display</code>
</em>
</span>
</dt>
<dd>
<p>
Specifies the <abbr class="acronym">EGL</abbr> display connection.
</p>
</dd>
<dt>
<span class="term">
<em class="parameter">
<code>type</code>
</em>
</span>
</dt>
<dd>
<p>
Specifies the type of sync object to create.
</p>
</dd>
<dt>
<span class="term">
<em class="parameter">
<code>attrib_list</code>
</em>
</span>
</dt>
<dd>
<p>
Specifies attributes and attribute values for the sync
object being created.
</p>
</dd>
</dl>
</div>
</div>
<div class="refsect1" id="description">
<h2>Description</h2>
<p>
<em class="firstterm">sync objects</em> 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.
</p>
<p>
Sync objects have a status with two possible states:
<em class="firstterm">signaled</em> and
<em class="firstterm">unsignaled</em>. 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.
</p>
<p>
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.
</p>
<p>
<code class="function">eglCreateSync</code> creates a sync object of the specified
<em class="parameter"><code>type</code></em> associated with the specified display
<em class="parameter"><code>display</code></em>, and returns a handle to the new object.
<em class="parameter"><code>attrib_list</code></em> is an attribute-value list specifying
other attributes of the sync object, terminated by an attribute entry
<code class="constant">EGL_NONE</code>. Attributes not specified in the list will be
assigned their default values.
</p>
<p>
Once the <em class="firstterm">condition</em> of the sync object is satisfied,
the sync is signaled, causing any <code class="function">eglClientWaitSync</code> or
<code class="function">eglWaitSync</code> commands blocking on
<em class="parameter"><code>sync</code></em> to unblock.
</p>
</div>
<div class="refsect1" id="fencesync">
<h2>Creating Fence Sync Objects</h2>
<p>
If <em class="parameter"><code>type</code></em> is
<code class="constant">EGL_SYNC_FENCE</code>, a fence sync object is
created. In this case <em class="parameter"><code>attrib_list</code></em> must be
<code class="constant">NULL</code> or empty (containing only
<code class="constant">EGL_NONE</code>). Attributes of the fence sync
object, and their initial values, are:
</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="constant">EGL_SYNC_TYPE</code>
</span>
</dt>
<dd>
<p>
<code class="constant">EGL_SYNC_FENCE</code>
</p>
</dd>
<dt>
<span class="term">
<code class="constant">EGL_SYNC_STATUS</code>
</span>
</dt>
<dd>
<p>
<code class="constant">EGL_UNSIGNALED</code>
</p>
</dd>
<dt>
<span class="term">
<code class="constant">EGL_SYNC_CONDITION</code>
</span>
</dt>
<dd>
<p>
<code class="constant">EGL_SYNC_PRIOR_COMMANDS_COMPLETE</code>
</p>
</dd>
</dl>
</div>
<p>
When a fence sync object is created, <code class="function">eglCreateSync</code> also inserts a
fence command into the command stream of the bound client API's current
context (i.e., the context returned by <code class="function">eglGetCurrentContext</code>), and
associates it with the newly created sync object.
</p>
<p>
The only condition supported for fence sync objects is
<code class="constant">EGL_SYNC_PRIOR_COMMANDS_COMPLETE</code>, 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.
</p>
<p>
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
<code class="function">eglWaitSync</code> also requires satisfying these
conditions.
</p>
<p>
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
<p>
client API is OpenGL, and either the OpenGL version is
3.2 or greater, or the <code class="constant">GL_ARB_sync</code>
extension is supported.
</p>
</li>
<li class="listitem">
<p>
client API is OpenGL ES, and either the OpenGL ES
version is 3.0 or greater, or the
<code class="constant">GL_OES_EGL_sync</code> extension is
supported.
</p>
</li>
<li class="listitem">
<p>
client API is OpenVG, and the
<code class="constant">VG_KHR_EGL_sync</code> extension is
supported.
</p>
</li>
</ul>
</div>
<p>
</p>
</div>
<div class="refsect1" id="openclsync">
<h2>Creating OpenCL Event Sync Objects</h2>
<p>
If <em class="parameter"><code>type</code></em> is
<code class="constant">EGL_SYNC_CL_EVENT</code>, an OpenCL event sync
object is created. In this case
<em class="parameter"><code>attrib_list</code></em> must contain the attribute
<code class="constant">EGL_CL_EVENT_HANDLE</code>, set to a valid OpenCL
event handle returned by a call to
<code class="function">clEnqueueReleaseGLObjects</code> or
<code class="function">clEnqueueReleaseEGLObjects</code>; other types of
OpenCL event handles are not supported. Note that
<code class="constant">EGL_CL_EVENT_HANDLE</code> is not a queriable
property of a sync object. Attributes of the OpenCL event sync
object, and their initial values, are:
</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="constant">EGL_SYNC_TYPE</code>
</span>
</dt>
<dd>
<p>
<code class="constant">EGL_SYNC_CL_EVENT</code>
</p>
</dd>
<dt>
<span class="term">
<code class="constant">EGL_SYNC_STATUS</code>
</span>
</dt>
<dd>
<p>
Depends on status of <em class="parameter"><code>event</code></em>
</p>
</dd>
<dt>
<span class="term">
<code class="constant">EGL_SYNC_CONDITION</code>
</span>
</dt>
<dd>
<p>
<code class="constant">EGL_SYNC_CL_EVENT_COMPLETE</code>
</p>
</dd>
</dl>
</div>
<p>
The status of such a sync object depends on
<em class="parameter"><code>event</code></em>. When the status of
<em class="parameter"><code>event</code></em> is <code class="constant">CL_QUEUED</code>,
<code class="constant">CL_SUBMITTED</code>, or
<code class="constant">CL_RUNNING</code>, the status of the linked sync
object will be <code class="constant">EGL_UNSIGNALED</code>. When the
status of <em class="parameter"><code>event</code></em> changes to
<code class="constant">CL_COMPLETE</code>, the status of the linked sync
object will become <code class="constant">EGL_SIGNALED</code>.
</p>
<p>
The only condition supported for OpenCL event sync objects is
<code class="constant">EGL_SYNC_CL_EVENT_COMPLETE</code>, which is
satisfied when the status of the OpenCL event associated with
the sync object changes to <code class="constant">CL_COMPLETE</code>.
</p>
<p>
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.
</p>
<p>
However, implementations are not required to validate the OpenCL
event, and passing an invalid event handle in
<em class="parameter"><code>attrib_list</code></em> may result in undefined
behavior up to and including program termination.
</p>
</div>
<div class="refsect1" id="notes">
<h2>Notes</h2>
<p>
<code class="function">eglCreateSync</code> is supported only if the EGL
version is 1.5 or greater.
</p>
</div>
<div class="refsect1" id="errors">
<h2>Errors</h2>
<p>
<code class="function">eglCreateSync</code> returns
<code class="constant">EGL_NO_SYNC</code> on failure.
</p>
<p>
If <em class="parameter"><code>display</code></em> is not the name of a valid,
initialized <span class="type">EGLDisplay</span>, an
<code class="constant">EGL_BAD_DISPLAY</code> error is generated.
</p>
<p>
If <em class="parameter"><code>attrib_list</code></em> contains an attribute name
not defined for the type of sync object being created, an
<code class="constant">EGL_BAD_ATTRIBUTE</code> error is generated.
</p>
<p>
If <em class="parameter"><code>type</code></em> is not a supported type of sync
object, an <code class="constant">EGL_BAD_PARAMETER</code> error is
generated.
</p>
<p>
If <em class="parameter"><code>type</code></em> is
<code class="constant">EGL_SYNC_FENCE</code> and no context is current
for the bound API (i.e.,
<code class="function">eglGetCurrentContext</code> returns
<code class="constant">EGL_NO_CONTEXT</code>), an
<code class="constant">EGL_BAD_MATCH</code> error is generated.
</p>
<p>
If <em class="parameter"><code>type</code></em> is
<code class="constant">EGL_SYNC_FENCE</code> and
<em class="parameter"><code>display</code></em> does not match the
<span class="type">EGLDisplay</span> of the currently bound context for the
currently bound client API (the <span class="type">EGLDisplay</span> returned
by <code class="function">eglGetCurrentDisplay</code>), an
<code class="constant">EGL_BAD_MATCH</code> error is generated.
</p>
<p>
If <em class="parameter"><code>type</code></em> is
<code class="constant">EGL_SYNC_FENCE</code> and the current context for
the currently bound client API does not support fence commands,
an <code class="constant">EGL_BAD_MATCH</code> error is generated.
</p>
<p>
If <em class="parameter"><code>type</code></em> is
<code class="constant">EGL_SYNC_CL_EVENT</code> and
<code class="constant">EGL_CL_EVENT_HANDLE</code> is not specified in
<em class="parameter"><code>attrib_list</code></em>, or its attribute value is
not a valid OpenCL event handle as described above, then an
<code class="constant">EGL_BAD_ATTRIBUTE</code> error is generated.
</p>
</div>
<div class="refsect1" id="seealso">
<h2>See Also</h2>
<p>
<code class="function">clEnqueueReleaseGLObjects</code>,
<code class="function">clEnqueueReleaseEGLObjects</code>,
<a class="citerefentry" href="eglClientWaitSync.xhtml"><span class="citerefentry"><span class="refentrytitle">eglClientWaitSync</span></span></a>,
<a class="citerefentry" href="eglCreateSync.xhtml"><span class="citerefentry"><span class="refentrytitle">eglCreateSync</span></span></a>,
<a class="citerefentry" href="eglGetCurrentContext.xhtml"><span class="citerefentry"><span class="refentrytitle">eglGetCurrentContext</span></span></a>,
<a class="citerefentry" href="eglGetCurrentDisplay.xhtml"><span class="citerefentry"><span class="refentrytitle">eglGetCurrentDisplay</span></span></a>,
<a class="citerefentry" href="eglWaitSync.xhtml"><span class="citerefentry"><span class="refentrytitle">eglWaitSync</span></span></a>
</p>
</div>
<p>
</p>
<div class="refsect3" id="copyright">
<img src="KhronosLogo.jpg"/>
<p>
Copyright © 2003-2014 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.
</p>
</div>
<p>
</p>
</div>
<footer/>
</body>
</html>