Name

    ANGLE_yuv_internal_format

Name Strings

    GL_ANGLE_yuv_internal_format

Contributors

    Mohan Maiya, Samsung
    Jamie Madill, Google

Contacts

    Mohan Maiya, Samsung (m.maiya 'at' samsung 'dot' com)

Notice

    Copyright (c) 2021 The Khronos Group Inc. Copyright terms at
        http://www.khronos.org/registry/speccopyright.html

Status

    Draft.

Version

    Version 5, June 23, 2021

Number

    OpenGL ES Extension ###

Dependencies

    OpenGL ES 3.0 is required.

Overview

    This extension introduces a few sized internal YUV texture formats
    that can be used to create immutable textures using the TexStorage2D API.
    The only valid texture target supported is TEXTURE_2D, an INVALID_ENUM
    error is generated otherwise. There is no mipmap support and only NEAREST
    minification and magnification filters are supported.

    Support for the extension only requires the support of the commonly used 8-bit
    2-plane YUV format listed in the "New Tokens" section, refer to [fn1] for details
    about the formats and layout. It is up to the implementation to extend support
    for the other YUV formats.

    [fn1] : https://www.fourcc.org/yuv.php

New Types

    None.

New Procedures and Functions

    None.

New Tokens

    List of non-standard YUV internal formats

    // 8-bit YUV formats
    G8_B8R8_2PLANE_420_UNORM_ANGLE                    0x96B1
    G8_B8_R8_3PLANE_420_UNORM_ANGLE                   0x96B2

    // 10-bit YUV formats
    G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_ANGLE   0x96B3
    G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_ANGLE  0x96B4

    // 12-bit YUV formats
    G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_ANGLE   0x96B5
    G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_ANGLE  0x96B6

    // 16-bit YUV formats
    G16_B16R16_2PLANE_420_UNORM_ANGLE                 0x96B7
    G16_B16_R16_3PLANE_420_UNORM_ANGLE                0x96B8


Issues

    1. How was the new format list chosen?

       Commonly used planar YUV formats across various platforms were surveyed,
       including new platforms that support HDR content. A subset of those were
       chosen to be required. It is up to the implementations to extend support
       for the rest of the formats.

    2. What is the colorspace of image data of a texture created with the new formats?

       The texture or sampler parameter APIs can be expanded to indicate the colorspace
       in a layered extension and is outside the scope of this extension. The colorspace
       for textures with the above YUV formats is assumed to be ITU-R BT.601 with YUV
       values in limited range. Refer to ITU-R BT.601 spec for further details.

Revision History

    #5 - (June 23, 2021) Mohan Maiya
         Renamed format enums from *_ANGLEX to *_ANGLE

    #4 - (June 23, 2021) Mohan Maiya
         Removed references to GL_OES_EGL_image_external
         and restricted the spec to simply introducing new
         sized internal YUV formats. Also updated enum values

    #3 - (June 8, 2021) Mohan Maiya
         Clarification regarding default colorspace

    #2 - (May 10, 2021) Mohan Maiya
         Update overview section to specify support for
         immutable textures

    #1 - (April 10, 2021) Mohan Maiya
         Original draft
