15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    EXT_texture_compression_s3tc
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_EXT_texture_compression_s3tc
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContributors
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Pat Brown, NVIDIA Corporation (pbrown 'at' nvidia.com)
125bd8deadSopenharmony_ci    Ian Stewart, NVIDIA Corporation (istewart 'at' nvidia.com)
135bd8deadSopenharmony_ci    Nicholas Haemel, NVIDIA Corporation
145bd8deadSopenharmony_ci    Acorn Pooley, NVIDIA Corporation
155bd8deadSopenharmony_ci    Antti Rasmus, NVIDIA Corporation
165bd8deadSopenharmony_ci    Musawir Shah, NVIDIA Corporation
175bd8deadSopenharmony_ci
185bd8deadSopenharmony_ciContact
195bd8deadSopenharmony_ci
205bd8deadSopenharmony_ci    Pat Brown, NVIDIA Corporation (pbrown 'at' nvidia.com)
215bd8deadSopenharmony_ci    Slawomir Grajewski, INTEL (slawomir.grajewski 'at' intel.com)
225bd8deadSopenharmony_ci
235bd8deadSopenharmony_ciStatus
245bd8deadSopenharmony_ci
255bd8deadSopenharmony_ci    FINAL
265bd8deadSopenharmony_ci
275bd8deadSopenharmony_ciVersion
285bd8deadSopenharmony_ci
295bd8deadSopenharmony_ci    1.6, 15 July 2013
305bd8deadSopenharmony_ci
315bd8deadSopenharmony_ciNumber
325bd8deadSopenharmony_ci
335bd8deadSopenharmony_ci    OpenGL Extension #198
345bd8deadSopenharmony_ci    OpenGL ES Extension #154
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ciDependencies
375bd8deadSopenharmony_ci
385bd8deadSopenharmony_ci    OpenGL dependencies:
395bd8deadSopenharmony_ci
405bd8deadSopenharmony_ci        OpenGL 1.1 is required.
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ci        GL_ARB_texture_compression is required.
435bd8deadSopenharmony_ci
445bd8deadSopenharmony_ci        This extension is written against the OpenGL 1.2.1 Specification. 
455bd8deadSopenharmony_ci
465bd8deadSopenharmony_ci        This extension interacts with OpenGL 2.0 and
475bd8deadSopenharmony_ci        ARB_texture_non_power_of_two.
485bd8deadSopenharmony_ci
495bd8deadSopenharmony_ci    OpenGL ES dependencies:
505bd8deadSopenharmony_ci
515bd8deadSopenharmony_ci        This extension is written against the OpenGL ES 2.0.25 Specification
525bd8deadSopenharmony_ci        and OpenGL ES 3.0.2 Specification.
535bd8deadSopenharmony_ci
545bd8deadSopenharmony_ci        This extension applied to OpenGL ES 2.0.25 Specification interacts with
555bd8deadSopenharmony_ci        NV_texture_array.
565bd8deadSopenharmony_ci
575bd8deadSopenharmony_ciOverview
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ci    This extension provides additional texture compression functionality
605bd8deadSopenharmony_ci    specific to S3's S3TC format (called DXTC in Microsoft's DirectX API),
615bd8deadSopenharmony_ci    subject to all the requirements and limitations described by the extension
625bd8deadSopenharmony_ci    GL_ARB_texture_compression.
635bd8deadSopenharmony_ci
645bd8deadSopenharmony_ci    This extension supports DXT1, DXT3, and DXT5 texture compression formats.
655bd8deadSopenharmony_ci    For the DXT1 image format, this specification supports an RGB-only mode
665bd8deadSopenharmony_ci    and a special RGBA mode with single-bit "transparent" alpha.
675bd8deadSopenharmony_ci
685bd8deadSopenharmony_ciIP Status
695bd8deadSopenharmony_ci
705bd8deadSopenharmony_ci    Contact S3 Incorporated (http://www.s3.com) regarding any intellectual
715bd8deadSopenharmony_ci    property issues associated with implementing this extension.
725bd8deadSopenharmony_ci
735bd8deadSopenharmony_ci    WARNING:  Vendors able to support S3TC texture compression in Direct3D
745bd8deadSopenharmony_ci    drivers do not necessarily have the right to use the same functionality in
755bd8deadSopenharmony_ci    OpenGL.
765bd8deadSopenharmony_ci
775bd8deadSopenharmony_ciIssues
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ci    (1) Should DXT2 and DXT4 (premultiplied alpha) formats be supported?
805bd8deadSopenharmony_ci
815bd8deadSopenharmony_ci        RESOLVED:  No -- insufficient interest.  Supporting DXT2 and DXT4
825bd8deadSopenharmony_ci        would require some rework to the TexEnv definition (maybe add a new
835bd8deadSopenharmony_ci        base internal format RGBA_PREMULTIPLIED_ALPHA) for these formats.
845bd8deadSopenharmony_ci        Note that the EXT_texture_env_combine extension (which extends normal
855bd8deadSopenharmony_ci        TexEnv modes) can be used to support textures with premultipled alpha.
865bd8deadSopenharmony_ci
875bd8deadSopenharmony_ci    (2) Should generic "RGB_S3TC_EXT" and "RGBA_S3TC_EXT" enums be supported
885bd8deadSopenharmony_ci        or should we use only the DXT<n> enums?  
895bd8deadSopenharmony_ci
905bd8deadSopenharmony_ci        RESOLVED:  No.  A generic RGBA_S3TC_EXT is problematic because DXT3
915bd8deadSopenharmony_ci        and DXT5 are both nominally RGBA (and DXT1 with the 1-bit alpha is
925bd8deadSopenharmony_ci        also) yet one format must be chosen up front.
935bd8deadSopenharmony_ci
945bd8deadSopenharmony_ci    (3) Should TexSubImage support all block-aligned edits or just the minimal
955bd8deadSopenharmony_ci        functionality required by the ARB_texture_compression extension?
965bd8deadSopenharmony_ci
975bd8deadSopenharmony_ci        RESOLVED:  Allow all valid block-aligned edits.
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ci    (4) A pre-compressed image with a DXT1 format can be used as either an
1005bd8deadSopenharmony_ci        RGB_S3TC_DXT1 or an RGBA_S3TC_DXT1 image.  If the image has
1015bd8deadSopenharmony_ci        transparent texels, how are they treated in each format?
1025bd8deadSopenharmony_ci
1035bd8deadSopenharmony_ci        RESOLVED:  The renderer has to make sure that an RGB_S3TC_DXT1 format
1045bd8deadSopenharmony_ci        is decoded as RGB (where alpha is effectively one for all texels),
1055bd8deadSopenharmony_ci        while RGBA_S3TC_DXT1 is decoded as RGBA (where alpha is zero for all
1065bd8deadSopenharmony_ci        texels with "transparent" encodings).  Otherwise, the formats are
1075bd8deadSopenharmony_ci        identical.
1085bd8deadSopenharmony_ci
1095bd8deadSopenharmony_ci    (5) Is the encoding of the RGB components for DXT1 formats correct in this
1105bd8deadSopenharmony_ci        spec?  MSDN documentation does not specify an RGB color for the
1115bd8deadSopenharmony_ci        "transparent" encoding.  Is it really black?
1125bd8deadSopenharmony_ci
1135bd8deadSopenharmony_ci        RESOLVED:  Yes.  The specification for the DXT1 format initially
1145bd8deadSopenharmony_ci        required black, but later changed that requirement to a
1155bd8deadSopenharmony_ci        recommendation.  All vendors involved in the definition of this
1165bd8deadSopenharmony_ci        specification support black.  In addition, specifying black has a
1175bd8deadSopenharmony_ci        useful behavior.
1185bd8deadSopenharmony_ci
1195bd8deadSopenharmony_ci        When blending multiple texels (GL_LINEAR filtering), mixing opaque and
1205bd8deadSopenharmony_ci        transparent samples is problematic.  Defining a black color on
1215bd8deadSopenharmony_ci        transparent texels achieves a sensible result that works like a
1225bd8deadSopenharmony_ci        texture with premultiplied alpha.  For example, if three opaque white
1235bd8deadSopenharmony_ci        and one transparent sample is being averaged, the result would be a
1245bd8deadSopenharmony_ci        75% intensity gray (with an alpha of 75%).  This is the same result on
1255bd8deadSopenharmony_ci        the color channels as would be obtained using a white color, 75%
1265bd8deadSopenharmony_ci        alpha, and a SRC_ALPHA blend factor.
1275bd8deadSopenharmony_ci
1285bd8deadSopenharmony_ci    (6) Is the encoding of the RGB components for DXT3 and DXT5 formats
1295bd8deadSopenharmony_ci        correct in this spec?  MSDN documentation suggests that the RGB blocks
1305bd8deadSopenharmony_ci        for DXT3 and DXT5 are decoded as described by the DXT1 format.
1315bd8deadSopenharmony_ci
1325bd8deadSopenharmony_ci        RESOLVED:  Yes -- this appears to be a bug in the MSDN documentation.
1335bd8deadSopenharmony_ci        The specification for the DXT2-DXT5 formats require decoding using the
1345bd8deadSopenharmony_ci        opaque block encoding, regardless of the relative values of "color0"
1355bd8deadSopenharmony_ci        and "color1".
1365bd8deadSopenharmony_ci
1375bd8deadSopenharmony_ciNew Procedures and Functions
1385bd8deadSopenharmony_ci
1395bd8deadSopenharmony_ci    None.
1405bd8deadSopenharmony_ci
1415bd8deadSopenharmony_ciNew Tokens
1425bd8deadSopenharmony_ci
1435bd8deadSopenharmony_ci    This extension introduces new tokens:
1445bd8deadSopenharmony_ci
1455bd8deadSopenharmony_ci        COMPRESSED_RGB_S3TC_DXT1_EXT                   0x83F0
1465bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT1_EXT                  0x83F1
1475bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT3_EXT                  0x83F2
1485bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT5_EXT                  0x83F3
1495bd8deadSopenharmony_ci
1505bd8deadSopenharmony_ci    In OpenGL 1.2.1 these tokens are accepted by the <internalformat> parameter
1515bd8deadSopenharmony_ci    of TexImage2D, CopyTexImage2D, and CompressedTexImage2D and the <format>
1525bd8deadSopenharmony_ci    parameter of CompressedTexSubImage2D.
1535bd8deadSopenharmony_ci
1545bd8deadSopenharmony_ci    In extended OpenGL ES 2.0.25 these new tokens are accepted by the
1555bd8deadSopenharmony_ci    <internalformat> parameter of TexImage2D, CompressedTexImage2D and the <format>
1565bd8deadSopenharmony_ci    parameter of CompressedTexSubImage2D.
1575bd8deadSopenharmony_ci 
1585bd8deadSopenharmony_ci    In extended OpenGL ES 3.0.2 these new tokens are also accepted by the
1595bd8deadSopenharmony_ci    <internalformat> parameter of TexImage3D, CompressedTexImage3D,
1605bd8deadSopenharmony_ci    TexStorage2D, TexStorage3D and the <format> parameter of
1615bd8deadSopenharmony_ci    CompressedTexSubImage3D.
1625bd8deadSopenharmony_ci
1635bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 1.2.1 Specification (OpenGL Operation)
1645bd8deadSopenharmony_ci
1655bd8deadSopenharmony_ci    None.
1665bd8deadSopenharmony_ci
1675bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization)
1685bd8deadSopenharmony_ci
1695bd8deadSopenharmony_ci    Add to Table 3.16.1:  Specific Compressed Internal Formats
1705bd8deadSopenharmony_ci
1715bd8deadSopenharmony_ci        Compressed Internal Format         Base Internal Format
1725bd8deadSopenharmony_ci        ==========================         ====================
1735bd8deadSopenharmony_ci        COMPRESSED_RGB_S3TC_DXT1_EXT       RGB
1745bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT1_EXT      RGBA
1755bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT3_EXT      RGBA
1765bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT5_EXT      RGBA
1775bd8deadSopenharmony_ci
1785bd8deadSopenharmony_ci    
1795bd8deadSopenharmony_ci    Modify Section 3.8.2, Alternate Image Specification
1805bd8deadSopenharmony_ci
1815bd8deadSopenharmony_ci    (add to end of TexSubImage discussion, p.123 -- after edit from the
1825bd8deadSopenharmony_ci    ARB_texture_compression spec)
1835bd8deadSopenharmony_ci
1845bd8deadSopenharmony_ci    If the internal format of the texture image being modified is
1855bd8deadSopenharmony_ci    COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT,
1865bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT3_EXT, or COMPRESSED_RGBA_S3TC_DXT5_EXT, the
1875bd8deadSopenharmony_ci    texture is stored using one of the several S3TC compressed texture image
1885bd8deadSopenharmony_ci    formats.  Such images are easily edited along 4x4 texel boundaries, so the
1895bd8deadSopenharmony_ci    limitations on TexSubImage2D or CopyTexSubImage2D parameters are relaxed.
1905bd8deadSopenharmony_ci    TexSubImage2D and CopyTexSubImage2D will result in an INVALID_OPERATION
1915bd8deadSopenharmony_ci    error only if one of the following conditions occurs:
1925bd8deadSopenharmony_ci
1935bd8deadSopenharmony_ci        * <width> is not a multiple of four, <width> plus <xoffset> is not
1945bd8deadSopenharmony_ci          equal to TEXTURE_WIDTH, and either <xoffset> or <yoffset> is
1955bd8deadSopenharmony_ci          non-zero;
1965bd8deadSopenharmony_ci
1975bd8deadSopenharmony_ci        * <height> is not a multiple of four, <height> plus <yoffset> is not
1985bd8deadSopenharmony_ci          equal to TEXTURE_HEIGHT, and either <xoffset> or <yoffset> is
1995bd8deadSopenharmony_ci          non-zero; or
2005bd8deadSopenharmony_ci
2015bd8deadSopenharmony_ci        * <xoffset> or <yoffset> is not a multiple of four.
2025bd8deadSopenharmony_ci
2035bd8deadSopenharmony_ci    The contents of any 4x4 block of texels of an S3TC compressed texture
2045bd8deadSopenharmony_ci    image that does not intersect the area being modified are preserved during
2055bd8deadSopenharmony_ci    valid TexSubImage2D and CopyTexSubImage2D calls.
2065bd8deadSopenharmony_ci
2075bd8deadSopenharmony_ci
2085bd8deadSopenharmony_ci    Add to Section 3.8.2, Alternate Image Specification (adding to the end of
2095bd8deadSopenharmony_ci    the CompressedTexImage section introduced by the ARB_texture_compression
2105bd8deadSopenharmony_ci    spec)
2115bd8deadSopenharmony_ci
2125bd8deadSopenharmony_ci    If <internalformat> is COMPRESSED_RGB_S3TC_DXT1_EXT,
2135bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
2145bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT, the compressed texture is stored using one
2155bd8deadSopenharmony_ci    of several S3TC compressed texture image formats.  The S3TC texture
2165bd8deadSopenharmony_ci    compression algorithm supports only 2D images without borders.
2175bd8deadSopenharmony_ci    CompressedTexImage1DARB and CompressedTexImage3DARB produce an
2185bd8deadSopenharmony_ci    INVALID_ENUM error if <internalformat> is an S3TC format.
2195bd8deadSopenharmony_ci    CompressedTexImage2DARB will produce an INVALID_OPERATION error if
2205bd8deadSopenharmony_ci    <border> is non-zero.
2215bd8deadSopenharmony_ci
2225bd8deadSopenharmony_ci
2235bd8deadSopenharmony_ci    Add to Section 3.8.2, Alternate Image Specification (adding to the end of
2245bd8deadSopenharmony_ci    the CompressedTexSubImage section introduced by the
2255bd8deadSopenharmony_ci    ARB_texture_compression spec)
2265bd8deadSopenharmony_ci
2275bd8deadSopenharmony_ci    If the internal format of the texture image being modified is
2285bd8deadSopenharmony_ci    COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT,
2295bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT3_EXT, or COMPRESSED_RGBA_S3TC_DXT5_EXT, the
2305bd8deadSopenharmony_ci    texture is stored using one of the several S3TC compressed texture image
2315bd8deadSopenharmony_ci    formats.  Since the S3TC texture compression algorithm supports only 2D
2325bd8deadSopenharmony_ci    images, CompressedTexSubImage1DARB and CompressedTexSubImage3DARB produce
2335bd8deadSopenharmony_ci    an INVALID_ENUM error if <format> is an S3TC format.  Since S3TC images
2345bd8deadSopenharmony_ci    are easily edited along 4x4 texel boundaries, the limitations on
2355bd8deadSopenharmony_ci    CompressedTexSubImage2D are relaxed.  CompressedTexSubImage2D will result
2365bd8deadSopenharmony_ci    in an INVALID_OPERATION error only if one of the following conditions
2375bd8deadSopenharmony_ci    occurs:
2385bd8deadSopenharmony_ci
2395bd8deadSopenharmony_ci        * <width> is not a multiple of four, and <width> plus <xoffset> is not
2405bd8deadSopenharmony_ci          equal to TEXTURE_WIDTH;
2415bd8deadSopenharmony_ci
2425bd8deadSopenharmony_ci        * <height> is not a multiple of four, and <height> plus <yoffset> is
2435bd8deadSopenharmony_ci          not equal to TEXTURE_HEIGHT; or
2445bd8deadSopenharmony_ci
2455bd8deadSopenharmony_ci        * <xoffset> or <yoffset> is not a multiple of four.
2465bd8deadSopenharmony_ci
2475bd8deadSopenharmony_ci    The contents of any 4x4 block of texels of an S3TC compressed texture
2485bd8deadSopenharmony_ci    image that does not intersect the area being modified are preserved during
2495bd8deadSopenharmony_ci    valid TexSubImage2D and CopyTexSubImage2D calls.
2505bd8deadSopenharmony_ci
2515bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 1.2.1 Specification (Per-Fragment
2525bd8deadSopenharmony_ciOperations and the Frame Buffer)
2535bd8deadSopenharmony_ci
2545bd8deadSopenharmony_ci    None.
2555bd8deadSopenharmony_ci
2565bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 1.2.1 Specification (Special Functions)
2575bd8deadSopenharmony_ci
2585bd8deadSopenharmony_ci    None.
2595bd8deadSopenharmony_ci
2605bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 1.2.1 Specification (State and
2615bd8deadSopenharmony_ciState Requests)
2625bd8deadSopenharmony_ci
2635bd8deadSopenharmony_ci    None.
2645bd8deadSopenharmony_ci
2655bd8deadSopenharmony_ciAdditions to Appendix A of the OpenGL 1.2.1 Specification (Invariance)
2665bd8deadSopenharmony_ci
2675bd8deadSopenharmony_ci    None.
2685bd8deadSopenharmony_ci
2695bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL ES 2.0.25 Specification
2705bd8deadSopenharmony_ci
2715bd8deadSopenharmony_ci    Modify Section 3.7.1, Texture Image Specification
2725bd8deadSopenharmony_ci
2735bd8deadSopenharmony_ci    (change last paragraph on Page 67 as follows)
2745bd8deadSopenharmony_ci
2755bd8deadSopenharmony_ci    Components are then selected from the resulting R, G, B, or A values
2765bd8deadSopenharmony_ci    to obtain a texture with the base internal format specified by
2775bd8deadSopenharmony_ci    <internalformat>, which must match <format> except when <target> is
2785bd8deadSopenharmony_ci    TEXTURE_2D and <internalformat> is one of the following compressed
2795bd8deadSopenharmony_ci    formats: COMPRESSED_RGB_S3TC_DXT1_EXT,
2805bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
2815bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT. In this case, conversion from only
2825bd8deadSopenharmony_ci    RGB and RGBA formats are supported during texture image processing.
2835bd8deadSopenharmony_ci    <format> values other than RBA or RGBA will result in the
2845bd8deadSopenharmony_ci    INVALID_OPERATION error. In all other cases where <internalformat>
2855bd8deadSopenharmony_ci    does not match <format>, the error INVALID_OPERATION is generated.
2865bd8deadSopenharmony_ci    Table 3.8 summarizes the mapping of R, G, B, and A values to texture
2875bd8deadSopenharmony_ci    components, as a function of the base internal format of the texture
2885bd8deadSopenharmony_ci    image. <internalformat> may be one of the five internal format
2895bd8deadSopenharmony_ci    symbolic constants listed in table 3.8 or the four compressed
2905bd8deadSopenharmony_ci    formats: COMPRESSED_RGB_S3TC_DXT1_EXT,
2915bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
2925bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT. Specifying a value for
2935bd8deadSopenharmony_ci    <internalformat> that is not one of the above values generates the
2945bd8deadSopenharmony_ci    error INVALID_VALUE. When a compressed <internalformat> is specified,
2955bd8deadSopenharmony_ci    a compressed texture is created and all the associated restrictions
2965bd8deadSopenharmony_ci    mentioned in Section 3.7.3 are imposed.
2975bd8deadSopenharmony_ci
2985bd8deadSopenharmony_ci    Note that when encoding an RGBA image into a format using 1-bit
2995bd8deadSopenharmony_ci    alpha, any texels with an alpha component less than 0.5 end up
3005bd8deadSopenharmony_ci    with an alpha of 0.0 and any texels with an alpha component
3015bd8deadSopenharmony_ci    greater than or equal to 0.5 end up with an alpha of 1.0. When
3025bd8deadSopenharmony_ci    encoding an RGBA image into the COMPRESSED_RGBA_S3TC_DXT1_EXT
3035bd8deadSopenharmony_ci    format, the resulting red, green, and blue components of any
3045bd8deadSopenharmony_ci    texels with a final alpha of 0.0 will automatically be zero
3055bd8deadSopenharmony_ci    (black).  If this behavior is not desired by an application, it
3065bd8deadSopenharmony_ci    should not use COMPRESSED_RGBA_S3TC_DXT1_EXT.
3075bd8deadSopenharmony_ci
3085bd8deadSopenharmony_ci    Modify Section 3.7.2, Alternate Texture Image Specification Commands
3095bd8deadSopenharmony_ci
3105bd8deadSopenharmony_ci    (add to the end of section)
3115bd8deadSopenharmony_ci
3125bd8deadSopenharmony_ci    When the internal format of the texture object is
3135bd8deadSopenharmony_ci    COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT,
3145bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT3_EXT, or COMPRESSED_RGBA_S3TC_DXT5_EXT, the
3155bd8deadSopenharmony_ci    update region specified in TexSubImage2D must be aligned to 4x4
3165bd8deadSopenharmony_ci    pixel blocks. If <xoffset> or <yoffset> are not multiples of 4 an
3175bd8deadSopenharmony_ci    INVALID_OPERATION error is generated. If <width> is not a multiple
3185bd8deadSopenharmony_ci    of 4 and <xoffset> + <width> is not equal to the width of the LOD
3195bd8deadSopenharmony_ci    then an INVALID_OPERATION error is generated.  If <height> is not
3205bd8deadSopenharmony_ci    a multiple of 4 and <yoffset> + <height> is not equal to the
3215bd8deadSopenharmony_ci    height of the LOD then an INVALID_OPERATION error is generated.
3225bd8deadSopenharmony_ci
3235bd8deadSopenharmony_ci    Modify Section 3.7.3, "Compressed Texture Images"
3245bd8deadSopenharmony_ci
3255bd8deadSopenharmony_ci    (Replace first two sentences with)
3265bd8deadSopenharmony_ci
3275bd8deadSopenharmony_ci    Texture images may also be specified or modified using image data
3285bd8deadSopenharmony_ci    already stored in a known compressed image format.  The GL defines
3295bd8deadSopenharmony_ci    some specific compressed formats, and others may be defined by GL
3305bd8deadSopenharmony_ci    extensions.
3315bd8deadSopenharmony_ci
3325bd8deadSopenharmony_ci    (Insert after section describing CompressedTexImage2D)
3335bd8deadSopenharmony_ci
3345bd8deadSopenharmony_ci    The specific compressed texture formats supported by
3355bd8deadSopenharmony_ci    CompressedTexImage2D, and the corresponding base internal format
3365bd8deadSopenharmony_ci    for each specific format, are defined in table 3.X.
3375bd8deadSopenharmony_ci
3385bd8deadSopenharmony_ci        Table 3.X: "Specific compressed texture formats"
3395bd8deadSopenharmony_ci
3405bd8deadSopenharmony_ci        Compressed Internal Formats           Base Internal Format
3415bd8deadSopenharmony_ci        ===========================           ====================
3425bd8deadSopenharmony_ci        COMPRESSED_RGB_S3TC_DXT1_EXT           RGB
3435bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT1_EXT          RGBA
3445bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT3_EXT          RGBA
3455bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT5_EXT          RGBA
3465bd8deadSopenharmony_ci
3475bd8deadSopenharmony_ci    (Replace last paragraph with)
3485bd8deadSopenharmony_ci
3495bd8deadSopenharmony_ci    If the internal format is one of COMPRESSED_RGB_S3TC_DXT1_EXT,
3505bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
3515bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT, the compressed texture is stored
3525bd8deadSopenharmony_ci    using one of several S3TC compressed texture image formats and is
3535bd8deadSopenharmony_ci    easily edited along 4x4 texel boundaries. In this case,
3545bd8deadSopenharmony_ci    CompressedTexSubImage2D will result in an INVALID_OPERATION error
3555bd8deadSopenharmony_ci    if one of the following conditions occurs:
3565bd8deadSopenharmony_ci
3575bd8deadSopenharmony_ci        * <width> is not a multiple of four, and <width> plus
3585bd8deadSopenharmony_ci          <xoffset> is not equal to texture width;
3595bd8deadSopenharmony_ci
3605bd8deadSopenharmony_ci        * <height> is not a multiple of four, and <height> plus
3615bd8deadSopenharmony_ci          <yoffset> is not equal to texture height; or
3625bd8deadSopenharmony_ci
3635bd8deadSopenharmony_ci        * <xoffset> or <yoffset> is not a multiple of four.
3645bd8deadSopenharmony_ci
3655bd8deadSopenharmony_ci    For any other formats, calling CompressedTexSubImage2D will result
3665bd8deadSopenharmony_ci    in an INVALID_OPERATION error if <xoffset> or <yoffset> is not
3675bd8deadSopenharmony_ci    equal to zero, or if <width> and <height> do not match the width
3685bd8deadSopenharmony_ci    and height of the texture, respectively. The contents of any texel
3695bd8deadSopenharmony_ci    outside the region modified by the call are undefined. These
3705bd8deadSopenharmony_ci    restrictions may be relaxed for other specific compressed internal
3715bd8deadSopenharmony_ci    formats whose images are easily modified.
3725bd8deadSopenharmony_ci
3735bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL ES 2.0.25 Specification (Per-Fragment
3745bd8deadSopenharmony_ciOperations and the Framebuffer)
3755bd8deadSopenharmony_ci
3765bd8deadSopenharmony_ci    Modify Section 4.4.3, Attaching Texture Images to a Framebuffer
3775bd8deadSopenharmony_ci
3785bd8deadSopenharmony_ci    (add after last paragraph on Page 113)
3795bd8deadSopenharmony_ci
3805bd8deadSopenharmony_ci    If <texture> is not zero and the internal format of the
3815bd8deadSopenharmony_ci    corresponding texture object is a compressed format, an
3825bd8deadSopenharmony_ci    INVALID_OPERATION error is generated.
3835bd8deadSopenharmony_ci
3845bd8deadSopenharmony_ciInteractions of extended OpenGL ES 2.0.25 with NV_texture_array
3855bd8deadSopenharmony_ci
3865bd8deadSopenharmony_ci    If NV_texture_array is supported, the S3TC compressed formats may
3875bd8deadSopenharmony_ci    also be used as the internal formats given to
3885bd8deadSopenharmony_ci    CompressedTexImage3DNV and CompressedTexSubImage3DNV. The
3895bd8deadSopenharmony_ci    restrictions for the <width>, <height>, <xoffset>, and <yoffset>
3905bd8deadSopenharmony_ci    parameters of the CompressedTexSubImage2D function when used with
3915bd8deadSopenharmony_ci    S3TC compressed texture formats, described in this extension, also
3925bd8deadSopenharmony_ci    apply to the identically named parameters of
3935bd8deadSopenharmony_ci    CompressedTexSubImage3DNV.
3945bd8deadSopenharmony_ci
3955bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL ES 3.0.2 Specification
3965bd8deadSopenharmony_ci
3975bd8deadSopenharmony_ci    Modify Section 3.8.3, "Texture Image Specification"
3985bd8deadSopenharmony_ci
3995bd8deadSopenharmony_ci    (Modify paragraph starting with "Components are then selected")
4005bd8deadSopenharmony_ci
4015bd8deadSopenharmony_ci    Components are then selected from the resulting R, G, B, A, depth, or
4025bd8deadSopenharmony_ci    stencil values to obtain a texture with the base internal format specified
4035bd8deadSopenharmony_ci    by (or derived from) internalformat. Table 3.11 summarizes the mapping of
4045bd8deadSopenharmony_ci    R, G, B, A, depth, or stencil values to texture components, as a function
4055bd8deadSopenharmony_ci    of the base internal format of the texture image.
4065bd8deadSopenharmony_ci
4075bd8deadSopenharmony_ci    For internalformat different than COMPRESSED_RGB_S3TC_DXT1_EXT,
4085bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
4095bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EX specifying a combination of values for format,
4105bd8deadSopenharmony_ci    type, and internalformat that is not listed as a valid combination in
4115bd8deadSopenharmony_ci    tables 3.2 or 3.3 generates the error INVALID_OPERATION.
4125bd8deadSopenharmony_ci
4135bd8deadSopenharmony_ci    For internalformat equal COMPRESSED_RGB_S3TC_DXT1_EXT,
4145bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
4155bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT only RGB and RGBA formats are supported
4165bd8deadSopenharmony_ci    during texture image processing and for these internalformat values
4175bd8deadSopenharmony_ci    <format> values other than RBA or RGBA will result in the INVALID_OPERATION
4185bd8deadSopenharmony_ci    error.
4195bd8deadSopenharmony_ci  
4205bd8deadSopenharmony_ci    Modify Section 3.8.6, "Compressed Texture Images"
4215bd8deadSopenharmony_ci
4225bd8deadSopenharmony_ci    (extend Table 3.16 with the following rows)
4235bd8deadSopenharmony_ci
4245bd8deadSopenharmony_ci        Compressed Internal Formats           Base Internal Format
4255bd8deadSopenharmony_ci        ===========================           ====================
4265bd8deadSopenharmony_ci        COMPRESSED_RGB_S3TC_DXT1_EXT          RGB
4275bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT1_EXT         RGBA
4285bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT3_EXT         RGBA
4295bd8deadSopenharmony_ci        COMPRESSED_RGBA_S3TC_DXT5_EXT         RGBA
4305bd8deadSopenharmony_ci
4315bd8deadSopenharmony_ci    (Replace the first paragraph)
4325bd8deadSopenharmony_ci
4335bd8deadSopenharmony_ci    Texture images may also be specified or modified using image data already
4345bd8deadSopenharmony_ci    stored in a known compressed image format, such as the
4355bd8deadSopenharmony_ci    ETC2/EAC/DXT1/DXT3/DXT5 formats defined in appendix C, or additional
4365bd8deadSopenharmony_ci    formats defined by GL extensions.
4375bd8deadSopenharmony_ci
4385bd8deadSopenharmony_ci    (Replace paragraph starting with: If internalformat is one of the ETC2/EAC
4395bd8deadSopenharmony_ci    formats described)
4405bd8deadSopenharmony_ci
4415bd8deadSopenharmony_ci    If internalformat is one of the ETC2/EAC/DXT1/DXT3/DXT5 formats described
4425bd8deadSopenharmony_ci    in table 3.16, the compressed image data is stored using one of the
4435bd8deadSopenharmony_ci    ETC2/EAC/DXT1/DXT3/DXT5 compressed texture image encodings (see appendix
4445bd8deadSopenharmony_ci    C). The ETC2/EAC/DXT1/DXT3/DXT5 texture compression algorithm supports only
4455bd8deadSopenharmony_ci    two-dimensional images. If internalformat is an ETC2/EAC/DXT1/DXT3/DXT5
4465bd8deadSopenharmony_ci    format, CompressedTexImage3D will generate an INVALID_OPERATION error if
4475bd8deadSopenharmony_ci    target is not TEXTURE_2D_ARRAY.   
4485bd8deadSopenharmony_ci
4495bd8deadSopenharmony_ci    (Add at the end of the chapter)
4505bd8deadSopenharmony_ci
4515bd8deadSopenharmony_ci    If the internal format is one of COMPRESSED_RGB_S3TC_DXT1_EXT,
4525bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
4535bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT, the compressed texture is stored using one
4545bd8deadSopenharmony_ci    of several S3TC compressed texture image formats and is easily edited along
4555bd8deadSopenharmony_ci    4x4 texel boundaries. In this case,
4565bd8deadSopenharmony_ci    CompressedTexSubImage2D/CompressedTexSubImage3D will result in an
4575bd8deadSopenharmony_ci    INVALID_OPERATION error if one of the following conditions occurs:
4585bd8deadSopenharmony_ci
4595bd8deadSopenharmony_ci        * <width> is not a multiple of four, and <width> plus
4605bd8deadSopenharmony_ci          <xoffset> is not equal to texture width;
4615bd8deadSopenharmony_ci
4625bd8deadSopenharmony_ci        * <height> is not a multiple of four, and <height> plus
4635bd8deadSopenharmony_ci          <yoffset> is not equal to texture height; or
4645bd8deadSopenharmony_ci
4655bd8deadSopenharmony_ci        * <xoffset> or <yoffset> is not a multiple of four.
4665bd8deadSopenharmony_ci
4675bd8deadSopenharmony_ci    For any other formats, calling CompressedTexSubImage2D/CompressedTexSubImage3D
4685bd8deadSopenharmony_ci    will result in an INVALID_OPERATION error if <xoffset> or <yoffset> is not
4695bd8deadSopenharmony_ci    equal to zero, or if <width> and <height> do not match the width and height
4705bd8deadSopenharmony_ci    of the texture, respectively. The contents of any texel outside the region
4715bd8deadSopenharmony_ci    modified by the call are undefined. These restrictions may be relaxed for
4725bd8deadSopenharmony_ci    other specific compressed internal formats whose images are easily
4735bd8deadSopenharmony_ci    modified.
4745bd8deadSopenharmony_ci
4755bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications
4765bd8deadSopenharmony_ci
4775bd8deadSopenharmony_ci    None.
4785bd8deadSopenharmony_ci
4795bd8deadSopenharmony_ciGLX Protocol
4805bd8deadSopenharmony_ci
4815bd8deadSopenharmony_ci    None.
4825bd8deadSopenharmony_ci
4835bd8deadSopenharmony_ciDependencies on OpenGL 2.0 or ARB_texture_non_power_of_two
4845bd8deadSopenharmony_ci
4855bd8deadSopenharmony_ci    If OpenGL 2.0 or ARB_texture_non_power_of_two is supported, compressed
4865bd8deadSopenharmony_ci    texture images can have sizes that are neither multiples of four nor small
4875bd8deadSopenharmony_ci    values like one or two.  The original version of this specification didn't
4885bd8deadSopenharmony_ci    allow TexSubImage2D and CompressedTexSubImage2D to update only a portion
4895bd8deadSopenharmony_ci    of such images.  The spec has been updated to allow such edits in the
4905bd8deadSopenharmony_ci    spirit of the resolution of issue (3).  See the "Implementation Note"
4915bd8deadSopenharmony_ci    section for more details.
4925bd8deadSopenharmony_ci
4935bd8deadSopenharmony_ciErrors for OpenGL 1.2.1 Specification
4945bd8deadSopenharmony_ci
4955bd8deadSopenharmony_ci    INVALID_ENUM is generated by CompressedTexImage1D or CompressedTexImage3D
4965bd8deadSopenharmony_ci    if <internalformat> is COMPRESSED_RGB_S3TC_DXT1_EXT,
4975bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
4985bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT.
4995bd8deadSopenharmony_ci
5005bd8deadSopenharmony_ci    INVALID_OPERATION is generated by CompressedTexImage2D if
5015bd8deadSopenharmony_ci    <internalformat> is COMPRESSED_RGB_S3TC_DXT1_EXT,
5025bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
5035bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT and <border> is not equal to zero.
5045bd8deadSopenharmony_ci
5055bd8deadSopenharmony_ci    INVALID_ENUM is generated by CompressedTexSubImage1D or
5065bd8deadSopenharmony_ci    CompressedTexSubImage3D if <format> is COMPRESSED_RGB_S3TC_DXT1_EXT,
5075bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
5085bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT.
5095bd8deadSopenharmony_ci
5105bd8deadSopenharmony_ci    INVALID_OPERATION is generated by TexSubImage2D or CopyTexSubImage2D if
5115bd8deadSopenharmony_ci    TEXTURE_INTERNAL_FORMAT is COMPRESSED_RGB_S3TC_DXT1_EXT,
5125bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
5135bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT and any of the following apply: 
5145bd8deadSopenharmony_ci
5155bd8deadSopenharmony_ci        * <width> is not a multiple of four, <width> plus <xoffset> is not
5165bd8deadSopenharmony_ci           equal to TEXTURE_WIDTH, and either <xoffset> or <yoffset> is
5175bd8deadSopenharmony_ci           non-zero;
5185bd8deadSopenharmony_ci
5195bd8deadSopenharmony_ci        * <height> is not a multiple of four, <height> plus <yoffset> is not
5205bd8deadSopenharmony_ci          equal to TEXTURE_HEIGHT, and either <xoffset> or <yoffset> is
5215bd8deadSopenharmony_ci          non-zero; or
5225bd8deadSopenharmony_ci
5235bd8deadSopenharmony_ci        * <xoffset> or <yoffset> is not a multiple of four.
5245bd8deadSopenharmony_ci
5255bd8deadSopenharmony_ci    INVALID_OPERATION is generated by CompressedTexSubImage2D if
5265bd8deadSopenharmony_ci    TEXTURE_INTERNAL_FORMAT is COMPRESSED_RGB_S3TC_DXT1_EXT,
5275bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
5285bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT and any of the following apply:
5295bd8deadSopenharmony_ci
5305bd8deadSopenharmony_ci        * <width> is not a multiple of four, and <width> plus <xoffset> is not
5315bd8deadSopenharmony_ci          equal to TEXTURE_WIDTH;
5325bd8deadSopenharmony_ci
5335bd8deadSopenharmony_ci        * <height> is not a multiple of four, and <height> plus <yoffset> is
5345bd8deadSopenharmony_ci          not equal to TEXTURE_HEIGHT; or
5355bd8deadSopenharmony_ci
5365bd8deadSopenharmony_ci        * <xoffset> or <yoffset> is not a multiple of four.
5375bd8deadSopenharmony_ci
5385bd8deadSopenharmony_ci
5395bd8deadSopenharmony_ci    The following restrictions from the ARB_texture_compression specification
5405bd8deadSopenharmony_ci    do not apply to S3TC texture formats, since subimage modification is
5415bd8deadSopenharmony_ci    straightforward as long as the subimage is properly aligned.
5425bd8deadSopenharmony_ci
5435bd8deadSopenharmony_ci    DELETE: INVALID_OPERATION is generated by TexSubImage1D, TexSubImage2D,
5445bd8deadSopenharmony_ci    DELETE: TexSubImage3D, CopyTexSubImage1D, CopyTexSubImage2D, or
5455bd8deadSopenharmony_ci    DELETE: CopyTexSubImage3D if the internal format of the texture image is
5465bd8deadSopenharmony_ci    DELETE: compressed and <xoffset>, <yoffset>, or <zoffset> does not equal
5475bd8deadSopenharmony_ci    DELETE: -b, where b is value of TEXTURE_BORDER.
5485bd8deadSopenharmony_ci
5495bd8deadSopenharmony_ci    DELETE: INVALID_VALUE is generated by CompressedTexSubImage1DARB,
5505bd8deadSopenharmony_ci    DELETE: CompressedTexSubImage2DARB, or CompressedTexSubImage3DARB if the
5515bd8deadSopenharmony_ci    DELETE: entire texture image is not being edited:  if <xoffset>,
5525bd8deadSopenharmony_ci    DELETE: <yoffset>, or <zoffset> is greater than -b, <xoffset> + <width> is
5535bd8deadSopenharmony_ci    DELETE: less than w+b, <yoffset> + <height> is less than h+b, or <zoffset>
5545bd8deadSopenharmony_ci    DELETE: + <depth> is less than d+b, where b is the value of
5555bd8deadSopenharmony_ci    DELETE: TEXTURE_BORDER, w is the value of TEXTURE_WIDTH, h is the value of
5565bd8deadSopenharmony_ci    DELETE: TEXTURE_HEIGHT, and d is the value of TEXTURE_DEPTH.
5575bd8deadSopenharmony_ci
5585bd8deadSopenharmony_ci    See also errors in the GL_ARB_texture_compression specification.
5595bd8deadSopenharmony_ci
5605bd8deadSopenharmony_ciErrors for OpenGL ES 2.0.25 Specification
5615bd8deadSopenharmony_ci
5625bd8deadSopenharmony_ci    INVALID_OPERATION is generated by CopyTexSubImage2D if the texture
5635bd8deadSopenharmony_ci    image <level> bound to <target> has internal format
5645bd8deadSopenharmony_ci    COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT,
5655bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT3_EXT, or COMPRESSED_RGBA_S3TC_DXT5_EXT.
5665bd8deadSopenharmony_ci
5675bd8deadSopenharmony_ci    INVALID_OPERATION is generated by CompressedTexSubImage2D if
5685bd8deadSopenharmony_ci    <format> is COMPRESSED_RGB_S3TC_DXT1_EXT,
5695bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
5705bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT and any of the following apply:
5715bd8deadSopenharmony_ci
5725bd8deadSopenharmony_ci        * <width> is not a multiple of four, and <width> plus
5735bd8deadSopenharmony_ci          <xoffset> is not equal to the texture width;
5745bd8deadSopenharmony_ci
5755bd8deadSopenharmony_ci        * <height> is not a multiple of four, and <height> plus
5765bd8deadSopenharmony_ci          <yoffset> is not equal to the texture height; or
5775bd8deadSopenharmony_ci
5785bd8deadSopenharmony_ci        * <xoffset> or <yoffset> is not a multiple of four.
5795bd8deadSopenharmony_ci
5805bd8deadSopenharmony_ci    INVALID_OPERATION is generated by TexImage2D and TexSubImage2D if
5815bd8deadSopenharmony_ci    texture has internal format COMPRESSED_RGB_S3TC_DXT1_EXT,
5825bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
5835bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT and any of the following apply:
5845bd8deadSopenharmony_ci
5855bd8deadSopenharmony_ci        * <xoffset> or <yoffset> are not multiples of 4
5865bd8deadSopenharmony_ci
5875bd8deadSopenharmony_ci        * <width> is not a multiple of 4 and <xoffset> + <width> is not equal
5885bd8deadSopenharmony_ci          to the width of the LOD
5895bd8deadSopenharmony_ci
5905bd8deadSopenharmony_ci        * if <height> is not a multiple of 4 and <yoffset> + <height> is not
5915bd8deadSopenharmony_ci          equal to the height of the LOD
5925bd8deadSopenharmony_ci
5935bd8deadSopenharmony_ciErrors for OpenGL ES 3.0.2 Specification
5945bd8deadSopenharmony_ci
5955bd8deadSopenharmony_ci    INVALID_OPERATION is generated by CopyTexSubImage2D / CopyTexSubImage3D if
5965bd8deadSopenharmony_ci    the texture image <level> bound to <target> has internal format
5975bd8deadSopenharmony_ci    COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT,
5985bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT3_EXT, or COMPRESSED_RGBA_S3TC_DXT5_EXT.
5995bd8deadSopenharmony_ci
6005bd8deadSopenharmony_ci    INVALID_OPERATION is generated by CompressedTexSubImage2D /
6015bd8deadSopenharmony_ci    CopressedTexSubImage3D if <format> is COMPRESSED_RGB_S3TC_DXT1_EXT,
6025bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or
6035bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT and any of the following apply:
6045bd8deadSopenharmony_ci
6055bd8deadSopenharmony_ci        * <width> is not a multiple of four, and <width> plus
6065bd8deadSopenharmony_ci          <xoffset> is not equal to the texture width;
6075bd8deadSopenharmony_ci
6085bd8deadSopenharmony_ci        * <height> is not a multiple of four, and <height> plus
6095bd8deadSopenharmony_ci          <yoffset> is not equal to the texture height; or
6105bd8deadSopenharmony_ci
6115bd8deadSopenharmony_ci        * <xoffset> or <yoffset> is not a multiple of four.
6125bd8deadSopenharmony_ci
6135bd8deadSopenharmony_ci    INVALID_OPERATION is generated by TexImage2D/TexImage3D and
6145bd8deadSopenharmony_ci    TexSubImage2D/TexSubimage3D if texture has internal format 
6155bd8deadSopenharmony_ci    COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT,
6165bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT3_ETX, or COMPRESSED_RGBA_S3TC_DXT5_EXT and
6175bd8deadSopenharmony_ci    <format> is not RGB or RGBA, or any of the following apply:
6185bd8deadSopenharmony_ci
6195bd8deadSopenharmony_ci        * <xoffset> or <yoffset> are not multiples of 4
6205bd8deadSopenharmony_ci
6215bd8deadSopenharmony_ci        * <width> is not a multiple of 4 and <xoffset> + <width> is not equal
6225bd8deadSopenharmony_ci          to the width of the LOD
6235bd8deadSopenharmony_ci
6245bd8deadSopenharmony_ci        * if <height> is not a multiple of 4 and <yoffset> + <height> is not
6255bd8deadSopenharmony_ci          equal to the height of the LOD
6265bd8deadSopenharmony_ci
6275bd8deadSopenharmony_ciNew State for OpenGL 1.2.1 Specification
6285bd8deadSopenharmony_ci
6295bd8deadSopenharmony_ci    In the "Textures" state table, increment the TEXTURE_INTERNAL_FORMAT
6305bd8deadSopenharmony_ci    subscript for Z by 4 in the "Type" row.
6315bd8deadSopenharmony_ci
6325bd8deadSopenharmony_ciNew State for OpenGL ES 2.0.25 and 3.0.2 Specifications
6335bd8deadSopenharmony_ci
6345bd8deadSopenharmony_ci    The queries for NUM_COMPRESSED_TEXTURE_FORMATS and
6355bd8deadSopenharmony_ci    COMPRESSED_TEXTURE_FORMATS include COMPRESSED_RGB_S3TC_DXT1_EXT,
6365bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, and
6375bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT.
6385bd8deadSopenharmony_ci
6395bd8deadSopenharmony_ciNew Implementation Dependent State
6405bd8deadSopenharmony_ci
6415bd8deadSopenharmony_ci    None
6425bd8deadSopenharmony_ci
6435bd8deadSopenharmony_ciAppendix in OpenGL 1.2.1
6445bd8deadSopenharmony_ciAppendix C.2 in OpenGL ES 3.0.2
6455bd8deadSopenharmony_ci
6465bd8deadSopenharmony_ci    S3TC Compressed Texture Image Formats
6475bd8deadSopenharmony_ci
6485bd8deadSopenharmony_ci    Compressed texture images stored using the S3TC compressed image formats
6495bd8deadSopenharmony_ci    are represented as a collection of 4x4 texel blocks, where each block
6505bd8deadSopenharmony_ci    contains 64 or 128 bits of texel data.  The image is encoded as a normal
6515bd8deadSopenharmony_ci    2D raster image in which each 4x4 block is treated as a single pixel.  If
6525bd8deadSopenharmony_ci    an S3TC image has a width or height that is not a multiple of four, the
6535bd8deadSopenharmony_ci    data corresponding to texels outside the image are irrelevant and
6545bd8deadSopenharmony_ci    undefined.
6555bd8deadSopenharmony_ci
6565bd8deadSopenharmony_ci    When an S3TC image with a width of <w>, height of <h>, and block size of
6575bd8deadSopenharmony_ci    <blocksize> (8 or 16 bytes) is decoded, the corresponding image size (in
6585bd8deadSopenharmony_ci    bytes) is:
6595bd8deadSopenharmony_ci    
6605bd8deadSopenharmony_ci        ceil(<w>/4) * ceil(<h>/4) * blocksize.
6615bd8deadSopenharmony_ci
6625bd8deadSopenharmony_ci    When decoding an S3TC image, the block containing the texel at offset
6635bd8deadSopenharmony_ci    (<x>, <y>) begins at an offset (in bytes) relative to the base of the
6645bd8deadSopenharmony_ci    image of:
6655bd8deadSopenharmony_ci
6665bd8deadSopenharmony_ci        blocksize * (ceil(<w>/4) * floor(<y>/4) + floor(<x>/4)).
6675bd8deadSopenharmony_ci
6685bd8deadSopenharmony_ci    The data corresponding to a specific texel (<x>, <y>) are extracted from a
6695bd8deadSopenharmony_ci    4x4 texel block using a relative (x,y) value of
6705bd8deadSopenharmony_ci    
6715bd8deadSopenharmony_ci        (<x> modulo 4, <y> modulo 4).
6725bd8deadSopenharmony_ci
6735bd8deadSopenharmony_ci    There are four distinct S3TC image formats:
6745bd8deadSopenharmony_ci
6755bd8deadSopenharmony_ci    COMPRESSED_RGB_S3TC_DXT1_EXT:  Each 4x4 block of texels consists of 64
6765bd8deadSopenharmony_ci    bits of RGB image data.  
6775bd8deadSopenharmony_ci
6785bd8deadSopenharmony_ci    Each RGB image data block is encoded as a sequence of 8 bytes, called (in
6795bd8deadSopenharmony_ci    order of increasing address):
6805bd8deadSopenharmony_ci
6815bd8deadSopenharmony_ci            c0_lo, c0_hi, c1_lo, c1_hi, bits_0, bits_1, bits_2, bits_3
6825bd8deadSopenharmony_ci
6835bd8deadSopenharmony_ci        The 8 bytes of the block are decoded into three quantities:
6845bd8deadSopenharmony_ci
6855bd8deadSopenharmony_ci            color0 = c0_lo + c0_hi * 256
6865bd8deadSopenharmony_ci            color1 = c1_lo + c1_hi * 256
6875bd8deadSopenharmony_ci            bits   = bits_0 + 256 * (bits_1 + 256 * (bits_2 + 256 * bits_3))
6885bd8deadSopenharmony_ci        
6895bd8deadSopenharmony_ci        color0 and color1 are 16-bit unsigned integers that are unpacked to
6905bd8deadSopenharmony_ci        RGB colors RGB0 and RGB1 as though they were 16-bit packed pixels with
6915bd8deadSopenharmony_ci        a <format> of RGB and a type of UNSIGNED_SHORT_5_6_5.
6925bd8deadSopenharmony_ci
6935bd8deadSopenharmony_ci        bits is a 32-bit unsigned integer, from which a two-bit control code
6945bd8deadSopenharmony_ci        is extracted for a texel at location (x,y) in the block using:
6955bd8deadSopenharmony_ci
6965bd8deadSopenharmony_ci            code(x,y) = bits[2*(4*y+x)+1 .. 2*(4*y+x)+0]
6975bd8deadSopenharmony_ci        
6985bd8deadSopenharmony_ci        where bit 31 is the most significant and bit 0 is the least
6995bd8deadSopenharmony_ci        significant bit.
7005bd8deadSopenharmony_ci
7015bd8deadSopenharmony_ci        The RGB color for a texel at location (x,y) in the block is given by:
7025bd8deadSopenharmony_ci
7035bd8deadSopenharmony_ci            RGB0,              if color0 > color1 and code(x,y) == 0
7045bd8deadSopenharmony_ci            RGB1,              if color0 > color1 and code(x,y) == 1
7055bd8deadSopenharmony_ci            (2*RGB0+RGB1)/3,   if color0 > color1 and code(x,y) == 2
7065bd8deadSopenharmony_ci            (RGB0+2*RGB1)/3,   if color0 > color1 and code(x,y) == 3
7075bd8deadSopenharmony_ci
7085bd8deadSopenharmony_ci            RGB0,              if color0 <= color1 and code(x,y) == 0
7095bd8deadSopenharmony_ci            RGB1,              if color0 <= color1 and code(x,y) == 1
7105bd8deadSopenharmony_ci            (RGB0+RGB1)/2,     if color0 <= color1 and code(x,y) == 2
7115bd8deadSopenharmony_ci            BLACK,             if color0 <= color1 and code(x,y) == 3
7125bd8deadSopenharmony_ci
7135bd8deadSopenharmony_ci        Arithmetic operations are done per component, and BLACK refers to an
7145bd8deadSopenharmony_ci        RGB color where red, green, and blue are all zero.
7155bd8deadSopenharmony_ci
7165bd8deadSopenharmony_ci    Since this image has an RGB format, there is no alpha component and the
7175bd8deadSopenharmony_ci    image is considered fully opaque.
7185bd8deadSopenharmony_ci
7195bd8deadSopenharmony_ci
7205bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT1_EXT:  Each 4x4 block of texels consists of 64
7215bd8deadSopenharmony_ci    bits of RGB image data and minimal alpha information.  The RGB components
7225bd8deadSopenharmony_ci    of a texel are extracted in the same way as COMPRESSED_RGB_S3TC_DXT1_EXT.
7235bd8deadSopenharmony_ci 
7245bd8deadSopenharmony_ci        The alpha component for a texel at location (x,y) in the block is
7255bd8deadSopenharmony_ci        given by:
7265bd8deadSopenharmony_ci
7275bd8deadSopenharmony_ci            0.0,               if color0 <= color1 and code(x,y) == 3
7285bd8deadSopenharmony_ci            1.0,               otherwise
7295bd8deadSopenharmony_ci
7305bd8deadSopenharmony_ci        IMPORTANT:  When encoding an RGBA image into a format using 1-bit
7315bd8deadSopenharmony_ci        alpha, any texels with an alpha component less than 0.5 end up with an
7325bd8deadSopenharmony_ci        alpha of 0.0 and any texels with an alpha component greater than or
7335bd8deadSopenharmony_ci        equal to 0.5 end up with an alpha of 1.0.  When encoding an RGBA image
7345bd8deadSopenharmony_ci        into the COMPRESSED_RGBA_S3TC_DXT1_EXT format, the resulting red,
7355bd8deadSopenharmony_ci        green, and blue components of any texels with a final alpha of 0.0
7365bd8deadSopenharmony_ci        will automatically be zero (black).  If this behavior is not desired
7375bd8deadSopenharmony_ci        by an application, it should not use COMPRESSED_RGBA_S3TC_DXT1_EXT.
7385bd8deadSopenharmony_ci        This format will never be used when a generic compressed internal
7395bd8deadSopenharmony_ci        format (Table 3.16.2) is specified, although the nearly identical
7405bd8deadSopenharmony_ci        format COMPRESSED_RGB_S3TC_DXT1_EXT (above) may be.
7415bd8deadSopenharmony_ci
7425bd8deadSopenharmony_ci
7435bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT3_EXT:  Each 4x4 block of texels consists of 64
7445bd8deadSopenharmony_ci    bits of uncompressed alpha image data followed by 64 bits of RGB image
7455bd8deadSopenharmony_ci    data.  
7465bd8deadSopenharmony_ci
7475bd8deadSopenharmony_ci    Each RGB image data block is encoded according to the
7485bd8deadSopenharmony_ci    COMPRESSED_RGB_S3TC_DXT1_EXT format, with the exception that the two code
7495bd8deadSopenharmony_ci    bits always use the non-transparent encodings.  In other words, they are
7505bd8deadSopenharmony_ci    treated as though color0 > color1, regardless of the actual values of
7515bd8deadSopenharmony_ci    color0 and color1.
7525bd8deadSopenharmony_ci
7535bd8deadSopenharmony_ci    Each alpha image data block is encoded as a sequence of 8 bytes, called
7545bd8deadSopenharmony_ci    (in order of increasing address):
7555bd8deadSopenharmony_ci
7565bd8deadSopenharmony_ci            a0, a1, a2, a3, a4, a5, a6, a7
7575bd8deadSopenharmony_ci
7585bd8deadSopenharmony_ci        The 8 bytes of the block are decoded into one 64-bit integer:
7595bd8deadSopenharmony_ci
7605bd8deadSopenharmony_ci            alpha = a0 + 256 * (a1 + 256 * (a2 + 256 * (a3 + 256 * (a4 +
7615bd8deadSopenharmony_ci                         256 * (a5 + 256 * (a6 + 256 * a7))))))
7625bd8deadSopenharmony_ci
7635bd8deadSopenharmony_ci        alpha is a 64-bit unsigned integer, from which a four-bit alpha value
7645bd8deadSopenharmony_ci        is extracted for a texel at location (x,y) in the block using:
7655bd8deadSopenharmony_ci
7665bd8deadSopenharmony_ci            alpha(x,y) = bits[4*(4*y+x)+3 .. 4*(4*y+x)+0]
7675bd8deadSopenharmony_ci
7685bd8deadSopenharmony_ci        where bit 63 is the most significant and bit 0 is the least
7695bd8deadSopenharmony_ci        significant bit.
7705bd8deadSopenharmony_ci
7715bd8deadSopenharmony_ci        The alpha component for a texel at location (x,y) in the block is
7725bd8deadSopenharmony_ci        given by alpha(x,y) / 15.
7735bd8deadSopenharmony_ci
7745bd8deadSopenharmony_ci 
7755bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT:  Each 4x4 block of texels consists of 64
7765bd8deadSopenharmony_ci    bits of compressed alpha image data followed by 64 bits of RGB image data.
7775bd8deadSopenharmony_ci
7785bd8deadSopenharmony_ci    Each RGB image data block is encoded according to the
7795bd8deadSopenharmony_ci    COMPRESSED_RGB_S3TC_DXT1_EXT format, with the exception that the two code
7805bd8deadSopenharmony_ci    bits always use the non-transparent encodings.  In other words, they are
7815bd8deadSopenharmony_ci    treated as though color0 > color1, regardless of the actual values of
7825bd8deadSopenharmony_ci    color0 and color1.
7835bd8deadSopenharmony_ci
7845bd8deadSopenharmony_ci    Each alpha image data block is encoded as a sequence of 8 bytes, called
7855bd8deadSopenharmony_ci    (in order of increasing address):
7865bd8deadSopenharmony_ci
7875bd8deadSopenharmony_ci        alpha0, alpha1, bits_0, bits_1, bits_2, bits_3, bits_4, bits_5
7885bd8deadSopenharmony_ci
7895bd8deadSopenharmony_ci        The alpha0 and alpha1 are 8-bit unsigned bytes converted to alpha
7905bd8deadSopenharmony_ci        components by multiplying by 1/255.
7915bd8deadSopenharmony_ci
7925bd8deadSopenharmony_ci        The 6 "bits" bytes of the block are decoded into one 48-bit integer:
7935bd8deadSopenharmony_ci
7945bd8deadSopenharmony_ci          bits = bits_0 + 256 * (bits_1 + 256 * (bits_2 + 256 * (bits_3 + 
7955bd8deadSopenharmony_ci                          256 * (bits_4 + 256 * bits_5))))
7965bd8deadSopenharmony_ci
7975bd8deadSopenharmony_ci        bits is a 48-bit unsigned integer, from which a three-bit control code
7985bd8deadSopenharmony_ci        is extracted for a texel at location (x,y) in the block using:
7995bd8deadSopenharmony_ci
8005bd8deadSopenharmony_ci            code(x,y) = bits[3*(4*y+x)+2 .. 3*(4*y+x)+0]
8015bd8deadSopenharmony_ci
8025bd8deadSopenharmony_ci        where bit 47 is the most significant and bit 0 is the least
8035bd8deadSopenharmony_ci        significant bit.
8045bd8deadSopenharmony_ci
8055bd8deadSopenharmony_ci        The alpha component for a texel at location (x,y) in the block is
8065bd8deadSopenharmony_ci        given by:
8075bd8deadSopenharmony_ci
8085bd8deadSopenharmony_ci              alpha0,                   code(x,y) == 0
8095bd8deadSopenharmony_ci              alpha1,                   code(x,y) == 1
8105bd8deadSopenharmony_ci
8115bd8deadSopenharmony_ci              (6*alpha0 + 1*alpha1)/7,  alpha0 > alpha1 and code(x,y) == 2
8125bd8deadSopenharmony_ci              (5*alpha0 + 2*alpha1)/7,  alpha0 > alpha1 and code(x,y) == 3
8135bd8deadSopenharmony_ci              (4*alpha0 + 3*alpha1)/7,  alpha0 > alpha1 and code(x,y) == 4
8145bd8deadSopenharmony_ci              (3*alpha0 + 4*alpha1)/7,  alpha0 > alpha1 and code(x,y) == 5
8155bd8deadSopenharmony_ci              (2*alpha0 + 5*alpha1)/7,  alpha0 > alpha1 and code(x,y) == 6
8165bd8deadSopenharmony_ci              (1*alpha0 + 6*alpha1)/7,  alpha0 > alpha1 and code(x,y) == 7
8175bd8deadSopenharmony_ci
8185bd8deadSopenharmony_ci              (4*alpha0 + 1*alpha1)/5,  alpha0 <= alpha1 and code(x,y) == 2
8195bd8deadSopenharmony_ci              (3*alpha0 + 2*alpha1)/5,  alpha0 <= alpha1 and code(x,y) == 3
8205bd8deadSopenharmony_ci              (2*alpha0 + 3*alpha1)/5,  alpha0 <= alpha1 and code(x,y) == 4
8215bd8deadSopenharmony_ci              (1*alpha0 + 4*alpha1)/5,  alpha0 <= alpha1 and code(x,y) == 5
8225bd8deadSopenharmony_ci              0.0,                      alpha0 <= alpha1 and code(x,y) == 6
8235bd8deadSopenharmony_ci              1.0,                      alpha0 <= alpha1 and code(x,y) == 7
8245bd8deadSopenharmony_ci
8255bd8deadSopenharmony_ci
8265bd8deadSopenharmony_ciImplementation Note
8275bd8deadSopenharmony_ci
8285bd8deadSopenharmony_ci    This extension allows TexSubImage2D and CompressedTexSubImage2D to perform
8295bd8deadSopenharmony_ci    partial updates to compressed images, but generally requires that the
8305bd8deadSopenharmony_ci    updated area be aligned to 4x4 block boundaries.  If the width or height
8315bd8deadSopenharmony_ci    is not a multiple of four, there will be 4x4 blocks at the edge of the
8325bd8deadSopenharmony_ci    image that contain "extra" texels that are not part of the image.  This
8335bd8deadSopenharmony_ci    spec has an exception allowing edits that partially cover such blocks as
8345bd8deadSopenharmony_ci    long as the edit covers all texels in the block belonging to the image.
8355bd8deadSopenharmony_ci    For example, in a 2D texture of size 70x50, it is legal to update the
8365bd8deadSopenharmony_ci    single partial block covering the four texels from (68,48) to (69,49) by
8375bd8deadSopenharmony_ci    setting (<xoffset>, <yoffset>) to (68,48) and <width> and <height> to 2.
8385bd8deadSopenharmony_ci
8395bd8deadSopenharmony_ci    When this extension was originally written, non-bordered textures were
8405bd8deadSopenharmony_ci    required to have widths and heights that were powers of two.  Therefore,
8415bd8deadSopenharmony_ci    the only cases where partial blocks could occur were if the width or
8425bd8deadSopenharmony_ci    height of the texture image was one or two.  The original spec language
8435bd8deadSopenharmony_ci    allowed partial block edits only if the width or height of the region
8445bd8deadSopenharmony_ci    edited was equal to the full texture size.  That language didn't handle
8455bd8deadSopenharmony_ci    cases such as the 70x50 example above.
8465bd8deadSopenharmony_ci
8475bd8deadSopenharmony_ci    This specification was updated in April, 2009 to allow such edits.
8485bd8deadSopenharmony_ci    Multiple OpenGL implementers correctly implemented the original
8495bd8deadSopenharmony_ci    restriction, and partial edits that include partially covered tiles will
8505bd8deadSopenharmony_ci    result in INVALID_OPERATION errors on older drivers.
8515bd8deadSopenharmony_ci
8525bd8deadSopenharmony_ci
8535bd8deadSopenharmony_ciNVIDIA Implementation Note
8545bd8deadSopenharmony_ci
8555bd8deadSopenharmony_ci    NVIDIA GeForce 6 and 7 Series of GPUs (NV4x- and G7x-based GPUs)
8565bd8deadSopenharmony_ci    and their Quadro counterparts (Quadro FX 4000, 4400, 4500; Quadro
8575bd8deadSopenharmony_ci    NVS 440; etc.) do not ignore the order of the 16-bit RGB values
8585bd8deadSopenharmony_ci    color0 and color1 when decoding DXT3 and DXT5 texture formats (i.e.,
8595bd8deadSopenharmony_ci    COMPRESSED_RGBA_S3TC_DXT5_EXT and COMPRESSED_RGBA_S3TC_DXT5_EXT).
8605bd8deadSopenharmony_ci    This is at variance with the specification language saying:
8615bd8deadSopenharmony_ci    
8625bd8deadSopenharmony_ci        Each RGB image data block is encoded according to the
8635bd8deadSopenharmony_ci        COMPRESSED_RGB_S3TC_DXT1_EXT format, with the exception that
8645bd8deadSopenharmony_ci        the two code bits always use the non-transparent encodings.
8655bd8deadSopenharmony_ci        In other words, they are treated as though color0 > color1,
8665bd8deadSopenharmony_ci        regardless of the actual values of color0 and color1.
8675bd8deadSopenharmony_ci
8685bd8deadSopenharmony_ci    With these NV4x and G7x GPUs, when decoding the DXT3 and DXT5 formats,
8695bd8deadSopenharmony_ci    if color0 <= color1 then the code(x,y) values of 2 and 3 encode
8705bd8deadSopenharmony_ci    (RGB0+RGB1)/2 and BLACK respectively (as is the case for DXT1).
8715bd8deadSopenharmony_ci
8725bd8deadSopenharmony_ci    All other NVIDIA GPUs (those based on GPU designs other than NV4x
8735bd8deadSopenharmony_ci    and G7x) implement DXT3 and DXT5 decoding strictly according to the
8745bd8deadSopenharmony_ci    specification.  Specifically, the order of color0 and color1 does
8755bd8deadSopenharmony_ci    not affect the decoding of the DXT3 and DXT5 format, consistent with
8765bd8deadSopenharmony_ci    the specification paragraph cited above.
8775bd8deadSopenharmony_ci
8785bd8deadSopenharmony_ci    To ensure reliable decoding of DXT3 and DXT5 textures, please avoid
8795bd8deadSopenharmony_ci    encoding an RGB image data block with color0 <= color1 when the
8805bd8deadSopenharmony_ci    block also uses code(x,y) values of 2 and 3.
8815bd8deadSopenharmony_ci
8825bd8deadSopenharmony_ciRevision History
8835bd8deadSopenharmony_ci
8845bd8deadSopenharmony_ci    1.6   07/15/13 sgrajewski Added OpenGL ES 2.0.25 and 3.0.2 dependencies.
8855bd8deadSopenharmony_ci
8865bd8deadSopenharmony_ci    1.5   11/03/09 pbrown     Fix typo in the encoding description of the
8875bd8deadSopenharmony_ci                              3-bit "bits" fields in DXT5.
8885bd8deadSopenharmony_ci
8895bd8deadSopenharmony_ci    1.4   04/13/09 pbrown     Add interaction with non-power-of-two textures
8905bd8deadSopenharmony_ci                              from OpenGL 2.0 / ARB_texture_non_power_of_two.
8915bd8deadSopenharmony_ci                              Allow CompressedTexSubImage2D to perform edits
8925bd8deadSopenharmony_ci                              that include partial tiles at the edge of the
8935bd8deadSopenharmony_ci                              image as long as the specified width/height
8945bd8deadSopenharmony_ci                              parameters line up with the edge.  Thanks to
8955bd8deadSopenharmony_ci                              Emil Persson for finding this issue.
8965bd8deadSopenharmony_ci
8975bd8deadSopenharmony_ci    1.3   07/07/07 mjk        Correct NVIDIA note about DXT3/5 decoding issue.
8985bd8deadSopenharmony_ci
8995bd8deadSopenharmony_ci    1.2   01/26/06 mjk        Add NVIDIA note about DXT3/5 decoding issue.
9005bd8deadSopenharmony_ci
9015bd8deadSopenharmony_ci    1.1,  11/16/01 pbrown:    Updated contact info, clarified where texels
9025bd8deadSopenharmony_ci                              fall within a single block.
9035bd8deadSopenharmony_ci
9045bd8deadSopenharmony_ci    1.0,  07/07/00 prbrown1:  Published final version agreed to by working
9055bd8deadSopenharmony_ci                              group members.
9065bd8deadSopenharmony_ci
9075bd8deadSopenharmony_ci    0.9,  06/24/00 prbrown1:  Documented that block-aligned TexSubImage calls
9085bd8deadSopenharmony_ci                              do not modify existing texels outside the
9095bd8deadSopenharmony_ci                              modified blocks.  Added caveat to allow for a
9105bd8deadSopenharmony_ci                              (0,0)-anchored TexSubImage operation of
9115bd8deadSopenharmony_ci                              arbitrary size.
9125bd8deadSopenharmony_ci
9135bd8deadSopenharmony_ci    0.7,  04/11/00 prbrown1:  Added issues on DXT1, DXT3, and DXT5 encodings
9145bd8deadSopenharmony_ci                              where the MSDN documentation doesn't match what
9155bd8deadSopenharmony_ci                              is really done.  Added enum values from the
9165bd8deadSopenharmony_ci                              extension registry.
9175bd8deadSopenharmony_ci
9185bd8deadSopenharmony_ci    0.4,  03/28/00 prbrown1:  Updated to reflect final version of the
9195bd8deadSopenharmony_ci                              ARB_texture_compression extension.  Allowed
9205bd8deadSopenharmony_ci                              block-aligned TexSubImage calls.
9215bd8deadSopenharmony_ci
9225bd8deadSopenharmony_ci    0.3,  03/07/00 prbrown1:  Resolved issues pertaining to the format of RGB
9235bd8deadSopenharmony_ci                              blocks in the DXT3 and DXT5 formats (they don't
9245bd8deadSopenharmony_ci                              ever use the "transparent" encoding).  Fixed
9255bd8deadSopenharmony_ci                              decoding of DXT1 blocks.  Pointed out issue of
9265bd8deadSopenharmony_ci                              "transparent" texels in DXT1 encodings having
9275bd8deadSopenharmony_ci                              different behaviors for RGB and RGBA internal
9285bd8deadSopenharmony_ci                              formats.
9295bd8deadSopenharmony_ci
9305bd8deadSopenharmony_ci    0.2,  02/23/00 prbrown1:  Minor revisions; added several issues.
9315bd8deadSopenharmony_ci
9325bd8deadSopenharmony_ci    0.11, 02/17/00 prbrown1:  Slight modification to error semantics
9335bd8deadSopenharmony_ci                              (INVALID_ENUM instead of INVALID_OPERATION).
9345bd8deadSopenharmony_ci
9355bd8deadSopenharmony_ci    0.1,  02/15/00 prbrown1:  Initial revision.
936