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