Name

    APPLE_rgb_422

Name Strings

    GL_APPLE_rgb_422

Contact

    Ken Dyke, Apple (kdyke 'at' apple.com)

Status

    Shipping as of August 28, 2009 (Mac OS X v10.6)

Version

    Last Modified Date: June 26, 2013
    Version:            1.5

Number

    OpenGL Extension #373
    OpenGL ES Extension #76

Dependencies

    OpenGL 2.0 or ARB_fragment_program is required when the GL is OpenGL.
    OpenGL ES 2.0 is required when the GL is OpenGL ES.
    Written against OpenGL 2.0.
    There are interactions with OpenGL ES 2.0 and 3.0.

Overview

    A common storage format for video data is 8-bit 422, with every four
    bytes encoding two pixels.   Within the four bytes there are two
    luminance samples, and two chrominance samples that are shared between
    both pixels.

    There is a previous extension, namely GL_APPLE_ycbcr_422 that provided
    transparent support for this kind of data.   However, that extension
    left the exact conversion from Y'CbCr to RGB undefined.  In reality,
    it really had always been based on the ITU-R BT.601 standard, which 
    meant it was not particularly useful for dealing with high definition
    video data, which is encoded using the Rec. 709 standard.

    In some cases the original extension was implemented via fixed function
    hardware, but on more modern graphics processors this is done via
    a combination of 422 sampling formats and fragment shader instructions.

    This extension essentially exposes a "raw" 422 texture format that 
    allows developers to access the raw pre-converted Y'CbCr components
    so that they have full control over the colorspace conversion.

    In order to avoid defining entirely new color channels within GL,
    the Y, Cb and Cr color channels within the 422 data are mapped into
    the existing green, blue and red color channels, respectively.  Developers
    must write their own fragment shader/program to perform the desired
    color space transformation.

    Note: Because of the use of the packed UNSIGNED_SHORT_8_8[_REV] types, the
    correct type to use based on the layout of the data in memory (Cb Y Cr Y 
    versus Y Cb Y Cr) will necessarily be sensitive to host endianness.

    This extension differs from the EXT_422_pixels extension in a couple of
    ways.   First, this extension defines only a single new format, while
    relying on two new type arguments to differentiate between the two
    component orderings.  Second, this extension provides no defined method
    of filtering the chroma values between adjacent pixels.   And lastly,
    the color channel assignments are slightly different, essentially to
    match more closely the rough meanings of the Y, Cb and Cr values in 
    422 video data.

New Procedures and Functions

    None

New Tokens

    Accepted by the <format> parameter of DrawPixels, ReadPixels, TexImage1D,
    TexImage2D, GetTexImage, TexImage3D, TexSubImage1D, TexSubImage2D,
    TexSubImage3D, GetHistogram, GetMinmax, ConvolutionFilter1D,
    ConvolutionFilter2D, GetConvolutionFilter, SeparableFilter2D, 
    GetSeparableFilter, ColorTable, and GetColorTable:
    
      RGB_422_APPLE                 0x8A1F
      
	Accepted by the <internalformat> parameter of TexImage2D, TexImage3D,
	CopyTexImage2D, TexStorage2D, and TexStorage3D:
	
      RGB_RAW_422_APPLE             0x8A51      

    Accepted by the <type> parameter of DrawPixels, ReadPixels, TexImage1D,
    TexImage2D, GetTexImage, TexImage3D, TexSubImage1D, TexSubImage2D,
    TexSubImage3D, GetHistogram, GetMinmax, ConvolutionFilter1D,
    ConvolutionFilter2D, GetConvolutionFilter, SeparableFilter2D, 
    GetSeparableFilter, ColorTable, and GetColorTable:
    
      UNSIGNED_SHORT_8_8_APPLE        0x85BA
      UNSIGNED_SHORT_8_8_REV_APPLE    0x85BB

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

    Two entries are added to Table 3.5 (DrawPixels and ReadPixels type 
    parameter values and the corresponding OpenGL data types):

    type Parameter                Corresponding         Special
      Token Name                  GL Data Type       Interpretation
    --------------                -------------      --------------
    UNSIGNED_SHORT_8_8_APPLE         ushort               Yes
    UNSIGNED_SHORT_8_8_REV_APPLE     ushort               Yes


    One entry is added to Table 3.6 (DrawPixels and ReadPixels formats):

    Format Name       Element Meaning and Order         Target Buffer
    -----------       -------------------------         ------------
    RGB_422_APPLE     G,B     even column pixels        Color
                      G,R     odd column pixels


    Two entries are added to Table 3.8 (Packed pixel formats):
    
    type Parameter                 GL Data    Number of        Matching
      Token Name                    Type      Components     Pixel Formats
    --------------                 -------    ----------     -------------
    UNSIGNED_SHORT_8_8_APPLE       ushort         2          RGB_422_APPLE
    UNSIGNED_SHORT_8_8_REV_APPLE   ushort         2          RGB_422_APPLE


    Two entries are added to Table 3.10 (UNSIGNED SHORT formats):
    
    UNSIGNED_SHORT_8_8_APPLE:

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

    UNSIGNED_SHORT_8_8_REV_APPLE:

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


    One entry is added to Table 3.12 (Packed pixel field assignments):

                       First      Second      Third      Fourth
    Format             Element    Element     Element    Element
    ------             -------    -------     -------    -------
    RGB_422_APPLE      green      blue/red
    
    Add the following second paragraph to the end of the section entitled
    "Conversion to RGB":
    
    If the format is RGB_422_APPLE, pixels are unpacked in pairs.  For
    even column pixels, the green and blue components are unpacked from the
    even column pixel, and the red component is taken from the following odd
    column pixel.   For odd column pixels, the green and red components are
    unpacked from the odd column pixel, and the blue component is unpacked
    from the previous even column pixel.  The row length must be even or
    INVALID_OPERATION is generated.
        
Additions to the GLX Specification

    None

GLX Protocol

    None

Dependencies on OpenGL ES 2.0

    If the GL is OpenGL ES, RGB_422_APPLE format textures may not be used
    in conjunction with mipmapping or repeat wrap modes.  Add to the list
    of conditions in section 3.8.2 under which (0,0,0,1) will be returned 
    from a sampler:
    
      - A two-dimensional sampler is called, the corresponding texture image 
        has format RGB_422_APPLE, and either the texture wrap mode is not 
        CLAMP_TO_EDGE, or the minification filter is neither NEAREST nor 
        LINEAR.
        
    Also, RGB_422_APPLE format textures may not be used as cube maps.  The
    following error condition is introduced:

      - INVALID_OPERATION is generated by TexImage2D, TexSubImage2D, and 
        CopyTexImage2D if <format> is RGB_422_APPLE and <target> is
        TEXTURE_CUBE_MAP_*.
    
    Changes to OpenGL 2.0's Table 3.5 above are made to OpenGL ES 2.0's Table 
    3.2 (TexImage2D and ReadPixels <type> parameter values and the 
    corresponding GL data types.)  Changes to OpenGL 2.0's Table 3.6 above are 
    made to OpenGL ES 2.0's Table 3.3 (TexImage2D and ReadPixels formats).  
    Changes to OpenGL 2.0's Table 3.8 above are made to OpenGL ES 2.0's Table 
    3.5 (Packed pixel formats).  Changes to OpenGL 2.0's Table 3.10 above are 
    made to OpenGL ES 2.0's Table 3.6 (UNSIGNED_SHORT formats).  Changes to 
    OpenGL 2.0's Table 3.13 are made to OpenGL ES 2.0's Table 3.7 (Packed 
    pixel field assignments).

    Mentions of DrawPixels, ReadPixels, TexImage1D, TexImage3D, GetTexImage, 
    TexSubImage1D, TexSubImage3D, GetHistogram, GetMinmax, ConvolutionFilter1D,
    ConvolutionFilter2D, GetConvolutionFilter, SeparableFilter2D, 
    GetSeparableFilter, ColorTable, and GetColorTable in this extension 
    specification can be ignored for OpenGL ES.
    
    Mentions of TexStorage* and RGB_RAW_422_APPLE can be ignored unless EXT_texture_storage is present.
    
Dependencies on OpenGL ES 3.0

    All of the same dependencies for OpenGL ES 2.0 also exist for OpenGL ES 3.0
    except that TexImage3D and TexSubImage3D do apply here.
    
    Changes to OpenGL 2.0's Table 3.5 above are made to OpenGL ES 3.0's Table 
    3.4 (Pixel data <type> parameter values and the corresponding GL data 
    types.)  Changes to OpenGL 2.0's Table 3.6 above are made to OpenGL ES 
    3.0's Table 3.5 (Pixel data formats).  Changes to OpenGL 2.0's Table 3.8 
    above are made to OpenGL ES 3.0's Table 3.6 (Packed pixel formats).  
    Changes to OpenGL 2.0's Table 3.10 above are made to OpenGL ES 3.0's Table 
    3.7 (UNSIGNED_SHORT formats).  Changes to OpenGL 2.0's Table 3.13 are made 
    to OpenGL ES 3.0's Table 3.10 (Packed pixel field assignments).
    
    When the GL is OpenGL ES 3.0, the following table entries are added to Table 
    3.2:
    
        Format         Type                          External Bytes per Pixel  Internal Format
        -------------  ----------------------------  ------------------------  -----------------
        RGB_422_APPLE  UNSIGNED_SHORT_8_8_APPLE      2                         RGB_RAW_422_APPLE
        RGB_422_APPLE  UNSIGNED_SHORT_8_8_REV_APPLE  2                         RGB_RAW_422_APPLE

    When the GL is OpenGL ES 3.0, RGB_422_APPLE is also added to the Texture-only 
    color formats list in the Required Texture Formats subsection of section 
    3.8.3.
    
    If the GL is not OpenGL ES 3.0 and the EXT_texture_storage extension is not
    present, omit references to RGB_RAW_422_APPLE and TexStorage*.

    Details of how this extension interacts with EXT_texture_storage when the 
    GL is a version of OpenGL earlier than 3.0 can be found in the 
    EXT_texture_storage spec.
    
Errors

    INVALID_OPERATION is generated if <format> is RGB_422_APPLE and <type> is
    not one of UNSIGNED_SHORT_8_8_APPLE or UNSIGNED_SHORT_8_8_REV_APPLE.

    INVALID_OPERATION is generated if <type> is UNSIGNED_SHORT_8_8_APPLE or 
    UNSIGNED_SHORT_8_8_REV_APPLE and <format> is not RGB_422_APPLE.
    
    INVALID_OPERATION is generated if <format> is RGB_422_APPLE and <width>
    is not even.

New State

    None

New Implementation Dependent State

    None

Revision History

    1.5  2013/06/26  lipchak  Add ES3 interactions
    1.4  2010/04/06  lipchak  Add ES interactions
    1.3  2009/09/03  kdyke    First shipping version

