Name

    EXT_gl_colorspace_scrgb

Name Strings

    EGL_EXT_gl_colorspace_scrgb

Contributors

    Courtney Goeltzenleuchter
    Lauri Hyvarinen
    Weiwan Liu
    Arun Swain

Contact

    Courtney Goeltzenleuchter (courtneygo 'at' google.com)

IP Status

    No known IP claims.

Status

    Draft

Version

     Version 1 - June 21, 2017

Number

    EGL Extension #119

Dependencies

    This extension is written against the wording of the EGL 1.5 specification
    (August 27, 2014).

    This extension requires EGL_KHR_gl_colorspace and EGL_EXT_pixel_format_-
    float, and interacts with EGL_EXT_surface_SMPTE2086_metadata. This extension
    is closely related to EGL_EXT_gl_colorspace_scrgb_linear.

Overview

    This extension provides a new color space option, scRGB, for applications to
    choose from when creating an EGLSurface. The scRGB color space defines a
    non-linear display referred space. It has the same white point and color
    primaries as sRGB, and thus is backward-compatible with sRGB. Refer to
    the IEC 61966-2-2:2003 standard for details on scRGB color space.

    This extension chooses to use floating-point formats for scRGB color space.
    For each color channel, the floating-point values of 0.0 and 1.0 still
    correspond to sRGB chromaticities and luminance levels. However, scRGB
    space allows for color values beyond the range of [0.0, 1.0], and can thus
    achieve a larger color volume than that of sRGB. As it is display referred,
    scRGB space makes assumptions of how the floating-point color values should
    map to luminance levels by the underlying display pipeline. The expected
    mapping is such that a color value of (1.0, 1.0, 1.0) corresponds to a
    luminance level of 80 nits on a standardized studio monitor. As the color
    value per channel goes beyond 1.0 and up to 125.0, the corresponding
    luminance levels also increase linearly to a maximum of 10000 nits.

    The application is responsible for applying the extended sRGB transfer
    function to color values written to or read from a surface with a
    colorspace of EGL_EXT_gl_colorspace_scrgb.

New Procedures and Functions

    None.

New Tokens

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

        EGL_GL_COLORSPACE_SCRGB_EXT            0x3351

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_scrgb is supported ]]

    If its value is EGL_GL_COLORSPACE_SCRGB_EXT, then a non-linear scRGB
    color space is assumed. with a corresponding GL_FRAMEBUFFER_ATTACHMENT_-
    COLOR_ENCODING value of GL_SRGB. As defined in IEC 61966-2-2:2003, scRGB
    is a color space and has the same white point and color primaries as
    those of sRGB. The application is responsible for applying the appropriate
    extended sRGB transfer function when reading or writing to this surface.


    Add two paragraphs after the 4th paragraph above:

    When using a floating-point EGL surface with EGL_GL_COLORSPACE_SCRGB_EXT,
    the display-referred values in the range of (0.0, 0.0, 0.0) to
    (1.0, 1.0, 1.0) correspond to a luminance range of 0 to 80 nits, which is
    the same luminance range for sRGB. To achieve a larger dynamic range of up
    to 10000 nits, the output values can go beyond 1.0 and to a range of
    [0.0, 125.0] (approximately 7.83 after the extended sRGB transfer function
    applied) for each channel.

    The effective color gamut and luminance range of the content that extend
    beyond those of sRGB may be described via EGL_EXT_surface_SMPTE2086_metadata.
    It is highly recommended to supply such metadata, so the display pipeline
    may use this information to transform the the colors in a manner that
    attempts to preserve the creative intent of the color data.

    In the "Errors" section on page 34 in 3.5.1 "Creating On Screen Rendering
    Surfaces", change the 3rd error definition to:

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

Issues

    * Clarifications on the scRGB colorspace extensions

Revision History

    Version 1, 2017/06/21
    - Initial draft

    Version 2, 2017/08/17
    - Clarify definition of color space
