Name

    EXT_gl_colorspace_display_p3

Name Strings

    EGL_EXT_gl_colorspace_display_p3_linear
    EGL_EXT_gl_colorspace_display_p3

Contributors

    Courtney Goeltzenleuchter
    Jesse Hall

Contact

    Courtney Goeltzenleuchter (courtneygo 'at' google.com)

IP Status

    No known IP claims.

Status

    Draft

Version

     Version 1 - Mar 22, 2017

Number

    EGL Extension #118

Extension Type

    EGL display extension

Dependencies

    These extensions are written against the wording of the EGL 1.5
    specification (August 27, 2014).

    These extensions require EGL_KHR_gl_colorspace.

Overview

    Applications that want to use the Display-P3 color space (DCI-P3 primaries
    and linear or sRGB-like transfer function) can use this extension to
    communicate to the platform that framebuffer contents represent colors in
    the Display-P3 color space.
    The application is responsible for producing appropriate framebuffer
    contents, but will typically use built-in sRGB encoding in OpenGL and OpenGL
    ES to accomplish this.

New Procedures and Functions

    None.

New Tokens

    Accepted as attribute values for EGL_GL_COLORSPACE by
    eglCreateWindowSurface, eglCreatePbufferSurface and eglCreatePixmapSurface:

    [[ If EGL_EXT_gl_colorspace_display_p3_linear is supported ]]

        EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT         0x3362

    [[ If EGL_EXT_gl_colorspace_bt2020_pq is supported ]]

        EGL_GL_COLORSPACE_DISPLAY_P3_EXT                0x3363

Modifications to the EGL 1.5 Specification

    Insert below text in the 3rd paragraph on page 33 in 3.5.1 "Creating On-
    Screen Rendering Surfaces, before "The default value of EGL_GL_COLORSPACE
    is EGL_GL_COLORSPACE_LINEAR.":

    [[ If EGL_EXT_gl_colorspace_display_p3_linear is supported ]]

    If its value is EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT, then a linear
    Display-P3 color space is assumed, with a corresponding
    GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING value of GL_LINEAR.

    [[ If EGL_EXT_gl_colorspace_display_p3 is supported ]]

    If its value is EGL_GL_COLORSPACE_DISPLAY_P3_EXT, then a non-linear, sRGB
    encoded Display-P3 color space is assumed, with a corresponding GL_FRAME-
    BUFFER_ATTACHMENT_COLOR_ENCODING value of GL_SRGB.
    Only OpenGL and OpenGL ES contexts which support sRGB rendering must
    respect requests for EGL_GL_COLORSPACE_SRGB_KHR, and only to sRGB
    formats supported by the context (normally just SRGB8).

    Modify the 4th paragraph on the same page:

    Note that the EGL_GL_COLORSPACE_SRGB attribute is used only by OpenGL and
    OpenGL ES contexts supporting sRGB framebuffers. EGL itself does not
    distinguish multiple colorspace models. Refer to the "sRGB Conversion"
    sections of the OpenGL 4.4 and OpenGL ES 3.0 specifications for more
    information.

Errors

    Modify below error in the "Errors" section on page 34:

    "If config does not support the OpenVG colorspace or alpha format at-
    tributes specified in attrib list (as defined for eglCreatePlatformWindow-
    Surface), an EGL_BAD_MATCH error is generated."

    To include OpenGL colorspace as well:

    "If config does not support the OpenGL colorspace, the OpenVG colorspace or
    alpha format attributes specified in attrib list (as defined for eglCreate-
    PlatformWindowSurface), an EGL_BAD_MATCH error is generated."

Issues

    1. Removed section talking about HDR features, e.g. luminance > 80nits.
       Do we want to keep that here in anticipation of HDR support in the future?

    2. When creating an EGL surface, what happens when the specified colorspace
       is not compatible with or supported by the EGLConfig?

       RESOLVED: There is currently no way to query the compatibility of a
       EGLConfig and colorspace pair. So the only option is to define an error
       case similar to that of OpenVG colorspace, i.e. if config does not
       support the colorspace specified in attrib list (as defined for egl-
       CreateWindowSurface, eglCreatePbufferSurface and eglCreatePixmapSurface),
       an EGL_BAD_MATCH error is generated.

Revision History

    Version 1, 2017/03/22
      - Internal revisions

