Merge branch 'master' of github.com:KhronosGroup/EGL-Registry
diff --git a/api/EGL/egl.h b/api/EGL/egl.h
index 29f30d9..2d8b6f7 100644
--- a/api/EGL/egl.h
+++ b/api/EGL/egl.h
@@ -31,14 +31,14 @@
** This header is generated from the Khronos OpenGL / OpenGL ES XML
** API Registry. The current version of the Registry, generator scripts
** used to make the header, and the header can be found at
-** http://www.opengl.org/registry/egl
+** http://www.khronos.org/registry/egl
**
** Khronos $Revision$ on $Date$
*/
#include <EGL/eglplatform.h>
-/* Generated on date 20161230 */
+/* Generated on date 20170203 */
/* Generated C header for:
* API: egl
diff --git a/api/EGL/eglext.h b/api/EGL/eglext.h
index 33ba07e..008fa76 100644
--- a/api/EGL/eglext.h
+++ b/api/EGL/eglext.h
@@ -31,14 +31,14 @@
** This header is generated from the Khronos OpenGL / OpenGL ES XML
** API Registry. The current version of the Registry, generator scripts
** used to make the header, and the header can be found at
-** http://www.opengl.org/registry/egl
+** http://www.khronos.org/registry/egl
**
** Khronos $Revision$ on $Date$
*/
#include <EGL/eglplatform.h>
-#define EGL_EGLEXT_VERSION 20161230
+#define EGL_EGLEXT_VERSION 20170203
/* Generated C header for:
* API: egl
@@ -564,6 +564,30 @@
#define EGL_EXT_client_extensions 1
#endif /* EGL_EXT_client_extensions */
+#ifndef EGL_EXT_compositor
+#define EGL_EXT_compositor 1
+#define EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT 0x3460
+#define EGL_EXTERNAL_REF_ID_EXT 0x3461
+#define EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT 0x3462
+#define EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT 0x3463
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTLISTEXTPROC) (const EGLint *external_ref_ids, EGLint num_entries);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTATTRIBUTESEXTPROC) (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWLISTEXTPROC) (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWATTRIBUTESEXTPROC) (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORBINDTEXWINDOWEXTPROC) (EGLint external_win_id);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETSIZEEXTPROC) (EGLint external_win_id, EGLint width, EGLint height);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSWAPPOLICYEXTPROC) (EGLint external_win_id, EGLint policy);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextListEXT (const EGLint *external_ref_ids, EGLint num_entries);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextAttributesEXT (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowListEXT (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowAttributesEXT (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorBindTexWindowEXT (EGLint external_win_id);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetSizeEXT (EGLint external_win_id, EGLint width, EGLint height);
+EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSwapPolicyEXT (EGLint external_win_id, EGLint policy);
+#endif
+#endif /* EGL_EXT_compositor */
+
#ifndef EGL_EXT_create_context_robustness
#define EGL_EXT_create_context_robustness 1
#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF
diff --git a/api/egl.xml b/api/egl.xml
index 4559905..65a1a79 100644
--- a/api/egl.xml
+++ b/api/egl.xml
@@ -843,6 +843,14 @@
<enums namespace="EGL" start="0x3450" end="0x345F" vendor="ANGLE" comment="Reserved for Shannon Woods (Bug 16106)">
<unused start="0x3450" end="0x345F"/>
</enums>
+
+ <enums namespace="EGL" start="0x3460" end="0x346F" vendor="COREAVI" comment="Reserved for Daniel Herring (Bug 16162)">
+ <enum value="0x3460" name="EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT"/>
+ <enum value="0x3461" name="EGL_EXTERNAL_REF_ID_EXT"/>
+ <enum value="0x3462" name="EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT"/>
+ <enum value="0x3463" name="EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT"/>
+ <unused start="0x3464" end="0x346F"/>
+ </enums>
<!-- Please remember that new enumerant allocations must be obtained by
request to the Khronos API registrar (see comments at the top of this
@@ -853,8 +861,8 @@
<!-- Reservable for future use. To generate a new range, allocate multiples
of 16 starting at the lowest available point in this block. -->
- <enums namespace="EGL" start="0x3460" end="0x3FFF" vendor="KHR" comment="Reserved for future use">
- <unused start="0x3460" end="0x3FFF"/>
+ <enums namespace="EGL" start="0x3470" end="0x3FFF" vendor="KHR" comment="Reserved for future use">
+ <unused start="0x3470" end="0x3FFF"/>
</enums>
<enums namespace="EGL" start="0x8F70" end="0x8F7F" vendor="HI" comment="For Mark Callow, Khronos bug 4055. Shared with GL.">
@@ -1632,6 +1640,44 @@
<param><ptype>EGLSyncKHR</ptype> <name>sync</name></param>
<param><ptype>EGLint</ptype> <name>flags</name></param>
</command>
+ <command>
+ <proto><ptype>EGLBoolean</ptype> <name>eglCompositorSetContextListEXT</name></proto>
+ <param>const <ptype>EGLint</ptype> *<name>external_ref_ids</name></param>
+ <param><ptype>EGLint</ptype> <name>num_entries</name></param>
+ </command>
+ <command>
+ <proto><ptype>EGLBoolean</ptype> <name>eglCompositorSetContextAttributesEXT</name></proto>
+ <param><ptype>EGLint</ptype> <name>external_ref_id</name></param>
+ <param>const <ptype>EGLint</ptype> *<name>context_attributes</name></param>
+ <param><ptype>EGLint</ptype> <name>num_entries</name></param>
+ </command>
+ <command>
+ <proto><ptype>EGLBoolean</ptype> <name>eglCompositorSetWindowListEXT</name></proto>
+ <param><ptype>EGLint</ptype> <name>external_ref_id</name></param>
+ <param>const <ptype>EGLint</ptype> *<name>external_win_ids</name></param>
+ <param><ptype>EGLint</ptype> <name>num_entries</name></param>
+ </command>
+ <command>
+ <proto><ptype>EGLBoolean</ptype> <name>eglCompositorSetWindowAttributesEXT</name></proto>
+ <param><ptype>EGLint</ptype> <name>external_win_id</name></param>
+ <param>const <ptype>EGLint</ptype> *<name>window_attributes</name></param>
+ <param><ptype>EGLint</ptype> <name>num_entries</name></param>
+ </command>
+ <command>
+ <proto><ptype>EGLBoolean</ptype> <name>eglCompositorBindTexWindowEXT</name></proto>
+ <param><ptype>EGLint</ptype> <name>external_win_id</name></param>
+ </command>
+ <command>
+ <proto><ptype>EGLBoolean</ptype> <name>eglCompositorSetSizeEXT</name></proto>
+ <param><ptype>EGLint</ptype> <name>external_win_id</name></param>
+ <param><ptype>EGLint</ptype> <name>width</name></param>
+ <param><ptype>EGLint</ptype> <name>height</name></param>
+ </command>
+ <command>
+ <proto><ptype>EGLBoolean</ptype> <name>eglCompositorSwapPolicyEXT</name></proto>
+ <param><ptype>EGLint</ptype> <name>external_win_id</name></param>
+ <param><ptype>EGLint</ptype> <name>policy</name></param>
+ </command>
</commands>
<!-- SECTION: EGL API interface definitions. -->
@@ -2852,5 +2898,21 @@
<enum name="EGL_NATIVE_SURFACE_TIZEN"/>
</require>
</extension>
+ <extension name="EGL_EXT_compositor" supported="egl">
+ <require>
+ <enum name="EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT"/>
+ <enum name="EGL_EXTERNAL_REF_ID_EXT"/>
+ <enum name="EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT"/>
+ <enum name="EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT"/>
+
+ <command name="eglCompositorSetContextListEXT"/>
+ <command name="eglCompositorSetContextAttributesEXT"/>
+ <command name="eglCompositorSetWindowListEXT"/>
+ <command name="eglCompositorSetWindowAttributesEXT"/>
+ <command name="eglCompositorBindTexWindowEXT"/>
+ <command name="eglCompositorSetSizeEXT"/>
+ <command name="eglCompositorSwapPolicyEXT"/>
+ </require>
+ </extension>
</extensions>
</registry>
diff --git a/extensions/EXT/EGL_EXT_compositor.txt b/extensions/EXT/EGL_EXT_compositor.txt
new file mode 100644
index 0000000..6e98428
--- /dev/null
+++ b/extensions/EXT/EGL_EXT_compositor.txt
@@ -0,0 +1,400 @@
+Name
+
+ EXT_compositor
+
+Name Strings
+
+ EGL_EXT_compositor
+
+Contributors
+
+ Marc Moody
+ Daniel Herring
+
+Contacts
+
+ Marc Moody, Boeing Inc., marc dot d dot moody at boeing dot com
+ Daniel Herring, Core Avionics & Industrial Inc., daniel dot herring at ch1group dot com
+
+Status
+
+ Complete
+
+Version
+ Version 1.0, February 3, 2017
+
+Number
+
+ EGL Extension #116
+
+Dependencies
+
+ Requires EGL 1.0.
+
+ This extension is written against the wording of the EGL 1.4
+ Specification - April 6, 2011, but may be implemented against earlier
+ versions.
+
+Overview
+
+ This extension allows for the composition of multiple windows within
+ a multi-partition EGL system. The extension allows a primary EGLContext and
+ window to be created for each display. All other windows are created using
+ non-displayable surfaces. A handle to each off-screen window is provided
+ to the primary EGLContext to allow the composition of all non-displayable windows
+ on a single display.
+
+ For each display, there is one EGLContext which has access to create on screen
+ windows, this is call the primary context for this display. All other EGLContexts
+ are referred to as secondary contexts.
+
+ This extension requires a multi-partition EGL driver to support asynchronous
+ rendering of off screen surfaces.
+
+ Information assurance is provided by preventing context and surface creation by
+ unregistered contexts and by preventing the non-primary contexts and surfaces
+ from rendering to the display.
+
+New Types
+
+ None
+
+New Procedures and Functions
+
+ EGLBoolean eglCompositorSetContextListEXT (const EGLint *external_ref_ids,
+ EGLint num_entries);
+
+ EGLBoolean eglCompositorSetContextAttributesEXT (EGLint external_ref_id,
+ const EGLint *context_attributes,
+ EGLint num_entries);
+
+ EGLBoolean eglCompositorSetWindowListEXT (EGLint external_ref_id,
+ const EGLint *external_win_ids,
+ EGLint num_entries);
+
+ EGLBoolean eglCompositorSetWindowAttributesEXT (EGLint external_win_id,
+ const EGLint *window_attributes,
+ EGLint num_entries);
+
+ EGLBoolean eglCompositorBindTexWindowEXT (EGLint external_win_id);
+
+ EGLBoolean eglCompositorSetSizeEXT (EGLint external_win_id,
+ EGLint width, EGLint height);
+
+ EGLBoolean eglCompositorSwapPolicyEXT (EGLint external_win_id,
+ EGLint policy);
+
+
+New Tokens
+
+ New attributes accepted by the <attrib_list> argument of
+ eglCreateContext:
+
+ EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT 0x3460
+
+ New attributes accepted by the <attrib_list> argument of
+ eglCreateContext and eglCreateWindowSurface:
+
+ EGL_EXTERNAL_REF_ID_EXT 0x3461
+
+ New attributes accepted by the <policy> argument of
+ eglCompositorSwapPolicyHint:
+
+ EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT 0x3462
+
+ EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT 0x3463
+
+Modify Section 3.7.1 of the EGL 1.4 Specification, paragraph 2
+ (Creating Rendering Contexts) on pg. 43
+ From:
+ If eglCreateContext succeeds, it initializes the context to the initial state defined
+ for the current rendering API, and returns a handle to it. The context can be
+ used to render to any compatible EGLSurface.
+
+ To:
+ If eglCreateContext succeeds, it initializes the context to the initial state defined
+ for the current rendering API, and returns a handle to it. The context can be
+ used to render to any compatible off-screen rendering surface (Sections 3.5.2
+ and 3.5.4). A secondary context can be used to render to compatible window surfaces
+ which have been associated with the context using eglCompositorSetWindowListEXT. A
+ non-secondary context can be used to render to any compatible EGLSurface.
+
+Modify Section 3.7.1 of EGL 1.4 Specification, paragraph 5
+ (Creating Rendering Contexts) on pg. 43
+ From:
+ attrib_list specifies a list of attributes for the context. The list has the same
+ structure as described for eglChooseConfig. The only attribute that can be specified
+ in attrib_list is EGL_CONTEXT_CLIENT_VERSION, and this attribute may only
+ be specified when creating a OpenGL ES context (e.g. when the current rendering
+ API is EGL_OPENGL_ES_API).
+
+ To:
+ attrib_list specifies a list of attributes for the context. The list has the same
+ structure as described for eglChooseConfig. The attributes that can be specified
+ in attrib_list are EGL_CONTEXT_CLIENT_VERSION, EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT,
+ EGL_EXTERNAL_REF_ID_EXT.
+
+Modify Section 3.7.1 of EGL 1.4 Specification, paragraph 7
+ (Creating Rendering Contexts) on pg. 43
+ From:
+ EGL_CONTEXT_CLIENT_VERSION determines which version of an OpenGL
+ ES context to create. An attribute value of 1 specifies creation of an OpenGL ES
+ 1.x context. An attribute value of 2 specifies creation of an OpenGL ES 2.x context.
+ The default value for EGL_CONTEXT_CLIENT_VERSION is 1.
+
+ To:
+ EGL_CONTEXT_CLIENT_VERSION determines which version of an OpenGL
+ ES context to create. An attribute value of 1 specifies creation of an OpenGL ES
+ 1.x context. An attribute value of 2 specifies creation of an OpenGL ES 2.x context.
+ The default value for EGL_CONTEXT_CLIENT_VERSION is 1. EGL_CONTEXT_CLIENT_VERSION
+ may only be specified when creating a OpenGL ES context (e.g. when the current
+ rendering API is EGL_OPENGL_ES_API).
+
+Additions to Section 3.7.1 of the EGL 1.4 Specification (Creating Rendering Contexts).
+
+ The first call to eglCreateContext with EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT
+ set as EGL_TRUE in the <attrib-list> returns an EGLContext handle which will
+ act as the primary context for the specified EGLDisplay. This shall be the
+ only context on this EGLDisplay which is able to be bound to an on-screen window
+ on the EGLDisplay. Subsequent calls to eglCreateContext, for the same display,
+ in any address space with EGL_PRIMIARY_COMPOSITOR_CONTEXT_EXT set as EGL_TRUE
+ shall return EGL_NO_CONTEXT.
+ Subsequent calls, in any address space for the same display, to eglCreateContext
+ which do not use EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT should use the the attribute
+ EGL_EXTERNAL_REF_ID_EXT and an external reference identifier to create a valid
+ EGLContext.
+ Subsequent calls, in any address space for the same display, to eglCreateContext
+ which do not use EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT and do not use
+ EGL_EXTERNAL_REF_ID_EXT shall not create a context and shall return
+ EGL_NO_CONTEXT and set the error EGL_BAD_ACCESS.
+
+ EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT notifies EGL that this context is the only
+ context allowed to render to a on screen window surface for this display. This
+ attribute is followed in the attribute list by either EGL_TRUE or EGL_FALSE.
+ EGL_EXTERNAL_REF_ID_EXT is followed by an external reference identifier which
+ associates this context with the list of allowed contexts set by
+ eglCompositorSetContextListEXT. If the reference identifier has already been
+ used to initiate another call to eglCreateContext in any address space, this
+ call shall fail and set the error EGL_BAD_ATTRIBUTE. IF the external reference
+ identifier is not a valid identifier the error EGL_BAD_ATTRIBUTE shall be set
+ and the call shall fail. If this attribute is set and the primary context has
+ not yet been created then the error EGL_BAD_MATCH and the call shall fail.
+
+ Only when the attributes specified via attrib_list and those specified for this
+ context using eglCompositorSetContextAttributesEXT are compatible will the
+ context be successfully created.
+
+Modify the list of parameters supported by eglCreateWindowSurface in section 3.5.1
+ (Creating On-Screen Rendering Surfaces) on p. 27:
+
+ An external window identifier (EGLuint external_win_id) is associated with
+ each off screen window. EGLNativeWindowType shall be EGLint and the
+ external window identifier shall be used as the value for the <win> parameter.
+ EGL_EXTERNAL_REF_ID_EXT with the context external reference id shall be in the
+ attrib_list. If the external window identifier and the external reference identifier
+ do not match a pair set using eglCompositorSetWindowListEXT window creation shall
+ fail.
+
+Add the function:
+
+ EGLBoolean eglCompositorSetContextListEXT(const EGLint *external_ref_ids,
+ EGLint num_entries);
+
+ This function is called by the primary context to establish the set of
+ all allowable secondary contexts by defining the set of external reference
+ identifiers. Secondary contexts shall identify their external reference
+ identifier by setting the EGL_EXTERNAL_REF_ID_EXT attribute when calling
+ eglCreateContext.
+ Calls to this function when the primary context for the display is not active,
+ shall return EGL_FALSE and do nothing. When this function is successful it
+ shall return EGL_TRUE and associate the list of external reference identifiers
+ with the active display.
+ This function shall only be called once per primary context. Subsequent calls
+ shall return EGL_FALSE and do nothing.
+
+ external_ref_ids shall be an array of user generated integers greater than 1.
+ num_entries shall specify the number of external_ref_ids.
+
+Add the function:
+
+ EGLBoolean eglCompositorSetContextAttributesEXT (EGLint external_ref_id,
+ const EGLint *context_attributes,
+ EGLint num_entries);
+
+ This function is called by the primary context to establish a list of compatible
+ context attributes.
+ Calls to this function when the primary context for the display is not active
+ shall return EGL_FALSE and do nothing. When the function is successful it shall
+ return EGL_TRUE and associate the given attributes to the subsequent
+ eglCreateContext call using the given external reference id.
+ The list of acceptable context_attributes is the same as the list for
+ eglCreateContext. Only when this list of attributes is compatible with those
+ used during context creation will the secondary context be created.
+ This function shall only be called once per secondary context, and must be called
+ before the secondary context is able to be created. Subsequent calls shall
+ return EGL_FALSE and do nothing.
+
+ num_entries shall specify the number of attributes in the list. This number
+ shall prevent accessing memory outside the attribute list, even if EGL_NONE is
+ not yet found in the list. If EGL_NONE is found sooner than this number of
+ attributes list parsing shall stop.
+
+Add the function:
+
+ EGLBoolean eglCompositorSetWindowListEXT (EGLint external_ref_id,
+ const EGLint *external_win_ids,
+ EGLint num_entries);
+
+ This function is called by the primary context to establish the set of
+ all allowable windows associated with a specific secondary context by defining
+ the set of external window identifiers. Window surface creation within secondary
+ contexts use the external window identifier as the native window handle parameter
+ of eglCreateWindowSurface and supply an external reference id as a window creation
+ attribute.
+ Calls to this function when the primary context for the display is not active,
+ shall return EGL_FALSE and do nothing. When this function is successful it
+ shall return EGL_TRUE and associate the list of external window identifiers
+ with the specified secondary context (external_ref_ids).
+
+ external_win_ids shall be an array of user generated integers greater than 1.
+ external window identifiers are unique within the primary EGLContext. Any
+ external window identifier may be associated with multiple secondary contexts
+ however only the first context which calls eglCreateWindowSurface shall
+ successfully create a window surface for the given window.
+ num_entries shall specify the number of external_ref_ids.
+
+Add the function:
+
+ EGLBoolean eglCompositorSetWindowAttributesEXT (EGLint external_win_id,
+ const EGLint *window_attributes,
+ EGLint num_entries);
+
+ This function is called by the primary context to set window specific attributes
+ for the specified external window id.
+
+ The list of valid attributes are: EGL_WIDTH, EGL_HEIGHT, EGL_VERTICAL_RESOLUTION,
+ EGL_HORIZONRAL_RESOLUTION, EGL_PIXEL_ASPECT_RATIO.
+ EGL_WIDTH and EGL_HEIGHT shall set the maximum width and height the secondary
+ context is able to create a window surface with.
+ EGL_VERTICAL_RESOLUTION, EGL_HORIZONTAL_RESOLUTION, and EGL_PIXEL_ASPECT_RATIO
+ shall set the values of these used by the secondary context.
+ Calls to this function when the primary context for the display is not active,
+ shall return EGL_FALSE and do nothing. When this function is successful it
+ shall return EGL_TRUE and associate the list of attributes with the off screen
+ window ID (external_win_id).
+ This function shall only be called once per window, and must be called before
+ the secondary context is able to create the window surface. Subsequent calls
+ shall return EGL_FALSE and do nothing.
+
+ num_entries shall specify the number of attributes in the list. This number
+ shall prevent accessing memory outside the attribute list, even if EGL_NONE is
+ not yet found in the list. If EGL_NONE is found sooner than this number of
+ attributes list parsing shall stop.
+
+Add the function:
+
+ EGLBoolean eglCompositorBindTexWindowEXT (EGLint external_win_id);
+
+ This function is similar to eglBindTexImage in that it binds the windows
+ color buffers to a texture object which can then be composited on the native
+ window by the primary context. This function shall only be callable within
+ the primary context while there is a texture object actively bound by the
+ native rendering API. The function shall return EGL_TRUE if the window is
+ successfully bound to the active texture object. The function shall return
+ EGL_FALSE if binding fails, the context is not the primary context, or the
+ external_win_id is not a valid external window reference as set using
+ eglCompositorSetWindowListEXT.
+
+Add the function:
+
+ EGLBoolean eglCompositorSetSizeEXT(EGLint external_win_id,
+ EGLint width, EGLint height);
+
+ This function shall be called by the primary context to set the width and
+ height of the window. This function returns EGL_FALSE when called by a context
+ other than the primary context. This function will also return EGL_FALSE if
+ the new width and height are larger than the maximums set by
+ eglCompositorSetWindowAttributesEXT. Upon successful window resizing the function
+ shall return EGL_TRUE.
+ Secondary contexts may use EGL to query the windows width and height at runtime
+ to detect window resize events. The window buffer resizing shall be applied
+ to the newly active buffer after the secondary context calls eglSwapBuffers.
+ This will leave an average of 2 buffers which will have to be scaled by the
+ native rendering API to the new resolution.
+
+Add the function:
+
+ EGLBoolean eglCompositorSwapPolicyEXT(EGLint external_win_id,
+ EGLint policy);
+
+ This function shall be called by the primary context to specify the handling
+ of buffer swaps of the context specified by external_ref_id.
+
+ When the policy is set to EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT, and the
+ secondary context completes a frame by calling eglSwapbuffers, and the
+ primary context is actively reading from the front buffer associated with
+ the external window ID, then the just completed frame is dropped, no buffer
+ swap occurs, and eglSwapBuffers will return EGL_TRUE.
+ If EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT is specified and the primary context
+ is actively reading from the front buffer associated with the external window
+ ID then the secondary context's call to eglSwapBuffers will return EGL_FALSE.
+ eglSwapBuffers will continue to return EGL_FALSE as long as the primary context
+ is actively reading from the front buffer. Once the primary context finishes
+ reading from the front buffer the next call to eglSwapBuffers will
+ return EGL_TRUE. It is up to the application to decide if it will wait until
+ eglSwapBuffers returns EGL_TRUE before rendering again. If the secondary
+ context continues to render after eglSwapBuffers returns EGL_FALSE then it will
+ be as if the swap policy was EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT.
+
+
+Revision History
+ Version 0.1, 30/08/2014 - first draft.
+ Version 0.2, 24/09/2014 second draft.
+ Version 0.3, 21/12/2016
+ Khronos vendor extension clean-up.
+ Version 0.4, 05/01/2016
+ - Change from context and display limitation to context and window limitations
+ - Added additional functions related to external window ids contexts.
+ Version 1.0, 03/02/2017
+ - Fixed misc issues related to parameter names and types.
+
+Question: How are external reference and window IDs assigned and managed? Are they
+ reserved somehow within a new EGL C header file?
+Answer: External IDs are assigned from the software component with the primary
+ context during an EGL initialization stage using eglCompositorSet*ListEXT.
+ The secondary contexts are provided the appropriate external reference ID
+ during end system integration. It is recommended that these values be able
+ to be set via a configuration parameter to the application, to ease
+ integration of multiple programs.
+
+Question: What happens when the secondary contexts render faster than the
+ primary context?
+Answer: This is based on the swap policy set by the compositor, and the rate
+ difference between the render and the compositor. Secondary contexts
+ will be notified by EGL_FALSE being returned if the windows front buffer
+ is currently being read by the compositor. However, if the compositor is
+ not currently reading the front buffer the swap will succeed and the
+ secondary contexts latest rendered frame will now be in the front buffer
+ to be composited.
+
+Question: What happens when the primary context renders faster than the
+ secondary context(s)?
+Answer: The contents of the windows front buffer will be repeated.
+
+Question: Does this infer any Z-ordering for the off-screen surfaces?
+Answer: No, the Z-order is applied by the compositor when doing the final on
+ screen rendering of the off-screen surfaces. Or may be set if a Z-ordering
+ extension is applied to the attribute list of the window using
+ eglCompositorSetWindowAttributesEXT
+
+Comments:
+
+The driver should also have to have enough protection in it to prevent a random
+software component from passing random buffer handles to the driver to prevent
+access to other software components.
+
+The driver may force use of double buffering event if the window surface was created
+using an EGL_RENDER_BUFFER attribute set to EGL_SINGLE_BUFFER.
+
+If EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT is not used to create a context for a specified
+display then EGL will act as though this extension is not enabled.
diff --git a/index.php b/index.php
index 9e2dbca..5a23662 100644
--- a/index.php
+++ b/index.php
@@ -306,6 +306,8 @@
<br> <a href="extensions/NV/EGL_NV_stream_socket.txt">EGL_NV_stream_socket_unix</a>
<br> <a href="extensions/NV/EGL_NV_stream_socket.txt">EGL_NV_stream_socket_inet</a>
</li>
+<li value=116> <a href="extensions/EXT/EGL_EXT_compositor.txt">EGL_EXT_compositor</a>
+</li>
</ol>
<h6> Providing Feedback on the Registry </h6>
diff --git a/registry.tcl b/registry.tcl
index e934fad..1712398 100644
--- a/registry.tcl
+++ b/registry.tcl
@@ -524,7 +524,7 @@
extension EGL_KHR_context_flush_control {
number 102
flags public
- filename ../gl/extensions/KHR/context_flush_control.txt
+ filename ../OpenGL/extensions/KHR/KHR_context_flush_control.txt
}
extension EGL_ARM_implicit_external_sync {
number 103
@@ -599,4 +599,9 @@
alias EGL_NV_stream_socket_unix
alias EGL_NV_stream_socket_inet
}
-# Next free extension number: 116
+extension EGL_EXT_compositor {
+ number 116
+ flags public
+ filename extensions/EXT/EGL_EXT_compositor.txt
+}
+# Next free extension number: 117