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.
