| Name |
| |
| ANGLE_iosurface_client_buffer |
| |
| Name Strings |
| |
| EGL_ANGLE_iosurface_client_buffer |
| |
| Contributors |
| |
| Corentin Wallez |
| Geoff Lang |
| James Darpinian |
| |
| Contacts |
| |
| Corentin Wallez, Google Inc. (cwallez 'at' google.com) |
| |
| Status |
| |
| Draft |
| |
| Version |
| Version 6, Aug 25, 2020 |
| |
| Number |
| |
| EGL Extension #?? |
| |
| Dependencies |
| |
| This extension is written against the wording of the EGL 1.4 |
| Specification. |
| |
| Overview |
| |
| This extension allows creating EGL surfaces from IOSurface objects. |
| |
| New Types |
| |
| None |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted in the <buftype> parameter of eglCreatePbufferFromClientBuffer: |
| |
| EGL_IOSURFACE_ANGLE 0x3454 |
| EGL_IOSURFACE_PLANE_ANGLE 0x345A |
| EGL_TEXTURE_RECTANGLE_ANGLE 0x345B |
| EGL_TEXTURE_TYPE_ANGLE 0x345C |
| EGL_TEXTURE_INTERNAL_FORMAT_ANGLE 0x345D |
| EGL_IOSURFACE_USAGE_HINT_ANGLE 0x348A |
| |
| Accepted in the <attribute> parameter of |
| eglGetConfigAttrib: |
| |
| EGL_BIND_TO_TEXTURE_TARGET_ANGLE 0x348D |
| |
| Additions to Chapter 3 of the EGL 1.4 Specification (EGL Functions and Errors) |
| |
| Replace the last sentence of paragraph 1 of Section 3.5.3 with the |
| following text. |
| "Currently, the only client API resources which may be bound in this |
| fashion are OpenVG VGImage objects and IOSurface objects." |
| |
| Replace the third paragraph of Section 3.5.3 with the following text. |
| "<buftype> specifies the type of buffer to be bound. The only allowed values |
| of <buftype> are EGL_OPENVG_IMAGE and EGL_IOSURFACE_ANGLE". |
| |
| Append the following text to the fourth paragraph of Section 3.5.3. |
| "When <buftype> is EGL_IOSURFACE_ANGLE, <buffer> must be a valid IOSurface |
| object case into the type EGLClientBuffer." |
| |
| Append to the end of Section 3.5.3. |
| "When <buftype> is EGL_IOSURFACE_ANGLE, <attrib_list> must contain all the |
| following attributes otherwise EGL_BAD_PARAMETER is generated. The |
| attributes must satisfy the following constraints otherwise |
| EGL_BAD_ATTRIBUTE is generated: |
| - EGL_TEXTURE_TYPE_ANGLE, and EGL_TEXTURE_INTERNAL_FORMAT_ANGLE followed |
| by OpenGL enums for texture types, and texture internal format |
| respectively. |
| - EGL_TEXTURE_FORMAT with a value of EGL_TEXTURE_RGBA |
| - EGL_WIDTH with a value between 1 and the width of <buffer>. |
| - EGL_HEIGHT with a value between 1 and the height of <buffer>. |
| - EGL_TEXTURE_TARGET with a value that matches the attribute |
| EGL_BIND_TO_TEXTURE_TARGET_ANGLE as queried from eglGetConfigAttrib. |
| - EGL_IOSURFACE_PLANE_ANGLE with a value between 0 and the number of |
| planes of <buffer> (exclusive). |
| |
| In addition the EGL_TEXTURE_TYPE_ANGLE and |
| EGL_TEXTURE_INTERNAL_FORMAT_ANGLE attributes must be one of the |
| combinations listed in table egl.iosurface.formats or an |
| EGL_BAD_PARAMETER is generated. The combination must also be a valid |
| combinations for glTexImage2D or EGL_BAD_PARAMETER is generated. |
| |
| The attribute EGL_IOSURFACE_USAGE_HINT_ANGLE may optionally be specified as |
| a combination of the bits EGL_IOSURFACE_READ_HINT_ANGLE and |
| EGL_IOSURFACE_WRITE_HINT_ANGLE. On the iOS Simulator platform, where |
| IOSurface support is incomplete, these hints indicate whether the intent is |
| to read from the IOSurface, write to it, or both. Explicitly passing 0 for |
| this attribute is equivalent to setting both the read and write usage |
| bits. This attribute is ignored on other platforms." |
| |
| --------------------------------------------------------------------------- |
| Texture Type Texture Internal Format |
| --------------------------------------------------------------------------- |
| GL_UNSIGNED_BYTE GL_RED |
| GL_UNSIGNED_SHORT GL_RED |
| GL_UNSIGNED_SHORT GL_R16UI |
| GL_UNSIGNED_BYTE GL_RG |
| GL_UNSIGNED_SHORT GL_RG |
| GL_UNSIGNED_BYTE GL_RGB |
| GL_UNSIGNED_BYTE GL_BGRA_EXT |
| GL_UNSIGNED_INT_2_10_10_10_REV GL_RGB10_A2 |
| GL_HALF_FLOAT GL_RGBA |
| --------------------------------------------------------------------------- |
| Table egl.iosurface.formats - Valid combinations of format, type and |
| internal format for IOSurface-backed pbuffers. |
| --------------------------------------------------------------------------- |
| |
| Append to the end of Section 3.5.3. |
| "When a pbuffer is created with type EGL_IOSURFACE_ANGLE, the contents |
| of the associcated IOSurface object are undefined while the pbuffer is |
| bound to a client texture." |
| |
| Append to the end of Table 3.1. |
| --------------------------------------------------------------------------- |
| Attribute Type Notes |
| --------------------------------------------------------------------------- |
| EGL_BIND_TO_TEXTURE_TARGET_ANGLE enum Texture target supported by |
| IOSurface-backed pbuffers. |
| --------------------------------------------------------------------------- |
| |
| |
| Issues |
| |
| 1. Can RGB formats be supported? |
| |
| RESOLVED: Support for RGB internal formats is added in version 3. Surfaces |
| with an RGB format will ensure that the alpha channel of the IOSurface is |
| reset to 1.0 when it is used. |
| |
| Revision History |
| |
| Version 1, 2017/12/06 - first draft. |
| Version 2, 2019/04/01 - Allow MakeCurrent. |
| Version 3, 2019/08/13 - Allow RGB internal formats |
| Version 4, 2019/12/28 - Add usage hint; require TEXTURE_RECTANGLE on macOS |
| and TEXTURE_2D on iOS |
| Version 5, 2020/06/30 - Allow RGB10_A2 internal formats |
| Version 6, 2020/08/25 - Allow R16 and RG16 formats for P010 surfaces |