eglCreatePbufferFromClientBuffer implementation Added support for eglCreatePbufferFromClientBuffer(), using an IOSurface on MacOS, or just a straight buffer pointer on other platforms. Added new unit tests (IOSurfaceClientBufferTest class), which pass on both Windows and MacOS. Change-Id: I79a6b420d85fb1f3ae505e0c0067bad2e27510d4 Reviewed-on: https://swiftshader-review.googlesource.com/17168 Tested-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/extensions/EGL_ANGLE_iosurface_client_buffer.txt b/extensions/EGL_ANGLE_iosurface_client_buffer.txt new file mode 100644 index 0000000..692f721 --- /dev/null +++ b/extensions/EGL_ANGLE_iosurface_client_buffer.txt
@@ -0,0 +1,122 @@ +Name + + ANGLE_iosurface_client_buffer + +Name Strings + + EGL_ANGLE_iosurface_client_buffer + +Contributors + + Corentin Wallez + Geoff Lang + +Contacts + + Corentin Wallez, Google Inc. (cwallez 'at' google.com) + +Status + + Draft + +Version + + Version 1, Dec 6, 2017 + +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 + +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 of EGL_TEXTURE_RECTANGLE_ANGLE + - 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." + + --------------------------------------------------------------------------- + Texture Type Texture Internal Format + --------------------------------------------------------------------------- + GL_UNSIGNED_BYTE GL_RED + GL_UNSIGNED_SHORT GL_R16UI + GL_UNSIGNED_BYTE GL_RG + GL_UNSIGNED_BYTE GL_BGRA_EXT + 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 list of errors generated by eglMakeCurrent in Section 3.7.3: + " - If either draw or read are pbuffers created with + eglCreatePbufferFromClientBuffer with <buftype> set to EGL_IOSURFACE_ANGLE, + an EGL_BAD_SURFACE is generated." + +Issues + + There are no issues, please move on. + +Revision History + + Version 1, 2017/12/06 - first draft.