| Name |
| |
| KHR_config_attribs |
| |
| Name Strings |
| |
| EGL_KHR_config_attribs |
| |
| Contributors |
| |
| Jon Leech |
| |
| Contacts |
| |
| Jon Leech (jon 'at' alumni.caltech.edu) |
| |
| Notice |
| |
| Copyright (c) 2006-2013 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Status |
| |
| Complete |
| |
| Version |
| |
| Version 5, April 5, 2007 |
| |
| Number |
| |
| EGL Extension #1 |
| |
| Dependencies |
| |
| Requires EGL 1.2 |
| |
| Some of the extended config attributes defined by this extension are |
| only relevant when specific client APIs are supported. |
| |
| This extension is written against the wording of the EGL 1.2 |
| Specification. It exists for backwards compatibility with |
| functionality introduced in EGL 1.3. |
| |
| Overview |
| |
| This extension adds new EGL config attributes and attribute bits |
| that express limitations of configs on a per-API basis, including |
| whether client APIs created with respect to a config are expected to |
| pass conformance, and which optional OpenVG color space and alpha |
| mask format attributes are valid at surface creation time. |
| |
| New Types |
| |
| None |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| New EGLConfig bitmask attribute name: |
| |
| EGL_CONFORMANT_KHR 0x3042 |
| |
| Valid bitfields in the EGL_SURFACE_TYPE bitmask attribute |
| of EGLConfig: |
| |
| EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 |
| EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 |
| |
| Additions to Chapter 3 of the EGL 1.2 Specification (EGL Functions and Errors) |
| |
| Add to table 3.1, "EGLConfig attributes": |
| |
| Attribute Type Notes |
| --------- ---- ----- |
| EGL_CONFORMANT_KHR bitmask whether contexts created with |
| this config are conformant |
| |
| Add to table 3.2, "Types of surfaces supported by an EGLConfig": |
| |
| EGL Token Name Description |
| -------------- ----------- |
| EGL_VG_COLORSPACE_LINEAR_BIT_KHR EGLConfig supports OpenVG rendering |
| in linear colorspace |
| EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR EGLConfig supports OpenVG rendering |
| with premultiplied alpha |
| |
| Add following the second paragraph of "Other EGLConfig Attribute |
| Descriptions" in section 3.4 on p. 16: |
| |
| "If EGL_VG_COLORSPACE_LINEAR_BIT_KHR is set in EGL_SURFACE_TYPE, |
| then the EGL_COLORSPACE attribute may be set to |
| EGL_COLORSPACE_LINEAR when creating a window, pixmap, or pbuffer |
| surface (see section 3.5)." |
| |
| "If EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR is set in EGL_SURFACE_TYPE, |
| then the EGL_ALPHA_FORMAT attribute may be set to |
| EGL_ALPHA_FORMAT_PRE when creating a window, pixmap, or pbuffer |
| surface (see section 3.5)." |
| |
| Add at the end of the fourth paragraph (description of |
| EGL_CONFIG_CAVEAT) on p. 17: |
| |
| "... required OpenGL ES conformance tests (note that |
| EGL_NON_CONFORMANT_CONFIG is obsolete, and the same information |
| can be obtained from the EGL_CONFORMANT_KHR attribute on a |
| per-client-API basis, not just for OpenGL ES." |
| |
| "EGL_CONFORMANT_KHR is a mask indicating if a client API context |
| created with respect to the corresponding EGLConfig will pass |
| the required conformance tests for that API. The valid bit |
| settings are the same as for EGL_RENDERABLE_TYPE, as defined in |
| table 3.3, but the presence or absence of each client API bit |
| determines whether the corresponding context will be conformant |
| or non-conformant(fn1)." |
| |
| "(fn1) most EGLConfigs should be conformant for all supported |
| client APIs. Conformance requirements limit the number of |
| non-conformant configs that an implementation can define." |
| |
| Add to the last paragraph of section 3.5.1 on p. 24 (describing |
| eglCreateWindowSurface): |
| |
| "If <config> does not support the colorspace or alpha format |
| attributes specified in <attrib_list> (e.g. if EGL_COLORSPACE is |
| specified as EGL_COLORSPACE_LINEAR but the EGL_SURFACE_TYPE |
| attribute of <config> does not include |
| EGL_VG_COLORSPACE_LINEAR_BIT_KHR, or if EGL_ALPHA_FORMAT is |
| specified as EGL_ALPHA_FORMAT_PRE but EGL_SURFACE_TYPE does not |
| include EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR), an EGL_BAD_MATCH error |
| is generated." |
| |
| Add to the next-to-last paragraph of section 3.5.2 on p. 26 |
| (describing eglCreatePbufferSurface): |
| |
| "If <config> does not support the colorspace or alpha format |
| attributes specified in <attrib_list> (as defined for |
| eglCreateWindowSurface), an EGL_BAD_MATCH error is generated." |
| |
| Add to the last paragraph of section 3.5.4 on p. 29 (describing |
| eglCreatePixmapSurface): |
| |
| "If <config> does not support the colorspace or alpha format |
| attributes specified in <attrib_list> (as defined for |
| eglCreateWindowSurface), an EGL_BAD_MATCH error is generated." |
| |
| Issues |
| |
| 1) How should colorspace and alpha format restrictions be specified? |
| OpenVG implementations may not allow linear colorspace or |
| premultiplied alpha rendering to all configs they support. |
| |
| RESOLVED: To maximize compatibility with EGL 1.3, we continue to |
| specify the desired colorspace and alpha format at surface |
| creation time. However, surface creation may fail if if the |
| specified colorspace or alpha format are not supported. |
| |
| To allow apps to detect this situation, this extension adds |
| EGLConfig attributes specifying *if* linear colorspace and/or |
| premultiplied alpha formats are supported. If they are not |
| supported, surface creation with the corresponding attributes |
| set will fail with an EGL_BAD_MATCH error. |
| |
| 2) How should the colorspace and alpha format capabilities be |
| exposed in EGLConfigs? |
| |
| RESOLVED: as bitfields of the existing EGL_SURFACE_TYPE bitmask |
| attribute. |
| |
| A separate bitmask might be more orthogonal, but there are |
| plenty of unused bits in EGL_SURFACE_TYPE and this minimizes API |
| and programming complexity. |
| |
| 3) Are support for linear colorspace and and premultiplied alpha |
| formats orthogonal? |
| |
| RESOLVED: Yes, according to the OpenVG Working Group. If they |
| were not orthogonal, we could not specify them as independent |
| bitfields. |
| |
| 4) Should information about conformance be specified on a |
| per-client-API basis? |
| |
| RESOLVED: Yes. This is needed for conformance testing and cannot |
| be expressed by the EGL_CONFIG_CAVEAT attribute, which is OpenGL |
| ES-specific. |
| |
| 5) Should there also be a config attribute which specifies whether |
| EGL_RENDER_BUFFER will be respected? |
| |
| UNRESOLVED: it would be consistent to add this attribute. but |
| it's not clear if there's a requirement for doing so yet. |
| |
| 6) Does this extension introduce a regression against EGL 1.2? |
| |
| RESOLVED: Yes. This is unavoidable, since we're allowing failure |
| of surface creation that was required to succeed in the past. |
| However, implementations that could not support the required |
| colorspace or alpha mask format were effectively non-conformant |
| (e.g. broken) in any event. The new EGL_SURFACE_TYPE attributes |
| at least allow apps to know that their request will not be |
| satisfied. |
| |
| Dependencies on OpenGL ES |
| |
| If OpenGL ES is not supported, the EGL_OPENGL_ES_BIT in the |
| EGL_CONFORMANT_KHR is irrelevant. |
| |
| Dependencies on OpenVG |
| |
| If OpenVG is not supported, the EGL_OPENVG_BIT bit in |
| EGL_CONFORMANT_KHR, and the EGL_VG_COLORSPACE_LINEAR_BIT_KHR and |
| EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR bits in EGL_SURFACE_TYPE, are |
| irrelevant. |
| |
| Revision History |
| |
| Version 5, 2007/04/05 - add enum values corresponding to EGL 1.3 |
| core features. |
| Version 4, 2006/10/24 - prefix the bitfield names with "VG" to |
| clarify that they only apply to OpenVG rendering to surfaces |
| (although the corresponding core EGL_COLORSPACE and |
| EGL_ALPHA_FORMAT attribute names do not currently include this |
| prefix). Use "KHR" suffix instead of "OES". |
| Version 3, 2006/10/15 - add new config attribute to express whether |
| configs are conformant on a per-API basis. Correct sRGB |
| terminology to linear (sRGB is the default, linear colorspace |
| rendering may not be supported). Change extension name |
| accordingly. |
| Version 2, 2006/09/26 - add _OES extension suffix to bitfield names. |
| Version 1, 2006/09/26 - first draft. |