Adding EGL_ARM_image_format. (#99)

diff --git a/api/EGL/egl.h b/api/EGL/egl.h
index f8cade1..5fa4c4c 100644
--- a/api/EGL/egl.h
+++ b/api/EGL/egl.h
@@ -33,7 +33,7 @@
 ** used to make the header, and the header can be found at
 **   http://www.khronos.org/registry/egl
 **
-** Khronos $Git commit SHA1: 0f3a3945bf $ on $Git commit date: 2019-11-13 13:25:18 +0000 $
+** Khronos $Git commit SHA1: aa9b63f3ab $ on $Git commit date: 2020-01-06 19:36:27 +0000 $
 */
 
 #include <EGL/eglplatform.h>
@@ -42,7 +42,7 @@
 #define EGL_EGL_PROTOTYPES 1
 #endif
 
-/* Generated on date 20191212 */
+/* Generated on date 20200219 */
 
 /* Generated C header for:
  * API: egl
diff --git a/api/EGL/eglext.h b/api/EGL/eglext.h
index 53442d3..a12a6e8 100644
--- a/api/EGL/eglext.h
+++ b/api/EGL/eglext.h
@@ -33,12 +33,12 @@
 ** used to make the header, and the header can be found at
 **   http://www.khronos.org/registry/egl
 **
-** Khronos $Git commit SHA1: 0f3a3945bf $ on $Git commit date: 2019-11-13 13:25:18 +0000 $
+** Khronos $Git commit SHA1: aa9b63f3ab $ on $Git commit date: 2020-01-06 19:36:27 +0000 $
 */
 
 #include <EGL/eglplatform.h>
 
-#define EGL_EGLEXT_VERSION 20191212
+#define EGL_EGLEXT_VERSION 20200219
 
 /* Generated C header for:
  * API: egl
@@ -598,6 +598,12 @@
 #define EGL_FIXED_SIZE_ANGLE              0x3201
 #endif /* EGL_ANGLE_window_fixed_size */
 
+#ifndef EGL_ARM_image_format
+#define EGL_ARM_image_format 1
+#define EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM 0x3287
+#define EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM 0x3288
+#endif /* EGL_ARM_image_format */
+
 #ifndef EGL_ARM_implicit_external_sync
 #define EGL_ARM_implicit_external_sync 1
 #define EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM 0x328A
diff --git a/api/egl.xml b/api/egl.xml
index 8dca413..66ca8fa 100644
--- a/api/egl.xml
+++ b/api/egl.xml
@@ -744,7 +744,9 @@
         <enum value="0x3284" name="EGL_YUV_CHROMA_SITING_0_EXT"/>
         <enum value="0x3285" name="EGL_YUV_CHROMA_SITING_0_5_EXT"/>
         <enum value="0x3286" name="EGL_DISCARD_SAMPLES_ARM"/>
-            <unused start="0x3287" end="0x3289"/>
+        <enum value="0x3287" name="EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM"/>
+        <enum value="0x3288" name="EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM"/>
+            <unused start="0x3289" end="0x3289"/>
         <enum value="0x328A" name="EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM"/>
             <unused start="0x328B" end="0x328F"/>
     </enums>
@@ -3352,5 +3354,11 @@
                 <type name="PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWL"/>
             </require>
         </extension>
+        <extension name="EGL_ARM_image_format" supported="egl">
+            <require>
+                <enum name="EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM"/>
+                <enum name="EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM"/>
+            </require>
+        </extension>
     </extensions>
 </registry>
diff --git a/extensions/ARM/EGL_ARM_image_format.txt b/extensions/ARM/EGL_ARM_image_format.txt
new file mode 100644
index 0000000..c1a40ec
--- /dev/null
+++ b/extensions/ARM/EGL_ARM_image_format.txt
@@ -0,0 +1,126 @@
+Name
+
+    ARM_image_format
+
+Name Strings
+
+    EGL_ARM_image_format
+
+Contributors
+
+    Jan-Harald Fredriksen
+
+Contact
+
+    Jan-Harald Fredriksen (jan-harald.fredriksen 'at' arm.com)
+
+IP Status
+
+    No known IP claims.
+
+Status
+
+    Complete
+
+Version
+
+     Version 1 - February 18, 2020
+
+Number
+
+    138
+
+Dependencies
+
+    This extension is written against the wording of the EGL 1.4
+    specification.
+
+    This extension reuses tokens from EGL_EXT_pixel_format_float.
+
+Overview
+
+    When an EGLImage is created from an existing image resource the
+    implementation will deduce the format of the image data from that
+    resource. In some cases, however, the implementation may not know how to
+    map the existing image resource to a known format. This extension extends
+    the list of attributes accepted by eglCreateImageKHR such that applications
+    can tell the implementation how to interpret the data.
+
+New Procedures and Functions
+
+    None.
+
+New Tokens
+
+   Accepted as an attribute name in the <attrib_list> argument of
+   eglCreateImageKHR:
+        EGL_COLOR_COMPONENT_TYPE_EXT                   0x3339
+
+   Accepted as attribute values for the EGL_COLOR_COMPONENT_TYPE_EXT attribute
+   of eglCreateImageKHR:
+
+        EGL_COLOR_COMPONENT_TYPE_FIXED_EXT              0x333A
+        EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT              0x333B
+        EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM   0x3287
+        EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM            0x3288
+        EGL_RED_SIZE                                    0x3024
+        EGL_GREEN_SIZE                                  0x3023
+        EGL_BLUE_SIZE                                   0x3022
+        EGL_ALPHA_SIZE                                  0x3021
+
+Modifications to the EGL 1.4 Specification
+
+   Add the following rows to Table 3.xx: Legal attributes for
+   eglCreateImageKHR <attrib_list> parameter:
+
+      +------------------------------+------------------------------+-----------+---------------+
+      | Attribute                    | Description                  | Valid     | Default Value |
+      |                              |                              | <target>s |               |
+      +------------------------------+------------------------------+-----------+---------------+
+      | EGL_COLOR_COMPONENT_TYPE_EXT | Specifies the component      | All       | NA            |
+      |                              | type the EGLImage source     |           |               |
+      |                              | is interpreted as            |           |               |
+      | EGL_RED_SIZE                 | Specifies the red component  | All       | NA            |
+      |                              | size the EGLImage source     |           |               |
+      |                              | is interpreted as            |           |               |
+      | EGL_GREEN_SIZE               | Specifies the green component| All       | NA            |
+      |                              | size the EGLImage source     |           |               |
+      |                              | is interpreted as            |           |               |
+      | EGL_BLUE_SIZE                | Specifies the blue component | All       | NA            |
+      |                              | size the EGLImage source     |           |               |
+      |                              | is interpreted as            |           |               |
+      | EGL_ALPHA_SIZE               | Specifies the alpha component| All       | NA            |
+      |                              | size the EGLImage source     |           |               |
+      |                              | is interpreted as            |           |               |
+      +------------------------------+------------------------------+-----------+---------------+
+
+    If <attrib_list> specifies values for EGL_COLOR_COMPONENT_TYPE_EXT,
+    EGL_RED_SIZE, EGL_GREEN_SIZE, EGL_BLUE_SIZE, or EGL_ALPHA_SIZE, the
+    implementation will treat these as hints for how to interpret the contents
+    of <buffer>.
+
+    EGL_COLOR_COMPONENT_TYPE_EXT indicates the component type of <buffer> and
+    must be either EGL_COLOR_COMPONENT_TYPE_FIXED_EXT for fixed-point,
+    EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT for floating-point,
+    EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM for unsigned integer, or
+    EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM for integer components.
+
+Add to the list of error conditions for eglCreateImageKHR:
+
+    * If the implementation is unable to interpret the contents <buffer>
+      according to the component types and sizes in <attrib_list>, then a
+      EGL_BAD_MATCH error is generated.
+
+Issues
+
+    1. Should there be a way to specify the component order?
+
+       Resolved. No, the component order is interpreted to be R, G, B, A,
+       with R mapping to component 0. If the application needs a different
+       component order it can use swizzle in the client API side or in the
+       shader.
+
+Revision History
+
+    Version 1, 2020/02/18
+      - Internal revisions
diff --git a/registry.tcl b/registry.tcl
index bf7c17f..29c1bbc 100644
--- a/registry.tcl
+++ b/registry.tcl
@@ -709,4 +709,9 @@
     flags	public
     filename	extensions/WL/EGL_WL_create_wayland_buffer_from_image.txt
 }
-# Next free extension number: 138
+extension EGL_ARM_image_format {
+    number	138
+    flags	public
+    filename	extensions/ARM/EGL_ARM_image_format.txt
+}
+# Next free extension number: 139