Name

    MESA_ycbcr_texture

Name Strings

    GL_MESA_ycbcr_texture

Contact

    Brian Paul, Tungsten Graphics, Inc. (brian.paul 'at' tungstengraphics.com)
    Keith Whitwell, Tungsten Graphics, Inc.  (keith 'at' tungstengraphics.com)

Status

    Shipping (Mesa 4.0.4 and later)

Version

    1.0

Number

    TBD

Dependencies

    OpenGL 1.0 or later is required
    This extensions is written against the OpenGL 1.4 Specification.
    NV_texture_rectangle effects the definition of this extension.

Overview

    This extension supports texture images stored in the YCbCr format.
    There is no support for converting YCbCr images to RGB or vice versa
    during pixel transfer.  The texture's YCbCr colors are converted to
    RGB during texture sampling, after-which, all the usual per-fragment
    operations take place.  Only 2D texture images are supported (not
    glDrawPixels, glReadPixels, etc).

    A YCbCr pixel (texel) is a 16-bit unsigned short with two components.
    The first component is luminance (Y).  For pixels in even-numbered
    image columns, the second component is Cb.  For pixels in odd-numbered
    image columns, the second component is Cr.  If one were to convert the
    data to RGB one would need to examine two pixels from columns N and N+1
    (where N is even) to deduce the RGB color.

IP Status

    None

Issues

    None

New Procedures and Functions

    None

New Tokens

    Accepted by the <internalFormat> and <format> parameters of
    TexImage2D and TexSubImage2D:

        YCBCR_MESA                   0x8757

    Accepted by the <type> parameter of TexImage2D and TexSubImage2D:

        UNSIGNED_SHORT_8_8_MESA      0x85BA /* same as Apple's */
        UNSIGNED_SHORT_8_8_REV_MESA  0x85BB /* same as Apple's */

Additions to Chapter 2 of the OpenGL 1.4 Specification (OpenGL Operation)

    None

Additions to Chapter 3 of the OpenGL 1.4 Specification (Rasterization)

    In section 3.6.4, Rasterization of Pixel Rectangles, on page 101,
    add the following to Table 3.8 (Packed pixel formats):
    
    type Parameter                GL Data   Number of        Matching
     Token Name                    Type     Components     Pixel Formats
    --------------                -------   ----------     -------------
    UNSIGNED_SHORT_8_8_MESA       ushort         2         YCBCR_MESA
    UNSIGNED_SHORT_8_8_REV_MESA   ushort         2         YCBCR_MESA


    In section 3.6.4, Rasterization of Pixel Rectangles, on page 102,
    add the following to Table 3.10 (UNSIGNED_SHORT formats):

    UNSIGNED_SHORT_8_8_MESA:

      15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
    +-------------------------------+-------------------------------+
    |              1st              |              2nd              |
    +-------------------------------+-------------------------------+
                        
    UNSIGNED_SHORT_8_8_REV_MESA:

      15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
    +-------------------------------+-------------------------------+
    |              2nd              |              1st              |
    +-------------------------------+-------------------------------+


    In section 3.6.4, Rasterization of Pixel Rectangles, on page 104,
    add the following to Table 3.12 (Packed pixel fiedl assignments):

                       First       Second     Third      Fourth
    Format             Element     Element    Element    Element
    ------             -------     -------    -------    -------
    YCBCR_MESA         luminance   chroma


    In section 3.8.1, Texture Image Specification, on page 125, add
    another item to the list of TexImage2D and TexImage3D equivalence
    exceptions:

    * The value of internalformat and format may be YCBCR_MESA to
      indicate that the image data is in YCbCr format.  type must
      be either UNSIGNED_SHORT_8_8_MESA or UNSIGNED_SHORT_8_8_REV_MESA
      as seen in tables 3.8 and 3.10.  Table 3.12 describes the mapping
      between Y and Cb/Cr to the components.
      If NV_texture_rectangle is supported target may also be
      TEXTURE_RECTANGLE_NV or PROXY_TEXTURE_RECTANGLE_NV.
      All pixel transfer operations are bypassed.  The texture is stored as
      YCbCr, not RGB.  Queries of the texture's red, green and blue component
      sizes will return zero.  The YCbCr colors are converted to RGB during
      texture sampling using an implementation dependent conversion.


    In section 3.8.1, Texture Image Specification, on page 126, add
    another item to the list of TexImage1D and TexImage2D equivalence
    exceptions:

    * The value of internalformat and format can not be YCBCR_MESA.


    In section 3.8.2, Alternate Texture Image Specification Commands, on
    page 129, insert this paragraph after the first full paragraph on the
    page:

         "If the internal storage format of the image being updated by
    TexSubImage2D is YCBCR_MESA then format must be YCBCR_MESA.
    The error INVALID_OPERATION will be generated otherwise."


Additions to Chapter 4 of the OpenGL 1.4 Specification (Per-Fragment
Operations and the Frame Buffer)

    None

Additions to Chapter 5 of the OpenGL 1.4 Specification (Special Functions)

    None

Additions to Chapter 6 of the OpenGL 1.4 Specification (State and
State Requests)

    None

Additions to Appendix A of the OpenGL 1.4 Specification (Invariance)

    None

Additions to the AGL/GLX/WGL Specifications

    None

GLX Protocol

    None

Errors

    INVALID_ENUM is generated by TexImage2D if <internalFormat> is
    MESA_YCBCR but <format> is not MESA_YCBCR.

    INVALID_ENUM is generated by TexImage2D if <format> is MESA_YCBCR but
    <internalFormat> is not MESA_YCBCR.

    INVALID_VALUE is generated by TexImage2D if <format> is MESA_YCBCR and
    <internalFormat> is MESA_YCBCR and <border> is not zero.

    INVALID_OPERATION is generated by TexSubImage2D if the internal image
    format is YCBCR_MESA and <format> is not YCBCR_MESA.

    INVALID_OPERATION is generated by CopyTexSubImage2D if the internal
    image is YCBCR_MESA.
    
New State

    Edit table 6.16 on page 231: change the type of TEXTURE_INTERNAL_FORMAT
    from n x Z42 to n x Z43 to indicate that internal format may also be
    YCBCR_MESA.

Revision History

    20 September 2002 - Initial draft
    29 April 2003 - minor updates
     3 September 2003 - further clarify when YCbCr->RGB conversion takes place
    19 September 2003 - a few more updates prior to submitting to extension
                        registry.
     3 April 2004 - fix assorted inaccuracies
