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 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 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. " specifies the type of buffer to be bound. The only allowed values of are EGL_OPENVG_IMAGE and EGL_IOSURFACE_ANGLE". Append the following text to the fourth paragraph of Section 3.5.3. "When is EGL_IOSURFACE_ANGLE, must be a valid IOSurface object case into the type EGLClientBuffer." Append to the end of Section 3.5.3. "When is EGL_IOSURFACE_ANGLE, 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 . - EGL_HEIGHT with a value between 1 and the height of . - 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 (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