18420ad94f28532a736f99607fb274466506b3bcaBrian PaulName
28420ad94f28532a736f99607fb274466506b3bcaBrian Paul
38420ad94f28532a736f99607fb274466506b3bcaBrian Paul    MESA_ycbcr_texture
48420ad94f28532a736f99607fb274466506b3bcaBrian Paul
58420ad94f28532a736f99607fb274466506b3bcaBrian PaulName Strings
68420ad94f28532a736f99607fb274466506b3bcaBrian Paul
78420ad94f28532a736f99607fb274466506b3bcaBrian Paul    GL_MESA_ycbcr_texture
88420ad94f28532a736f99607fb274466506b3bcaBrian Paul
98420ad94f28532a736f99607fb274466506b3bcaBrian PaulContact
108420ad94f28532a736f99607fb274466506b3bcaBrian Paul
11d3b09fe29b112ddf114d14849e917befafd8387aBrian Paul    Brian Paul, Tungsten Graphics, Inc. (brian.paul 'at' tungstengraphics.com)
128420ad94f28532a736f99607fb274466506b3bcaBrian Paul    Keith Whitwell, Tungsten Graphics, Inc.  (keith 'at' tungstengraphics.com)
138420ad94f28532a736f99607fb274466506b3bcaBrian Paul
148420ad94f28532a736f99607fb274466506b3bcaBrian PaulStatus
158420ad94f28532a736f99607fb274466506b3bcaBrian Paul
168420ad94f28532a736f99607fb274466506b3bcaBrian Paul    Shipping (Mesa 4.0.4 and later)
178420ad94f28532a736f99607fb274466506b3bcaBrian Paul
188420ad94f28532a736f99607fb274466506b3bcaBrian PaulVersion
198420ad94f28532a736f99607fb274466506b3bcaBrian Paul
208420ad94f28532a736f99607fb274466506b3bcaBrian Paul    1.0
218420ad94f28532a736f99607fb274466506b3bcaBrian Paul
228420ad94f28532a736f99607fb274466506b3bcaBrian PaulNumber
238420ad94f28532a736f99607fb274466506b3bcaBrian Paul
248420ad94f28532a736f99607fb274466506b3bcaBrian Paul    TBD
258420ad94f28532a736f99607fb274466506b3bcaBrian Paul
268420ad94f28532a736f99607fb274466506b3bcaBrian PaulDependencies
278420ad94f28532a736f99607fb274466506b3bcaBrian Paul
288420ad94f28532a736f99607fb274466506b3bcaBrian Paul    OpenGL 1.0 or later is required
29ae5776c41f12515bb73c07ee2a0aed56cdd1a1efNicolas Kaiser    This extension is written against the OpenGL 1.4 Specification.
308420ad94f28532a736f99607fb274466506b3bcaBrian Paul    NV_texture_rectangle effects the definition of this extension.
318420ad94f28532a736f99607fb274466506b3bcaBrian Paul
328420ad94f28532a736f99607fb274466506b3bcaBrian PaulOverview
338420ad94f28532a736f99607fb274466506b3bcaBrian Paul
34afc0428b5c5380fa5beaaa28c78faddd41da5284Brian Paul    This extension supports texture images stored in the YCbCr format.
35afc0428b5c5380fa5beaaa28c78faddd41da5284Brian Paul    There is no support for converting YCbCr images to RGB or vice versa
36afc0428b5c5380fa5beaaa28c78faddd41da5284Brian Paul    during pixel transfer.  The texture's YCbCr colors are converted to
37afc0428b5c5380fa5beaaa28c78faddd41da5284Brian Paul    RGB during texture sampling, after-which, all the usual per-fragment
38afc0428b5c5380fa5beaaa28c78faddd41da5284Brian Paul    operations take place.  Only 2D texture images are supported (not
39afc0428b5c5380fa5beaaa28c78faddd41da5284Brian Paul    glDrawPixels, glReadPixels, etc).
408420ad94f28532a736f99607fb274466506b3bcaBrian Paul
418420ad94f28532a736f99607fb274466506b3bcaBrian Paul    A YCbCr pixel (texel) is a 16-bit unsigned short with two components.
428420ad94f28532a736f99607fb274466506b3bcaBrian Paul    The first component is luminance (Y).  For pixels in even-numbered
438420ad94f28532a736f99607fb274466506b3bcaBrian Paul    image columns, the second component is Cb.  For pixels in odd-numbered
448420ad94f28532a736f99607fb274466506b3bcaBrian Paul    image columns, the second component is Cr.  If one were to convert the
458420ad94f28532a736f99607fb274466506b3bcaBrian Paul    data to RGB one would need to examine two pixels from columns N and N+1
468420ad94f28532a736f99607fb274466506b3bcaBrian Paul    (where N is even) to deduce the RGB color.
478420ad94f28532a736f99607fb274466506b3bcaBrian Paul
488420ad94f28532a736f99607fb274466506b3bcaBrian PaulIP Status
498420ad94f28532a736f99607fb274466506b3bcaBrian Paul
508420ad94f28532a736f99607fb274466506b3bcaBrian Paul    None
518420ad94f28532a736f99607fb274466506b3bcaBrian Paul
528420ad94f28532a736f99607fb274466506b3bcaBrian PaulIssues
538420ad94f28532a736f99607fb274466506b3bcaBrian Paul
548420ad94f28532a736f99607fb274466506b3bcaBrian Paul    None
558420ad94f28532a736f99607fb274466506b3bcaBrian Paul
568420ad94f28532a736f99607fb274466506b3bcaBrian PaulNew Procedures and Functions
578420ad94f28532a736f99607fb274466506b3bcaBrian Paul
588420ad94f28532a736f99607fb274466506b3bcaBrian Paul    None
598420ad94f28532a736f99607fb274466506b3bcaBrian Paul
608420ad94f28532a736f99607fb274466506b3bcaBrian PaulNew Tokens
618420ad94f28532a736f99607fb274466506b3bcaBrian Paul
628420ad94f28532a736f99607fb274466506b3bcaBrian Paul    Accepted by the <internalFormat> and <format> parameters of
638420ad94f28532a736f99607fb274466506b3bcaBrian Paul    TexImage2D and TexSubImage2D:
648420ad94f28532a736f99607fb274466506b3bcaBrian Paul
657357f20b1ee3ab0c58c7a20f44bf83fdfe0e256eBrian Paul        YCBCR_MESA                   0x8757
668420ad94f28532a736f99607fb274466506b3bcaBrian Paul
678420ad94f28532a736f99607fb274466506b3bcaBrian Paul    Accepted by the <type> parameter of TexImage2D and TexSubImage2D:
688420ad94f28532a736f99607fb274466506b3bcaBrian Paul
697357f20b1ee3ab0c58c7a20f44bf83fdfe0e256eBrian Paul        UNSIGNED_SHORT_8_8_MESA      0x85BA /* same as Apple's */
707357f20b1ee3ab0c58c7a20f44bf83fdfe0e256eBrian Paul        UNSIGNED_SHORT_8_8_REV_MESA  0x85BB /* same as Apple's */
718420ad94f28532a736f99607fb274466506b3bcaBrian Paul
728420ad94f28532a736f99607fb274466506b3bcaBrian PaulAdditions to Chapter 2 of the OpenGL 1.4 Specification (OpenGL Operation)
738420ad94f28532a736f99607fb274466506b3bcaBrian Paul
748420ad94f28532a736f99607fb274466506b3bcaBrian Paul    None
758420ad94f28532a736f99607fb274466506b3bcaBrian Paul
768420ad94f28532a736f99607fb274466506b3bcaBrian PaulAdditions to Chapter 3 of the OpenGL 1.4 Specification (Rasterization)
778420ad94f28532a736f99607fb274466506b3bcaBrian Paul
7829f0190be772bc46ba2ddb4032e112f49d384cf5Brian Paul    In section 3.6.4, Rasterization of Pixel Rectangles, on page 101,
798420ad94f28532a736f99607fb274466506b3bcaBrian Paul    add the following to Table 3.8 (Packed pixel formats):
808420ad94f28532a736f99607fb274466506b3bcaBrian Paul    
818420ad94f28532a736f99607fb274466506b3bcaBrian Paul    type Parameter                GL Data   Number of        Matching
828420ad94f28532a736f99607fb274466506b3bcaBrian Paul     Token Name                    Type     Components     Pixel Formats
838420ad94f28532a736f99607fb274466506b3bcaBrian Paul    --------------                -------   ----------     -------------
8429f0190be772bc46ba2ddb4032e112f49d384cf5Brian Paul    UNSIGNED_SHORT_8_8_MESA       ushort         2         YCBCR_MESA
8529f0190be772bc46ba2ddb4032e112f49d384cf5Brian Paul    UNSIGNED_SHORT_8_8_REV_MESA   ushort         2         YCBCR_MESA
868420ad94f28532a736f99607fb274466506b3bcaBrian Paul
878420ad94f28532a736f99607fb274466506b3bcaBrian Paul
888420ad94f28532a736f99607fb274466506b3bcaBrian Paul    In section 3.6.4, Rasterization of Pixel Rectangles, on page 102,
898420ad94f28532a736f99607fb274466506b3bcaBrian Paul    add the following to Table 3.10 (UNSIGNED_SHORT formats):
908420ad94f28532a736f99607fb274466506b3bcaBrian Paul
918420ad94f28532a736f99607fb274466506b3bcaBrian Paul    UNSIGNED_SHORT_8_8_MESA:
928420ad94f28532a736f99607fb274466506b3bcaBrian Paul
938420ad94f28532a736f99607fb274466506b3bcaBrian Paul      15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
948420ad94f28532a736f99607fb274466506b3bcaBrian Paul    +-------------------------------+-------------------------------+
958420ad94f28532a736f99607fb274466506b3bcaBrian Paul    |              1st              |              2nd              |
968420ad94f28532a736f99607fb274466506b3bcaBrian Paul    +-------------------------------+-------------------------------+
978420ad94f28532a736f99607fb274466506b3bcaBrian Paul                        
988420ad94f28532a736f99607fb274466506b3bcaBrian Paul    UNSIGNED_SHORT_8_8_REV_MESA:
998420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1008420ad94f28532a736f99607fb274466506b3bcaBrian Paul      15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
1018420ad94f28532a736f99607fb274466506b3bcaBrian Paul    +-------------------------------+-------------------------------+
1028420ad94f28532a736f99607fb274466506b3bcaBrian Paul    |              2nd              |              1st              |
1038420ad94f28532a736f99607fb274466506b3bcaBrian Paul    +-------------------------------+-------------------------------+
1048420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1058420ad94f28532a736f99607fb274466506b3bcaBrian Paul
10629f0190be772bc46ba2ddb4032e112f49d384cf5Brian Paul    In section 3.6.4, Rasterization of Pixel Rectangles, on page 104,
107ae5776c41f12515bb73c07ee2a0aed56cdd1a1efNicolas Kaiser    add the following to Table 3.12 (Packed pixel field assignments):
1088420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1098420ad94f28532a736f99607fb274466506b3bcaBrian Paul                       First       Second     Third      Fourth
1108420ad94f28532a736f99607fb274466506b3bcaBrian Paul    Format             Element     Element    Element    Element
1118420ad94f28532a736f99607fb274466506b3bcaBrian Paul    ------             -------     -------    -------    -------
11229f0190be772bc46ba2ddb4032e112f49d384cf5Brian Paul    YCBCR_MESA         luminance   chroma
1138420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1148420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1158420ad94f28532a736f99607fb274466506b3bcaBrian Paul    In section 3.8.1, Texture Image Specification, on page 125, add
1168420ad94f28532a736f99607fb274466506b3bcaBrian Paul    another item to the list of TexImage2D and TexImage3D equivalence
1178420ad94f28532a736f99607fb274466506b3bcaBrian Paul    exceptions:
1188420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1198420ad94f28532a736f99607fb274466506b3bcaBrian Paul    * The value of internalformat and format may be YCBCR_MESA to
1208420ad94f28532a736f99607fb274466506b3bcaBrian Paul      indicate that the image data is in YCbCr format.  type must
1218420ad94f28532a736f99607fb274466506b3bcaBrian Paul      be either UNSIGNED_SHORT_8_8_MESA or UNSIGNED_SHORT_8_8_REV_MESA
1228420ad94f28532a736f99607fb274466506b3bcaBrian Paul      as seen in tables 3.8 and 3.10.  Table 3.12 describes the mapping
1238420ad94f28532a736f99607fb274466506b3bcaBrian Paul      between Y and Cb/Cr to the components.
1248420ad94f28532a736f99607fb274466506b3bcaBrian Paul      If NV_texture_rectangle is supported target may also be
1258420ad94f28532a736f99607fb274466506b3bcaBrian Paul      TEXTURE_RECTANGLE_NV or PROXY_TEXTURE_RECTANGLE_NV.
1268420ad94f28532a736f99607fb274466506b3bcaBrian Paul      All pixel transfer operations are bypassed.  The texture is stored as
1278420ad94f28532a736f99607fb274466506b3bcaBrian Paul      YCbCr, not RGB.  Queries of the texture's red, green and blue component
128361a9ac9663205b10ae78022ed777dfeda2a8ea4Brian Paul      sizes will return zero.  The YCbCr colors are converted to RGB during
129361a9ac9663205b10ae78022ed777dfeda2a8ea4Brian Paul      texture sampling using an implementation dependent conversion.
1308420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1318420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1328420ad94f28532a736f99607fb274466506b3bcaBrian Paul    In section 3.8.1, Texture Image Specification, on page 126, add
1338420ad94f28532a736f99607fb274466506b3bcaBrian Paul    another item to the list of TexImage1D and TexImage2D equivalence
1348420ad94f28532a736f99607fb274466506b3bcaBrian Paul    exceptions:
1358420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1368420ad94f28532a736f99607fb274466506b3bcaBrian Paul    * The value of internalformat and format can not be YCBCR_MESA.
1378420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1388420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1398420ad94f28532a736f99607fb274466506b3bcaBrian Paul    In section 3.8.2, Alternate Texture Image Specification Commands, on
1408420ad94f28532a736f99607fb274466506b3bcaBrian Paul    page 129, insert this paragraph after the first full paragraph on the
1418420ad94f28532a736f99607fb274466506b3bcaBrian Paul    page:
1428420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1438420ad94f28532a736f99607fb274466506b3bcaBrian Paul         "If the internal storage format of the image being updated by
1448420ad94f28532a736f99607fb274466506b3bcaBrian Paul    TexSubImage2D is YCBCR_MESA then format must be YCBCR_MESA.
1458420ad94f28532a736f99607fb274466506b3bcaBrian Paul    The error INVALID_OPERATION will be generated otherwise."
1468420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1478420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1488420ad94f28532a736f99607fb274466506b3bcaBrian PaulAdditions to Chapter 4 of the OpenGL 1.4 Specification (Per-Fragment
1498420ad94f28532a736f99607fb274466506b3bcaBrian PaulOperations and the Frame Buffer)
1508420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1518420ad94f28532a736f99607fb274466506b3bcaBrian Paul    None
1528420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1538420ad94f28532a736f99607fb274466506b3bcaBrian PaulAdditions to Chapter 5 of the OpenGL 1.4 Specification (Special Functions)
1548420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1558420ad94f28532a736f99607fb274466506b3bcaBrian Paul    None
1568420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1578420ad94f28532a736f99607fb274466506b3bcaBrian PaulAdditions to Chapter 6 of the OpenGL 1.4 Specification (State and
1588420ad94f28532a736f99607fb274466506b3bcaBrian PaulState Requests)
1598420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1608420ad94f28532a736f99607fb274466506b3bcaBrian Paul    None
1618420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1628420ad94f28532a736f99607fb274466506b3bcaBrian PaulAdditions to Appendix A of the OpenGL 1.4 Specification (Invariance)
1638420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1648420ad94f28532a736f99607fb274466506b3bcaBrian Paul    None
1658420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1668420ad94f28532a736f99607fb274466506b3bcaBrian PaulAdditions to the AGL/GLX/WGL Specifications
1678420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1688420ad94f28532a736f99607fb274466506b3bcaBrian Paul    None
1698420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1708420ad94f28532a736f99607fb274466506b3bcaBrian PaulGLX Protocol
1718420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1728420ad94f28532a736f99607fb274466506b3bcaBrian Paul    None
1738420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1748420ad94f28532a736f99607fb274466506b3bcaBrian PaulErrors
1758420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1768420ad94f28532a736f99607fb274466506b3bcaBrian Paul    INVALID_ENUM is generated by TexImage2D if <internalFormat> is
1778420ad94f28532a736f99607fb274466506b3bcaBrian Paul    MESA_YCBCR but <format> is not MESA_YCBCR.
1788420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1798420ad94f28532a736f99607fb274466506b3bcaBrian Paul    INVALID_ENUM is generated by TexImage2D if <format> is MESA_YCBCR but
1808420ad94f28532a736f99607fb274466506b3bcaBrian Paul    <internalFormat> is not MESA_YCBCR.
1818420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1828420ad94f28532a736f99607fb274466506b3bcaBrian Paul    INVALID_VALUE is generated by TexImage2D if <format> is MESA_YCBCR and
1838420ad94f28532a736f99607fb274466506b3bcaBrian Paul    <internalFormat> is MESA_YCBCR and <border> is not zero.
1848420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1858420ad94f28532a736f99607fb274466506b3bcaBrian Paul    INVALID_OPERATION is generated by TexSubImage2D if the internal image
1867357f20b1ee3ab0c58c7a20f44bf83fdfe0e256eBrian Paul    format is YCBCR_MESA and <format> is not YCBCR_MESA.
1878420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1888420ad94f28532a736f99607fb274466506b3bcaBrian Paul    INVALID_OPERATION is generated by CopyTexSubImage2D if the internal
1898420ad94f28532a736f99607fb274466506b3bcaBrian Paul    image is YCBCR_MESA.
1908420ad94f28532a736f99607fb274466506b3bcaBrian Paul    
1918420ad94f28532a736f99607fb274466506b3bcaBrian PaulNew State
1928420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1938420ad94f28532a736f99607fb274466506b3bcaBrian Paul    Edit table 6.16 on page 231: change the type of TEXTURE_INTERNAL_FORMAT
1948420ad94f28532a736f99607fb274466506b3bcaBrian Paul    from n x Z42 to n x Z43 to indicate that internal format may also be
1958420ad94f28532a736f99607fb274466506b3bcaBrian Paul    YCBCR_MESA.
1968420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1978420ad94f28532a736f99607fb274466506b3bcaBrian PaulRevision History
1988420ad94f28532a736f99607fb274466506b3bcaBrian Paul
1998420ad94f28532a736f99607fb274466506b3bcaBrian Paul    20 September 2002 - Initial draft
2007357f20b1ee3ab0c58c7a20f44bf83fdfe0e256eBrian Paul    29 April 2003 - minor updates
201afc0428b5c5380fa5beaaa28c78faddd41da5284Brian Paul     3 September 2003 - further clarify when YCbCr->RGB conversion takes place
202361a9ac9663205b10ae78022ed777dfeda2a8ea4Brian Paul    19 September 2003 - a few more updates prior to submitting to extension
203361a9ac9663205b10ae78022ed777dfeda2a8ea4Brian Paul                        registry.
204fbb60ede3d5005328cedc9c2fa587e14e6309ed6Brian Paul     3 April 2004 - fix assorted inaccuracies
205