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.