15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    EXT_texture_storage
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_EXT_texture_storage
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Bruce Merry (bmerry 'at' gmail.com)
125bd8deadSopenharmony_ci    Ian Romanick, Intel (ian.d.romanick 'at' intel.com)
135bd8deadSopenharmony_ci
145bd8deadSopenharmony_ciContributors
155bd8deadSopenharmony_ci
165bd8deadSopenharmony_ci    Jeremy Sandmel, Apple
175bd8deadSopenharmony_ci    Bruce Merry, ARM
185bd8deadSopenharmony_ci    Tom Olson, ARM
195bd8deadSopenharmony_ci    Benji Bowman, Imagination Technologies
205bd8deadSopenharmony_ci    Ian Romanick, Intel
215bd8deadSopenharmony_ci    Jeff Bolz, NVIDIA
225bd8deadSopenharmony_ci    Pat Brown, NVIDIA
235bd8deadSopenharmony_ci    Maurice Ribble, Qualcomm
245bd8deadSopenharmony_ci    Lingjun Chen, Qualcomm
255bd8deadSopenharmony_ci    Daniel Koch, Transgaming Inc
265bd8deadSopenharmony_ci    Benj Lipchak, Apple
275bd8deadSopenharmony_ci
285bd8deadSopenharmony_ciStatus
295bd8deadSopenharmony_ci
305bd8deadSopenharmony_ci    Complete. 
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ciVersion
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ci    Last Modified Date: 22 September, 2021
355bd8deadSopenharmony_ci    Author Revision: 29
365bd8deadSopenharmony_ci
375bd8deadSopenharmony_ciNumber
385bd8deadSopenharmony_ci
395bd8deadSopenharmony_ci    OpenGL ES Extension #108
405bd8deadSopenharmony_ci    OpenGL Extension #556
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ciDependencies
435bd8deadSopenharmony_ci
445bd8deadSopenharmony_ci    OpenGL ES 1.0, OpenGL ES 2.0 or OpenGL 1.2 is required.
455bd8deadSopenharmony_ci
465bd8deadSopenharmony_ci    OES_texture_npot, OES_texture_cube_map, OES_texture_3D,
475bd8deadSopenharmony_ci    OES_depth_texture, OES_packed_depth_stencil,
485bd8deadSopenharmony_ci    OES_compressed_paletted_texture, OES_texture_float, OES_texture_half_float
495bd8deadSopenharmony_ci    EXT_texture_type_2_10_10_10_REV, EXT_texture_format_BGRA8888,
505bd8deadSopenharmony_ci    EXT_texture3D, EXT_texture_rg, APPLE_texture_2D_limited_npot,
515bd8deadSopenharmony_ci    APPLE_rgb_422, APPLE_texture_format_BGRA8888, 
525bd8deadSopenharmony_ci    ARB_texture_cube_map, ARB_texture_cube_map_array,
535bd8deadSopenharmony_ci    ARB_texture_rectangle, SGIS_generate_mipmap,
545bd8deadSopenharmony_ci    EXT_direct_state_access, OES_EGL_image, WGL_ARB_render_texture,
555bd8deadSopenharmony_ci    GLX_EXT_texture_from_pixmap, and core specifications that
565bd8deadSopenharmony_ci    incorporate these extensions affect the definition of this
575bd8deadSopenharmony_ci    extension.
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ci    This extension is written against the OpenGL 3.2 Core Profile
605bd8deadSopenharmony_ci    specification.
615bd8deadSopenharmony_ci
625bd8deadSopenharmony_ciOverview
635bd8deadSopenharmony_ci
645bd8deadSopenharmony_ci    The texture image specification commands in OpenGL allow each level
655bd8deadSopenharmony_ci    to be separately specified with different sizes, formats, types and
665bd8deadSopenharmony_ci    so on, and only imposes consistency checks at draw time. This adds
675bd8deadSopenharmony_ci    overhead for implementations.
685bd8deadSopenharmony_ci
695bd8deadSopenharmony_ci    This extension provides a mechanism for specifying the entire
705bd8deadSopenharmony_ci    structure of a texture in a single call, allowing certain
715bd8deadSopenharmony_ci    consistency checks and memory allocations to be done up front. Once
725bd8deadSopenharmony_ci    specified, the format and dimensions of the image array become
735bd8deadSopenharmony_ci    immutable, to simplify completeness checks in the implementation.
745bd8deadSopenharmony_ci
755bd8deadSopenharmony_ci    When using this extension, it is no longer possible to supply texture
765bd8deadSopenharmony_ci    data using TexImage*. Instead, data can be uploaded using TexSubImage*,
775bd8deadSopenharmony_ci    or produced by other means (such as render-to-texture, mipmap generation,
785bd8deadSopenharmony_ci    or rendering to a sibling EGLImage).
795bd8deadSopenharmony_ci
805bd8deadSopenharmony_ci    This extension has complicated interactions with other extensions.
815bd8deadSopenharmony_ci    The goal of most of these interactions is to ensure that a texture
825bd8deadSopenharmony_ci    is always mipmap complete (and cube complete for cubemap textures).
835bd8deadSopenharmony_ci
845bd8deadSopenharmony_ciIP Status
855bd8deadSopenharmony_ci
865bd8deadSopenharmony_ci    No known IP claims
875bd8deadSopenharmony_ci
885bd8deadSopenharmony_ciNew Procedures and Functions
895bd8deadSopenharmony_ci
905bd8deadSopenharmony_ci    void TexStorage1DEXT(enum target, sizei levels,
915bd8deadSopenharmony_ci                         enum internalformat,
925bd8deadSopenharmony_ci                         sizei width);
935bd8deadSopenharmony_ci
945bd8deadSopenharmony_ci    void TexStorage2DEXT(enum target, sizei levels,
955bd8deadSopenharmony_ci                         enum internalformat,
965bd8deadSopenharmony_ci                         sizei width, sizei height);
975bd8deadSopenharmony_ci
985bd8deadSopenharmony_ci    void TexStorage3DEXT(enum target, sizei levels,
995bd8deadSopenharmony_ci                         enum internalformat,
1005bd8deadSopenharmony_ci                         sizei width, sizei height, sizei depth);
1015bd8deadSopenharmony_ci
1025bd8deadSopenharmony_ci    void TextureStorage1DEXT(uint texture, enum target, sizei levels,
1035bd8deadSopenharmony_ci                         enum internalformat,
1045bd8deadSopenharmony_ci                         sizei width);
1055bd8deadSopenharmony_ci
1065bd8deadSopenharmony_ci    void TextureStorage2DEXT(uint texture, enum target, sizei levels,
1075bd8deadSopenharmony_ci                         enum internalformat,
1085bd8deadSopenharmony_ci                         sizei width, sizei height);
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci    void TextureStorage3DEXT(uint texture, enum target, sizei levels,
1115bd8deadSopenharmony_ci                         enum internalformat,
1125bd8deadSopenharmony_ci                         sizei width, sizei height, sizei depth);
1135bd8deadSopenharmony_ci
1145bd8deadSopenharmony_ciNew Types
1155bd8deadSopenharmony_ci
1165bd8deadSopenharmony_ci    None
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ciNew Tokens
1195bd8deadSopenharmony_ci
1205bd8deadSopenharmony_ci    Accepted by the <value> parameter of GetTexParameter{if}v:
1215bd8deadSopenharmony_ci
1225bd8deadSopenharmony_ci        TEXTURE_IMMUTABLE_FORMAT_EXT   0x912F
1235bd8deadSopenharmony_ci
1245bd8deadSopenharmony_ci    Accepted by the <internalformat> parameter of TexStorage* when
1255bd8deadSopenharmony_ci    implemented on OpenGL ES:
1265bd8deadSopenharmony_ci
1275bd8deadSopenharmony_ci        ALPHA8_EXT                     0x803C  /* reuse tokens from EXT_texture */
1285bd8deadSopenharmony_ci        LUMINANCE8_EXT                 0x8040
1295bd8deadSopenharmony_ci        LUMINANCE8_ALPHA8_EXT          0x8045
1305bd8deadSopenharmony_ci
1315bd8deadSopenharmony_ci      (if OES_texture_float is supported)
1325bd8deadSopenharmony_ci        RGBA32F_EXT                    0x8814  /* reuse tokens from ARB_texture_float */
1335bd8deadSopenharmony_ci        RGB32F_EXT                     0x8815
1345bd8deadSopenharmony_ci        ALPHA32F_EXT                   0x8816
1355bd8deadSopenharmony_ci        LUMINANCE32F_EXT               0x8818
1365bd8deadSopenharmony_ci        LUMINANCE_ALPHA32F_EXT         0x8819
1375bd8deadSopenharmony_ci
1385bd8deadSopenharmony_ci      (if OES_texture_half_float is supported)
1395bd8deadSopenharmony_ci        RGBA16F_EXT                    0x881A  /* reuse tokens from ARB_texture_float */
1405bd8deadSopenharmony_ci        RGB16F_EXT                     0x881B
1415bd8deadSopenharmony_ci        ALPHA16F_EXT                   0x881C
1425bd8deadSopenharmony_ci        LUMINANCE16F_EXT               0x881E
1435bd8deadSopenharmony_ci        LUMINANCE_ALPHA16F_EXT         0x881F
1445bd8deadSopenharmony_ci
1455bd8deadSopenharmony_ci      (if EXT_texture_type_2_10_10_10_REV is supported)
1465bd8deadSopenharmony_ci        RGB10_A2_EXT                   0x8059  /* reuse tokens from EXT_texture */
1475bd8deadSopenharmony_ci        RGB10_EXT                      0x8052
1485bd8deadSopenharmony_ci
1495bd8deadSopenharmony_ci      (if EXT_texture_format_BGRA8888 or APPLE_texture_format_BGRA8888 is supported)
1505bd8deadSopenharmony_ci        BGRA8_EXT                      0x93A1
1515bd8deadSopenharmony_ci
1525bd8deadSopenharmony_ci      (if EXT_texture_rg is supported)
1535bd8deadSopenharmony_ci        R8_EXT                         0x8229  /* reuse tokens from ARB_texture_rg */
1545bd8deadSopenharmony_ci        RG8_EXT                        0x822B
1555bd8deadSopenharmony_ci
1565bd8deadSopenharmony_ci      (if EXT_texture_rg and OES_texture_float are supported)
1575bd8deadSopenharmony_ci        R32F_EXT                       0x822E  /* reuse tokens from ARB_texture_rg */
1585bd8deadSopenharmony_ci        RG32F_EXT                      0x8230
1595bd8deadSopenharmony_ci
1605bd8deadSopenharmony_ci      (if EXT_texture_rg and OES_texture_half_float are supported)
1615bd8deadSopenharmony_ci        R16F_EXT                       0x822D  /* reuse tokens from ARB_texture_g */
1625bd8deadSopenharmony_ci        RG16F_EXT                      0x822F
1635bd8deadSopenharmony_ci
1645bd8deadSopenharmony_ci      (APPLE_rgb_422 is supported)
1655bd8deadSopenharmony_ci        RGB_RAW_422_APPLE              0x8A51
1665bd8deadSopenharmony_ci
1675bd8deadSopenharmony_ci
1685bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 3.2 Core Profile Specification
1695bd8deadSopenharmony_ci(OpenGL Operation)
1705bd8deadSopenharmony_ci
1715bd8deadSopenharmony_ci    None
1725bd8deadSopenharmony_ci
1735bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 3.2 Core Profile Specification
1745bd8deadSopenharmony_ci(Rasterization)
1755bd8deadSopenharmony_ci
1765bd8deadSopenharmony_ci    After section 3.8.1 (Texture Image Specification) add a new
1775bd8deadSopenharmony_ci    subsection called "Immutable-format texture images":
1785bd8deadSopenharmony_ci
1795bd8deadSopenharmony_ci    "An alterative set of commands is provided for specifying the
1805bd8deadSopenharmony_ci    properties of all levels of a texture at once. Once a texture is
1815bd8deadSopenharmony_ci    specified with such a command, the format and dimensions of all
1825bd8deadSopenharmony_ci    levels becomes immutable, unless it is a proxy texture (since
1835bd8deadSopenharmony_ci    otherwise it would no longer be possible to use the proxy). The
1845bd8deadSopenharmony_ci    contents of the images and the parameters can still be modified.
1855bd8deadSopenharmony_ci    Such a texture is referred to as an "immutable-format" texture. The
1865bd8deadSopenharmony_ci    immutability status of a texture can be determined by calling
1875bd8deadSopenharmony_ci    GetTexParameter with <pname> TEXTURE_IMMUTABLE_FORMAT_EXT.
1885bd8deadSopenharmony_ci
1895bd8deadSopenharmony_ci    Each of the commands below is described by pseudo-code which
1905bd8deadSopenharmony_ci    indicates the effect on the dimensions and format of the texture.
1915bd8deadSopenharmony_ci    For all of the commands, the following apply in addition to the
1925bd8deadSopenharmony_ci    pseudo-code:
1935bd8deadSopenharmony_ci
1945bd8deadSopenharmony_ci    - If the default texture object is bound to <target>, an
1955bd8deadSopenharmony_ci      INVALID_OPERATION error is generated.
1965bd8deadSopenharmony_ci    - If executing the pseudo-code would lead to an error, the error is
1975bd8deadSopenharmony_ci      generated and the command will have no effect.
1985bd8deadSopenharmony_ci    - Any existing levels that are not replaced are reset to their
1995bd8deadSopenharmony_ci      initial state.
2005bd8deadSopenharmony_ci    - If <width>, <height>, <depth> or <levels> is less than 1, the
2015bd8deadSopenharmony_ci      error INVALID_VALUE is generated.
2025bd8deadSopenharmony_ci    - The pixel unpack buffer should be considered to be zero i.e.,
2035bd8deadSopenharmony_ci      the image contents are unspecified.
2045bd8deadSopenharmony_ci    - Since no pixel data are provided, the <format> and <type> values
2055bd8deadSopenharmony_ci      used in the pseudo-code are irrelevant; they can be considered to
2065bd8deadSopenharmony_ci      be any values that are legal to use with <internalformat>.
2075bd8deadSopenharmony_ci    - If the command is successful, TEXTURE_IMMUTABLE_FORMAT_EXT becomes
2085bd8deadSopenharmony_ci      TRUE.
2095bd8deadSopenharmony_ci    - If <internalformat> is a specific compressed texture format, then
2105bd8deadSopenharmony_ci      references to TexImage* should be replaced by CompressedTexImage*,
2115bd8deadSopenharmony_ci      with <format>, <type> and <data> replaced by any valid <imageSize> and
2125bd8deadSopenharmony_ci      <data>. If there is no <imageSize> for which this command would have
2135bd8deadSopenharmony_ci      been valid, an INVALID_OPERATION error is generated [fn: This
2145bd8deadSopenharmony_ci      condition is not required for OpenGL, but is necessary for OpenGL
2155bd8deadSopenharmony_ci      ES which does not support on-the-fly compression.]
2165bd8deadSopenharmony_ci    - If <internalformat> is one of the internal formats listed in table
2175bd8deadSopenharmony_ci      3.11, an INVALID_ENUM error is generated. [fn: The corresponding table
2185bd8deadSopenharmony_ci      in OpenGL ES 2.0 is table 3.8.]
2195bd8deadSopenharmony_ci
2205bd8deadSopenharmony_ci    The command
2215bd8deadSopenharmony_ci
2225bd8deadSopenharmony_ci        void TexStorage1DEXT(enum target, sizei levels,
2235bd8deadSopenharmony_ci                             enum internalformat,
2245bd8deadSopenharmony_ci                             sizei width);
2255bd8deadSopenharmony_ci
2265bd8deadSopenharmony_ci    specifies all the levels of a one-dimensional texture (or proxy) at
2275bd8deadSopenharmony_ci    the same time. It is described by the pseudo-code below:
2285bd8deadSopenharmony_ci
2295bd8deadSopenharmony_ci        for (i = 0; i < levels; i++)
2305bd8deadSopenharmony_ci        {
2315bd8deadSopenharmony_ci            TexImage1D(target, i, internalformat, width, 0,
2325bd8deadSopenharmony_ci                       format, type, NULL);
2335bd8deadSopenharmony_ci            width = max(1, floor(width / 2));
2345bd8deadSopenharmony_ci        }
2355bd8deadSopenharmony_ci
2365bd8deadSopenharmony_ci    If <target> is not TEXTURE_1D or PROXY_TEXTURE_1D then INVALID_ENUM
2375bd8deadSopenharmony_ci    is generated. If <levels> is greater than floor(log_2(width)) + 1
2385bd8deadSopenharmony_ci    then INVALID_OPERATION is generated.
2395bd8deadSopenharmony_ci
2405bd8deadSopenharmony_ci    The command
2415bd8deadSopenharmony_ci
2425bd8deadSopenharmony_ci        void TexStorage2DEXT(enum target, sizei levels,
2435bd8deadSopenharmony_ci                             enum internalformat,
2445bd8deadSopenharmony_ci                             sizei width, sizei height);
2455bd8deadSopenharmony_ci
2465bd8deadSopenharmony_ci    specifies all the levels of a two-dimensional, cube-map,
2475bd8deadSopenharmony_ci    one-dimension array or rectangle texture (or proxy) at the same
2485bd8deadSopenharmony_ci    time. The pseudo-code depends on the <target>:
2495bd8deadSopenharmony_ci
2505bd8deadSopenharmony_ci    [PROXY_]TEXTURE_2D, [PROXY_]TEXTURE_RECTANGLE or
2515bd8deadSopenharmony_ci    PROXY_TEXTURE_CUBE_MAP:
2525bd8deadSopenharmony_ci
2535bd8deadSopenharmony_ci        for (i = 0; i < levels; i++)
2545bd8deadSopenharmony_ci        {
2555bd8deadSopenharmony_ci            TexImage2D(target, i, internalformat, width, height, 0,
2565bd8deadSopenharmony_ci                       format, type, NULL);
2575bd8deadSopenharmony_ci            width = max(1, floor(width / 2));
2585bd8deadSopenharmony_ci            height = max(1, floor(height / 2));
2595bd8deadSopenharmony_ci        }
2605bd8deadSopenharmony_ci
2615bd8deadSopenharmony_ci    TEXTURE_CUBE_MAP:
2625bd8deadSopenharmony_ci
2635bd8deadSopenharmony_ci        for (i = 0; i < levels; i++)
2645bd8deadSopenharmony_ci        {
2655bd8deadSopenharmony_ci            for face in (+X, -X, +Y, -Y, +Z, -Z)
2665bd8deadSopenharmony_ci            {
2675bd8deadSopenharmony_ci                TexImage2D(face, i, internalformat, width, height, 0,
2685bd8deadSopenharmony_ci                           format, type, NULL);
2695bd8deadSopenharmony_ci            }
2705bd8deadSopenharmony_ci            width = max(1, floor(width / 2));
2715bd8deadSopenharmony_ci            height = max(1, floor(height / 2));
2725bd8deadSopenharmony_ci        }
2735bd8deadSopenharmony_ci
2745bd8deadSopenharmony_ci    [PROXY_]TEXTURE_1D_ARRAY:
2755bd8deadSopenharmony_ci
2765bd8deadSopenharmony_ci        for (i = 0; i < levels; i++)
2775bd8deadSopenharmony_ci        {
2785bd8deadSopenharmony_ci            TexImage2D(target, i, internalformat, width, height, 0,
2795bd8deadSopenharmony_ci                       format, type, NULL);
2805bd8deadSopenharmony_ci            width = max(1, floor(width / 2));
2815bd8deadSopenharmony_ci        }
2825bd8deadSopenharmony_ci
2835bd8deadSopenharmony_ci    If <target> is not one of those listed above, the error INVALID_ENUM
2845bd8deadSopenharmony_ci    is generated.
2855bd8deadSopenharmony_ci
2865bd8deadSopenharmony_ci    The error INVALID_OPERATION is generated if any of the following
2875bd8deadSopenharmony_ci    conditions hold:
2885bd8deadSopenharmony_ci    - <target> is [PROXY_]TEXTURE_1D_ARRAY and <levels> is greater than
2895bd8deadSopenharmony_ci      floor(log_2(width)) + 1
2905bd8deadSopenharmony_ci    - <target> is not [PROXY_]TEXTURE_1D_ARRAY and <levels> is greater
2915bd8deadSopenharmony_ci    than floor(log_2(max(width, height))) + 1
2925bd8deadSopenharmony_ci
2935bd8deadSopenharmony_ci    The command
2945bd8deadSopenharmony_ci
2955bd8deadSopenharmony_ci        void TexStorage3DEXT(enum target, sizei levels, enum internalformat,
2965bd8deadSopenharmony_ci                             sizei width, sizei height, sizei depth);
2975bd8deadSopenharmony_ci
2985bd8deadSopenharmony_ci    specifies all the levels of a three-dimensional, two-dimensional
2995bd8deadSopenharmony_ci    array texture, or cube-map array texture (or proxy). The pseudo-code
3005bd8deadSopenharmony_ci    depends on <target>:
3015bd8deadSopenharmony_ci
3025bd8deadSopenharmony_ci    [PROXY_]TEXTURE_3D:
3035bd8deadSopenharmony_ci
3045bd8deadSopenharmony_ci        for (i = 0; i < levels; i++)
3055bd8deadSopenharmony_ci        {
3065bd8deadSopenharmony_ci            TexImage3D(target, i, internalformat, width, height, depth, 0,
3075bd8deadSopenharmony_ci                       format, type, NULL);
3085bd8deadSopenharmony_ci            width = max(1, floor(width / 2));
3095bd8deadSopenharmony_ci            height = max(1, floor(height / 2));
3105bd8deadSopenharmony_ci            depth = max(1, floor(depth / 2));
3115bd8deadSopenharmony_ci        }
3125bd8deadSopenharmony_ci
3135bd8deadSopenharmony_ci    [PROXY_]TEXTURE_2D_ARRAY, [PROXY_]TEXTURE_CUBE_MAP_ARRAY_ARB:
3145bd8deadSopenharmony_ci
3155bd8deadSopenharmony_ci        for (i = 0; i < levels; i++)
3165bd8deadSopenharmony_ci        {
3175bd8deadSopenharmony_ci            TexImage3D(target, i, internalformat, width, height, depth, 0,
3185bd8deadSopenharmony_ci                       format, type, NULL);
3195bd8deadSopenharmony_ci            width = max(1, floor(width / 2));
3205bd8deadSopenharmony_ci            height = max(1, floor(height / 2));
3215bd8deadSopenharmony_ci        }
3225bd8deadSopenharmony_ci
3235bd8deadSopenharmony_ci    If <target> is not one of those listed above, the error INVALID_ENUM
3245bd8deadSopenharmony_ci    is generated.
3255bd8deadSopenharmony_ci
3265bd8deadSopenharmony_ci    The error INVALID_OPERATION is generated if any of the following
3275bd8deadSopenharmony_ci    conditions hold:
3285bd8deadSopenharmony_ci    - <target> is [PROXY_]TEXTURE_3D and <levels> is greater than
3295bd8deadSopenharmony_ci      floor(log_2(max(width, height, depth))) + 1
3305bd8deadSopenharmony_ci    - <target> is [PROXY_]TEXTURE_2D_ARRAY or
3315bd8deadSopenharmony_ci      [PROXY_]TEXTURE_CUBE_MAP_ARRAY_EXT and <levels> is greater than
3325bd8deadSopenharmony_ci      floor(log_2(max(width, height))) + 1
3335bd8deadSopenharmony_ci
3345bd8deadSopenharmony_ci    After a successful call to any TexStorage* command with a non-proxy
3355bd8deadSopenharmony_ci    target, the value of TEXTURE_IMMUTABLE_FORMAT_EXT for this texture
3365bd8deadSopenharmony_ci    object is set to TRUE, and no further changes to the dimensions or
3375bd8deadSopenharmony_ci    format of the texture object may be made. Other commands may only
3385bd8deadSopenharmony_ci    alter the texel values and texture parameters. Using any of the
3395bd8deadSopenharmony_ci    following commands with the same texture will result in the error
3405bd8deadSopenharmony_ci    INVALID_OPERATION being generated, even if it does not affect the
3415bd8deadSopenharmony_ci    dimensions or format:
3425bd8deadSopenharmony_ci
3435bd8deadSopenharmony_ci        - TexImage*
3445bd8deadSopenharmony_ci        - CompressedTexImage*
3455bd8deadSopenharmony_ci        - CopyTexImage*
3465bd8deadSopenharmony_ci        - TexStorage*
3475bd8deadSopenharmony_ci
3485bd8deadSopenharmony_ci    The TextureStorage* commands operate identically to the
3495bd8deadSopenharmony_ci    corresponding command where "Texture" is substituted for "Tex"
3505bd8deadSopenharmony_ci    except, rather than updating the current bound texture for the
3515bd8deadSopenharmony_ci    texture unit indicated by the current active texture state and the
3525bd8deadSopenharmony_ci    target parameter, these "Texture" commands update the texture object
3535bd8deadSopenharmony_ci    named by the initial texture parameter. The error INVALID_VALUE
3545bd8deadSopenharmony_ci    is generated if <texture> is zero.
3555bd8deadSopenharmony_ci    "
3565bd8deadSopenharmony_ci
3575bd8deadSopenharmony_ci    In section 3.8.6 (Texture Parameters), after the sentence
3585bd8deadSopenharmony_ci
3595bd8deadSopenharmony_ci    "In the remainder of section 3.8, denote by lod_min, lod_max,
3605bd8deadSopenharmony_ci    level_base, and level_max the values of the texture parameters
3615bd8deadSopenharmony_ci    TEXTURE_MIN_LOD, TEXTURE_MAX_LOD, TEXTURE_BASE_LEVEL, and
3625bd8deadSopenharmony_ci    TEXTURE_MAX_LEVEL respectively."
3635bd8deadSopenharmony_ci
3645bd8deadSopenharmony_ci    add
3655bd8deadSopenharmony_ci
3665bd8deadSopenharmony_ci    "However, if TEXTURE_IMMUTABLE_FORMAT_EXT is
3675bd8deadSopenharmony_ci    TRUE, then level_base is clamped to the range [0, <levels> - 1] and
3685bd8deadSopenharmony_ci    level_max is then clamped to the range [level_base, <levels> - 1],
3695bd8deadSopenharmony_ci    where <levels> is the parameter passed the call to TexStorage* for
3705bd8deadSopenharmony_ci    the texture object.
3715bd8deadSopenharmony_ci
3725bd8deadSopenharmony_ci    In section 3.8.9 (Rendering feedback loops) replace all references
3735bd8deadSopenharmony_ci    to TEXTURE_BASE_LEVEL by level_base.
3745bd8deadSopenharmony_ci
3755bd8deadSopenharmony_ci    In section 3.8.9 (Mipmapping), replace the paragraph starting "Each
3765bd8deadSopenharmony_ci    array in a mipmap is defined..." by
3775bd8deadSopenharmony_ci
3785bd8deadSopenharmony_ci    "Each array in a mipmap is defined using TexImage3D, TexImage2D,
3795bd8deadSopenharmony_ci    CopyTexImage2D, TexImage1D, CopyTexImage1D, or by functions that are
3805bd8deadSopenharmony_ci    defined in terms of these functions. Level-of-detail numbers proceed
3815bd8deadSopenharmony_ci    from level_base for the original texel array through the maximum
3825bd8deadSopenharmony_ci    level p, with each unit increase indicating an array of half the
3835bd8deadSopenharmony_ci    dimensions of the previous one (rounded down to the next integer if
3845bd8deadSopenharmony_ci    fractional) as already described. For immutable-format textures,
3855bd8deadSopenharmony_ci    p is one less than the <levels> parameter passed to TexStorage*;
3865bd8deadSopenharmony_ci    otherwise p = floor(log_2(maxsize)) + level_base.  All arrays from
3875bd8deadSopenharmony_ci    level_base through q = min(p, level_max) must be defined, as
3885bd8deadSopenharmony_ci    discussed in section 3.8.12."
3895bd8deadSopenharmony_ci
3905bd8deadSopenharmony_ci    In section 3.8.12 (Texture Completeness), modify the last sentence
3915bd8deadSopenharmony_ci    to avoid refering to level_base and level_max:
3925bd8deadSopenharmony_ci
3935bd8deadSopenharmony_ci    "An implementation may allow a texture image array of level 1 or
3945bd8deadSopenharmony_ci    greater to be created only if a mipmap complete set of image arrays
3955bd8deadSopenharmony_ci    consistent with the requested array can be supported where the
3965bd8deadSopenharmony_ci    values of TEXTURE_BASE_LEVEL and TEXTURE_MAX_LEVEL are 0 and 1000
3975bd8deadSopenharmony_ci    respectively."
3985bd8deadSopenharmony_ci
3995bd8deadSopenharmony_ci    Modify section 3.8.13 (Texture State and Proxy State) to add the new
4005bd8deadSopenharmony_ci    state:
4015bd8deadSopenharmony_ci
4025bd8deadSopenharmony_ci    "Each set consists of ..., and a boolean flag indicating whether the
4035bd8deadSopenharmony_ci    format and dimensions of the texture are immutable."
4045bd8deadSopenharmony_ci
4055bd8deadSopenharmony_ci    Add
4065bd8deadSopenharmony_ci    "The initial value of TEXTURE_IMMUTABLE_FORMAT_EXT is FALSE."
4075bd8deadSopenharmony_ci
4085bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 3.2 Core Profile Specification
4095bd8deadSopenharmony_ci(Per-Fragment Operations and the Frame Buffer)
4105bd8deadSopenharmony_ci
4115bd8deadSopenharmony_ci    None
4125bd8deadSopenharmony_ci
4135bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 3.2 Compatibility Profile Specification
4145bd8deadSopenharmony_ci(Special Functions)
4155bd8deadSopenharmony_ci
4165bd8deadSopenharmony_ci    In section 5.4.1 (Commands Not Usable in Display Lists), add
4175bd8deadSopenharmony_ci    TexStorage* to the list of commands that cannot be used.
4185bd8deadSopenharmony_ci
4195bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 3.2 Core Profile Specification
4205bd8deadSopenharmony_ci(State and State Requests)
4215bd8deadSopenharmony_ci
4225bd8deadSopenharmony_ci    Replace the following statement in 6.1.3 (Enumerated Queries):
4235bd8deadSopenharmony_ci
4245bd8deadSopenharmony_ci    "<value> must be one of the symbolic values in table 3.10."
4255bd8deadSopenharmony_ci
4265bd8deadSopenharmony_ci    with
4275bd8deadSopenharmony_ci
4285bd8deadSopenharmony_ci    "<value> must be TEXTURE_IMMUTABLE_FORMAT_EXT or one of the symbolic
4295bd8deadSopenharmony_ci    values in table 3.22."
4305bd8deadSopenharmony_ci
4315bd8deadSopenharmony_ciAdditions to the AGL/EGL/GLX/WGL Specifications
4325bd8deadSopenharmony_ci
4335bd8deadSopenharmony_ci    None
4345bd8deadSopenharmony_ci
4355bd8deadSopenharmony_ciAdditions to OES_compressed_ETC1_RGB8_texture
4365bd8deadSopenharmony_ci
4375bd8deadSopenharmony_ci    Add the following to the additions to Chapter 3:
4385bd8deadSopenharmony_ci
4395bd8deadSopenharmony_ci    "Since ETC1 images are easily edited along 4x4 texel boundaries, the
4405bd8deadSopenharmony_ci    limitations on CompressedTexSubImage2D are relaxed.
4415bd8deadSopenharmony_ci    CompressedTexSubImage2D will result in an INVALID_OPERATION error
4425bd8deadSopenharmony_ci    only if one of the following conditions occurs:
4435bd8deadSopenharmony_ci
4445bd8deadSopenharmony_ci        * <width> is not a multiple of four, and <width> plus <xoffset> is not
4455bd8deadSopenharmony_ci          equal to the texture width;
4465bd8deadSopenharmony_ci
4475bd8deadSopenharmony_ci        * <height> is not a multiple of four, and <height> plus <yoffset> is
4485bd8deadSopenharmony_ci          not equal to the texture height; or
4495bd8deadSopenharmony_ci
4505bd8deadSopenharmony_ci        * <xoffset> or <yoffset> is not a multiple of four.
4515bd8deadSopenharmony_ci
4525bd8deadSopenharmony_ci    Remove CompressedTexSubImage2D from this error:
4535bd8deadSopenharmony_ci
4545bd8deadSopenharmony_ci    "INVALID_OPERATION is generated by CompressedTexSubImage2D,
4555bd8deadSopenharmony_ci    TexSubImage2D, or CopyTexSubImage2D if the texture image <level>
4565bd8deadSopenharmony_ci    bound to <target> has internal format ETC1_RGB8_OES."
4575bd8deadSopenharmony_ci
4585bd8deadSopenharmony_ci    Add the following error:
4595bd8deadSopenharmony_ci
4605bd8deadSopenharmony_ci    "INVALID_OPERATION is generated by CompressedTexSubImage2D
4615bd8deadSopenharmony_ci    if the region to be modified is not aligned to block boundaries
4625bd8deadSopenharmony_ci    (refer to the extension text for details)."
4635bd8deadSopenharmony_ci
4645bd8deadSopenharmony_ciAdditions to AMD_compressed_ATC_texture and AMD_compressed_3DC_texture:
4655bd8deadSopenharmony_ci
4665bd8deadSopenharmony_ci    Apply the same changes as for OES_compressed_ETC1_RGB8_texture
4675bd8deadSopenharmony_ci    above, substituting the appropriate internal format tokens from
4685bd8deadSopenharmony_ci    these extensions.
4695bd8deadSopenharmony_ci
4705bd8deadSopenharmony_ciDependencies on EXT_direct_state_access
4715bd8deadSopenharmony_ci
4725bd8deadSopenharmony_ci    If EXT_direct_state_access is not present, references to
4735bd8deadSopenharmony_ci    TextureStorage* should be ignored.
4745bd8deadSopenharmony_ci
4755bd8deadSopenharmony_ciDependencies on OpenGL ES
4765bd8deadSopenharmony_ci
4775bd8deadSopenharmony_ci    On OpenGL ES without extensions introducing TEXTURE_MAX_LEVEL,
4785bd8deadSopenharmony_ci    mipmapped textures specified with TexStorage are required to have a
4795bd8deadSopenharmony_ci    full set of mipmaps. If TEXTURE_MAX_LEVEL is not supported, this
4805bd8deadSopenharmony_ci    extension is modified as follows:
4815bd8deadSopenharmony_ci
4825bd8deadSopenharmony_ci    - Where an upper bound is placed on <levels> in this extension (i.e.
4835bd8deadSopenharmony_ci      the maximum number of mipmap levels for a texture of the given
4845bd8deadSopenharmony_ci      target and dimensions), an INVALID_OPERATION error is generated if
4855bd8deadSopenharmony_ci      <levels> is neither 1 nor this upper bound.
4865bd8deadSopenharmony_ci    - q (the effective maximum number of levels) is redefined to clamp
4875bd8deadSopenharmony_ci      to the number of levels present in immutable-format textures.
4885bd8deadSopenharmony_ci
4895bd8deadSopenharmony_ci    OpenGL ES does not accept sized internal formats (e.g., RGBA8) and
4905bd8deadSopenharmony_ci    instead derives an internal format from the <format> and <type>
4915bd8deadSopenharmony_ci    parameters of TexImage2D. Since TexStorage* does not specify texel
4925bd8deadSopenharmony_ci    data, the API doesn't include <format> and <type> parameters.
4935bd8deadSopenharmony_ci    On an OpenGL ES implementation, the values in the <internalformat>
4945bd8deadSopenharmony_ci    column in the tables below are accepted as <internalformat>
4955bd8deadSopenharmony_ci    parameters, and base internal formats are not accepted. The
4965bd8deadSopenharmony_ci    TexImage* calls in the TexStorage* pseudocode are modified so that
4975bd8deadSopenharmony_ci    the <internalformat>, <format> and <type> parameters are
4985bd8deadSopenharmony_ci    taken from the <format>, <format> and <type> columns (respectively)
4995bd8deadSopenharmony_ci    in the tables below, according to the <internalformat>
5005bd8deadSopenharmony_ci    specified in the TexStorage* command.
5015bd8deadSopenharmony_ci
5025bd8deadSopenharmony_ci        <internalformat>       <format>           <type>
5035bd8deadSopenharmony_ci        ----------------       --------           ------
5045bd8deadSopenharmony_ci        RGB565                 RGB                UNSIGNED_SHORT_5_6_5
5055bd8deadSopenharmony_ci        RGBA4                  RGBA               UNSIGNED_SHORT_4_4_4_4
5065bd8deadSopenharmony_ci        RGB5_A1                RGBA               UNSIGNED_SHORT_5_5_5_1
5075bd8deadSopenharmony_ci        RGB8_OES               RGB                UNSIGNED_BYTE
5085bd8deadSopenharmony_ci        RGBA8_OES              RGBA               UNSIGNED_BYTE
5095bd8deadSopenharmony_ci        LUMINANCE8_ALPHA8_EXT  LUMINANCE_ALPHA    UNSIGNED_BYTE
5105bd8deadSopenharmony_ci        LUMINANCE8_EXT         LUMINANCE          UNSIGNED_BYTE
5115bd8deadSopenharmony_ci        ALPHA8_EXT             ALPHA              UNSIGNED_BYTE
5125bd8deadSopenharmony_ci
5135bd8deadSopenharmony_ci    If OES_depth_texture is supported:
5145bd8deadSopenharmony_ci
5155bd8deadSopenharmony_ci        <internalformat>       <format>           <type>
5165bd8deadSopenharmony_ci        ----------------       --------           ------
5175bd8deadSopenharmony_ci        DEPTH_COMPONENT16_OES  DEPTH_COMPONENT    UNSIGNED_SHORT
5185bd8deadSopenharmony_ci        DEPTH_COMPONENT32_OES  DEPTH_COMPONENT    UNSIGNED_INT
5195bd8deadSopenharmony_ci
5205bd8deadSopenharmony_ci    If OES_packed_depth_stencil is supported:
5215bd8deadSopenharmony_ci
5225bd8deadSopenharmony_ci        <internalformat>       <format>           <type>
5235bd8deadSopenharmony_ci        ----------------       --------           ------
5245bd8deadSopenharmony_ci        DEPTH24_STENCIL8_OES   DEPTH_STENCIL_OES  UNSIGNED_INT
5255bd8deadSopenharmony_ci
5265bd8deadSopenharmony_ci    If OES_texture_float is supported:
5275bd8deadSopenharmony_ci
5285bd8deadSopenharmony_ci        <internalformat>       <format>           <type>
5295bd8deadSopenharmony_ci        ----------------       --------           ------
5305bd8deadSopenharmony_ci        RGBA32F_EXT            RGBA               FLOAT
5315bd8deadSopenharmony_ci        RGB32F_EXT             RGB                FLOAT
5325bd8deadSopenharmony_ci        LUMINANCE_ALPHA32F_EXT LUMINANCE_ALPHA    FLOAT
5335bd8deadSopenharmony_ci        LUMINANCE32F_EXT       LUMINANCE          FLOAT 
5345bd8deadSopenharmony_ci        ALPHA32F_EXT           ALPHA              FLOAT
5355bd8deadSopenharmony_ci
5365bd8deadSopenharmony_ci    If OES_texture_half_float is supported:
5375bd8deadSopenharmony_ci
5385bd8deadSopenharmony_ci        <internalformat>       <format>           <type>
5395bd8deadSopenharmony_ci        ----------------       --------           ------
5405bd8deadSopenharmony_ci        RGBA16F_EXT            RGBA               HALF_FLOAT_OES
5415bd8deadSopenharmony_ci        RGB16F_EXT             RGB                HALF_FLOAT_OES
5425bd8deadSopenharmony_ci        LUMINANCE_ALPHA16F_EXT LUMINANCE_ALPHA    HALF_FLOAT_OES
5435bd8deadSopenharmony_ci        LUMINANCE16F_EXT       LUMINANCE          HALF_FLOAT_OES 
5445bd8deadSopenharmony_ci        ALPHA16F_EXT           ALPHA              HALF_FLOAT_OES
5455bd8deadSopenharmony_ci
5465bd8deadSopenharmony_ci    If EXT_texture_type_2_10_10_10_REV is supported:
5475bd8deadSopenharmony_ci
5485bd8deadSopenharmony_ci        <internalformat>    <format>   <type>
5495bd8deadSopenharmony_ci        ----------------    --------   ------
5505bd8deadSopenharmony_ci        RGB10_A2_EXT        RGBA       UNSIGNED_INT_2_10_10_10_REV_EXT
5515bd8deadSopenharmony_ci        RGB10_EXT           RGB        UNSIGNED_INT_2_10_10_10_REV_EXT
5525bd8deadSopenharmony_ci
5535bd8deadSopenharmony_ci    If EXT_texture_format_BGRA8888 or APPLE_texture_format_BGRA8888 is supported:
5545bd8deadSopenharmony_ci
5555bd8deadSopenharmony_ci        <internalformat>    <format>   <type>
5565bd8deadSopenharmony_ci        ----------------    --------   ------
5575bd8deadSopenharmony_ci        BGRA8_EXT           BGRA_EXT   UNSIGNED_BYTE
5585bd8deadSopenharmony_ci
5595bd8deadSopenharmony_ci    If EXT_texture_rg is supported:
5605bd8deadSopenharmony_ci
5615bd8deadSopenharmony_ci        <internalformat>    <format>   <type>
5625bd8deadSopenharmony_ci        ----------------    --------   ------
5635bd8deadSopenharmony_ci        R8_EXT              RED_EXT    UNSIGNED_BYTE
5645bd8deadSopenharmony_ci        RG8_EXT             RG_EXT     UNSIGNED_BYTE
5655bd8deadSopenharmony_ci
5665bd8deadSopenharmony_ci    If EXT_texture_rg and OES_texture_float are supported:
5675bd8deadSopenharmony_ci
5685bd8deadSopenharmony_ci        <internalformat>    <format>   <type>
5695bd8deadSopenharmony_ci        ----------------    --------   ------
5705bd8deadSopenharmony_ci        R32F_EXT            RED_EXT    FLOAT
5715bd8deadSopenharmony_ci        RG32F_EXT           RG_EXT     FLOAT
5725bd8deadSopenharmony_ci
5735bd8deadSopenharmony_ci    If EXT_texture_rg and OES_texture_half_float are supported:
5745bd8deadSopenharmony_ci
5755bd8deadSopenharmony_ci        <internalformat>    <format>   <type>
5765bd8deadSopenharmony_ci        ----------------    --------   ------
5775bd8deadSopenharmony_ci        R16F_EXT            RED_EXT    HALF_FLOAT_OES
5785bd8deadSopenharmony_ci        RG16F_EXT           RG_EXT     HALF_FLOAT_OES
5795bd8deadSopenharmony_ci
5805bd8deadSopenharmony_ci    If APPLE_rgb_422 is supported:
5815bd8deadSopenharmony_ci
5825bd8deadSopenharmony_ci        <internalformat>    <format>       <type>
5835bd8deadSopenharmony_ci        ----------------    --------       ------
5845bd8deadSopenharmony_ci        RGB_RAW_422_APPLE   RGB_422_APPLE  UNSIGNED_SHORT_8_8_APPLE
5855bd8deadSopenharmony_ci
5865bd8deadSopenharmony_ci
5875bd8deadSopenharmony_ciDependencies on texture targets
5885bd8deadSopenharmony_ci
5895bd8deadSopenharmony_ci    If a particular texture target is not supported by the
5905bd8deadSopenharmony_ci    implementation, passing it as a <target> to TexStorage* will
5915bd8deadSopenharmony_ci    generate an INVALID_ENUM error. If as a result, any of the commands
5925bd8deadSopenharmony_ci    defined in this extension would no longer have any valid <target>,
5935bd8deadSopenharmony_ci    all references to the command should be ignored.
5945bd8deadSopenharmony_ci
5955bd8deadSopenharmony_ci    In particular, note that OpenGL ES 1.x/2.0 do not have proxy textures,
5965bd8deadSopenharmony_ci    1D textures, or 3D textures, and thus only the TexStorage2DEXT
5975bd8deadSopenharmony_ci    entry point is required. If OES_texture_3D is supported, the
5985bd8deadSopenharmony_ci    TexStorage3DEXT entry point is also required.
5995bd8deadSopenharmony_ci
6005bd8deadSopenharmony_ciDependencies on OES_texture_npot
6015bd8deadSopenharmony_ci
6025bd8deadSopenharmony_ci    If OpenGL ES 2.0 or APPLE_texture_2D_limited_npot is present but
6035bd8deadSopenharmony_ci    OES_texture_npot is not present, then INVALID_OPERATION is
6045bd8deadSopenharmony_ci    generated by TexStorage* and TexStorage3DEXT if <levels> is
6055bd8deadSopenharmony_ci    not one and <width>, <height> or <depth> is not a power of
6065bd8deadSopenharmony_ci    two.
6075bd8deadSopenharmony_ci
6085bd8deadSopenharmony_ciDependencies on WGL_ARB_render_texture, GLX_EXT_texture_from_pixmap, EGL
6095bd8deadSopenharmony_ci1.4 and GL_OES_EGL_image
6105bd8deadSopenharmony_ci
6115bd8deadSopenharmony_ci    The commands eglBindTexImage, wglBindTexImageARB, glXBindTexImageEXT or
6125bd8deadSopenharmony_ci    EGLImageTargetTexture2DOES are not permitted on an immutable-format
6135bd8deadSopenharmony_ci    texture.
6145bd8deadSopenharmony_ci    They will generate the following errors:
6155bd8deadSopenharmony_ci      - EGLImageTargetTexture2DOES: INVALID_OPERATION
6165bd8deadSopenharmony_ci      - eglBindTexImage: EGL_BAD_MATCH
6175bd8deadSopenharmony_ci      - wglBindTexImage: ERROR_INVALID_OPERATION
6185bd8deadSopenharmony_ci      - glXBindTexImageEXT: BadMatch
6195bd8deadSopenharmony_ci
6205bd8deadSopenharmony_ciDependencies on OES_compressed_paletted_texture
6215bd8deadSopenharmony_ci
6225bd8deadSopenharmony_ci    The compressed texture formats exposed by
6235bd8deadSopenharmony_ci    OES_compressed_paletted_texture are not supported by TexStorage*.
6245bd8deadSopenharmony_ci    Passing one of these tokens to TexStorage* will generate an
6255bd8deadSopenharmony_ci    INVALID_ENUM error.
6265bd8deadSopenharmony_ci
6275bd8deadSopenharmony_ciDependencies on APPLE_rgb_422
6285bd8deadSopenharmony_ci
6295bd8deadSopenharmony_ci    UNSIGNED_SHORT_8_8_APPLE is implied as the <type> when TexStorage2DEXT
6305bd8deadSopenharmony_ci    is called with <internalformat> RGB_RAW_422_APPLE.  Subsequently supplying 
6315bd8deadSopenharmony_ci    UNSIGNED_SHORT_8_8_REV_APPLE as the <type> to a TexSubImage2D updating
6325bd8deadSopenharmony_ci    such an immutable texture will generate an INVALID_OPERATION error.
6335bd8deadSopenharmony_ci
6345bd8deadSopenharmony_ciErrors
6355bd8deadSopenharmony_ci
6365bd8deadSopenharmony_ci    Note that dependencies above modify the errors.
6375bd8deadSopenharmony_ci
6385bd8deadSopenharmony_ci    If TexStorage* is called with a <width>, <height>, <depth> or
6395bd8deadSopenharmony_ci    <levels> parameter that is less than one, then the error
6405bd8deadSopenharmony_ci    INVALID_VALUE is generated.
6415bd8deadSopenharmony_ci
6425bd8deadSopenharmony_ci    If the <target> parameter to TexStorage1DEXT is not
6435bd8deadSopenharmony_ci    [PROXY_]TEXTURE_1D, then the error INVALID_ENUM is generated.
6445bd8deadSopenharmony_ci
6455bd8deadSopenharmony_ci    If the <target> parameter to TexStorage2DEXT is not
6465bd8deadSopenharmony_ci    [PROXY_]TEXTURE_2D, [PROXY_]TEXTURE_CUBE_MAP,
6475bd8deadSopenharmony_ci    [PROXY_]TEXTURE_RECTANGLE or [PROXY_]TEXTURE_1D_ARRAY, then the
6485bd8deadSopenharmony_ci    error INVALID_ENUM is generated.
6495bd8deadSopenharmony_ci
6505bd8deadSopenharmony_ci    If the <target> parameter to TexStorage3DEXT is not
6515bd8deadSopenharmony_ci    [PROXY_]TEXTURE_3D, [PROXY_]TEXTURE_2D_ARRAY or
6525bd8deadSopenharmony_ci    [PROXY_]TEXTURE_CUBE_MAP_ARRAY then the error INVALID_ENUM is
6535bd8deadSopenharmony_ci    generated.
6545bd8deadSopenharmony_ci
6555bd8deadSopenharmony_ci    If the <levels> parameter to TexStorage* is greater than the
6565bd8deadSopenharmony_ci    <target>-specific value listed below then the error
6575bd8deadSopenharmony_ci    INVALID_OPERATION is generated:
6585bd8deadSopenharmony_ci        [PROXY_]TEXTURE_{1D,1D_ARRAY}:
6595bd8deadSopenharmony_ci            floor(log_2(width)) + 1
6605bd8deadSopenharmony_ci        [PROXY_]TEXTURE_{2D,2D_ARRAY,CUBE_MAP,CUBE_MAP_ARRAY}:
6615bd8deadSopenharmony_ci            floor(log_2(max(width, height))) + 1
6625bd8deadSopenharmony_ci        [PROXY_]TEXTURE_3D:
6635bd8deadSopenharmony_ci            floor(log_2(max(width, height, depth))) + 1
6645bd8deadSopenharmony_ci        [PROXY_]TEXTURE_RECTANGLE:
6655bd8deadSopenharmony_ci            1
6665bd8deadSopenharmony_ci
6675bd8deadSopenharmony_ci    If the default texture object is bound to the <target> passed to
6685bd8deadSopenharmony_ci    TexStorage*, then the error INVALID_OPERATION is generated.
6695bd8deadSopenharmony_ci
6705bd8deadSopenharmony_ci    If the <target> parameter to TextureStorage* does not match the
6715bd8deadSopenharmony_ci    dimensionality of <texture>, then the error INVALID_OPERATION is
6725bd8deadSopenharmony_ci    generated.
6735bd8deadSopenharmony_ci
6745bd8deadSopenharmony_ci    If the <texture> parameter to TextureStorage* is zero, then the
6755bd8deadSopenharmony_ci    INVALID_VALUE is generated.
6765bd8deadSopenharmony_ci
6775bd8deadSopenharmony_ci    If any pseudo-code listed in this extension would generate an error,
6785bd8deadSopenharmony_ci    then that error is generated.
6795bd8deadSopenharmony_ci
6805bd8deadSopenharmony_ci    Calling any of the following functions on a texture for which
6815bd8deadSopenharmony_ci    TEXTURE_IMMUTABLE_FORMAT_EXT is TRUE will generate an
6825bd8deadSopenharmony_ci    INVALID_OPERATION error:
6835bd8deadSopenharmony_ci        - TexImage*
6845bd8deadSopenharmony_ci        - CompressedTexImage*
6855bd8deadSopenharmony_ci        - CopyTexImage*
6865bd8deadSopenharmony_ci
6875bd8deadSopenharmony_ciNew State
6885bd8deadSopenharmony_ci
6895bd8deadSopenharmony_ci    Additions to Table 6.8 Textures (state per texture object)
6905bd8deadSopenharmony_ci
6915bd8deadSopenharmony_ci                                                               Initial
6925bd8deadSopenharmony_ci        Get Value                      Type   Get Command      Value    Description                Sec.
6935bd8deadSopenharmony_ci        ---------                      ----   -----------      -------  -----------                ----
6945bd8deadSopenharmony_ci        TEXTURE_IMMUTABLE_FORMAT_EXT   B      GetTexParameter  FALSE    Size and format immutable  2.6
6955bd8deadSopenharmony_ci
6965bd8deadSopenharmony_ciNew Implementation Dependent State
6975bd8deadSopenharmony_ci
6985bd8deadSopenharmony_ci    None
6995bd8deadSopenharmony_ci
7005bd8deadSopenharmony_ciIssues
7015bd8deadSopenharmony_ci
7025bd8deadSopenharmony_ci    1. What should this extension be called?
7035bd8deadSopenharmony_ci
7045bd8deadSopenharmony_ci    RESOLVED: EXT_texture_storage is chosen for consistency with the
7055bd8deadSopenharmony_ci    glRenderbufferStorage entry point.
7065bd8deadSopenharmony_ci
7075bd8deadSopenharmony_ci    2. Should TexStorage* accept a border parameter?
7085bd8deadSopenharmony_ci
7095bd8deadSopenharmony_ci    RESOLVED: no.
7105bd8deadSopenharmony_ci
7115bd8deadSopenharmony_ci    DISCUSSION: Currently it does not, since borders are a deprecated
7125bd8deadSopenharmony_ci    feature which is not supported by all hardware. Users of the
7135bd8deadSopenharmony_ci    compatibility profile can continue to use the existing texture
7145bd8deadSopenharmony_ci    specification functions, but there is an argument that users of
7155bd8deadSopenharmony_ci    compatibility profile may also want to use this extension.
7165bd8deadSopenharmony_ci
7175bd8deadSopenharmony_ci    3. What is the correct error when <levels> specifies a partial
7185bd8deadSopenharmony_ci    mipmap pyramid for OpenGL ES?
7195bd8deadSopenharmony_ci
7205bd8deadSopenharmony_ci    RESOLVED: INVALID_OPERATION, since it is an interaction between
7215bd8deadSopenharmony_ci    parameters rather than a single value being invalid. It also makes
7225bd8deadSopenharmony_ci    sense to relax this condition for desktop GL where it makes sense to
7235bd8deadSopenharmony_ci    use a truncated pyramid with TEXTURE_MAX_LEVEL.
7245bd8deadSopenharmony_ci
7255bd8deadSopenharmony_ci    4. Should use of these entry-points make the metadata (format and
7265bd8deadSopenharmony_ci    dimensions) immutable?
7275bd8deadSopenharmony_ci
7285bd8deadSopenharmony_ci    RESOLVED: Yes.
7295bd8deadSopenharmony_ci
7305bd8deadSopenharmony_ci    DISCUSSION: The benefits of knowing metadata can't change will
7315bd8deadSopenharmony_ci    probably outweigh the extra cost of checking the
7325bd8deadSopenharmony_ci    TEXTURE_IMMUTABLE_FORMAT_EXT flag on each texture specification
7335bd8deadSopenharmony_ci    call.
7345bd8deadSopenharmony_ci
7355bd8deadSopenharmony_ci    5. Should it be legal to completely replace the texture using a new call
7365bd8deadSopenharmony_ci    to TexStorage*?
7375bd8deadSopenharmony_ci
7385bd8deadSopenharmony_ci    RESOLVED. It will not be allowed.
7395bd8deadSopenharmony_ci
7405bd8deadSopenharmony_ci    DISCUSSION: This is useful to invalidate all levels of a texture.
7415bd8deadSopenharmony_ci    Allowing the metadata to be changed here seems easier than trying to
7425bd8deadSopenharmony_ci    define a portable definition of what it means to change the metadata
7435bd8deadSopenharmony_ci    (e.g. what if you used an unsized internal format the first time and
7445bd8deadSopenharmony_ci    the corresponding sized internal format the second time, or vice
7455bd8deadSopenharmony_ci    versa)?
7465bd8deadSopenharmony_ci
7475bd8deadSopenharmony_ci    However, while this is largely similar to deleting the old texture
7485bd8deadSopenharmony_ci    object and replacing it with a new one, it does lose some of the
7495bd8deadSopenharmony_ci    advantages of immutability. Specifically, because doing so does not
7505bd8deadSopenharmony_ci    reset bindings, it doesn't allow a migration path to an API that
7515bd8deadSopenharmony_ci    validates the texture format at bind time.
7525bd8deadSopenharmony_ci
7535bd8deadSopenharmony_ci    6. Should it be legal to use TexImage* after TexStorage* if it doesn't
7545bd8deadSopenharmony_ci    affect the metadata?
7555bd8deadSopenharmony_ci
7565bd8deadSopenharmony_ci    RESOLVED: No.
7575bd8deadSopenharmony_ci
7585bd8deadSopenharmony_ci    DISCUSSION: A potential use case is to allow a single level of a
7595bd8deadSopenharmony_ci    texture to be invalidated using a NULL pointer. However, as noted
7605bd8deadSopenharmony_ci    above it is non-trivial to determine what constitutes a change.
7615bd8deadSopenharmony_ci
7625bd8deadSopenharmony_ci    7. How does this extension interact with APPLE_texture_2D_limited_npot?
7635bd8deadSopenharmony_ci
7645bd8deadSopenharmony_ci    RESOLVED. APPLE_texture_2D_limited_npot is equivalent to the NPOT
7655bd8deadSopenharmony_ci    support in OpenGL ES 2.0.
7665bd8deadSopenharmony_ci
7675bd8deadSopenharmony_ci    8. Should this extension be written to work with desktop OpenGL?
7685bd8deadSopenharmony_ci
7695bd8deadSopenharmony_ci    RESOLVED: Yes.
7705bd8deadSopenharmony_ci
7715bd8deadSopenharmony_ci    DISCUSSION: There has been been interest and it will future-proof it
7725bd8deadSopenharmony_ci    against further additions to OpenGL ES.
7735bd8deadSopenharmony_ci
7745bd8deadSopenharmony_ci    9. Which texture targets should be supported?
7755bd8deadSopenharmony_ci
7765bd8deadSopenharmony_ci    RESOLVED. All targets except multisample and buffer textures are
7775bd8deadSopenharmony_ci    supported.
7785bd8deadSopenharmony_ci
7795bd8deadSopenharmony_ci    Initially all targets except TEXTURE_BUFFER were supported. It was
7805bd8deadSopenharmony_ci    noted that the entrypoints for multisample targets added no useful
7815bd8deadSopenharmony_ci    functionality, since multisample textures have no completeness
7825bd8deadSopenharmony_ci    checks beyond being non-empty.
7835bd8deadSopenharmony_ci
7845bd8deadSopenharmony_ci    Rectangle textures have completeness checks to prevent filtering of
7855bd8deadSopenharmony_ci    integer textures. However, since we decided to only force mipmap
7865bd8deadSopenharmony_ci    completeness, this becomes less useful.
7875bd8deadSopenharmony_ci
7885bd8deadSopenharmony_ci    10. Should this extension support proxy textures?
7895bd8deadSopenharmony_ci
7905bd8deadSopenharmony_ci    RESOLVED: Yes.
7915bd8deadSopenharmony_ci
7925bd8deadSopenharmony_ci    DISCUSSION: It should be orthogonal.
7935bd8deadSopenharmony_ci
7945bd8deadSopenharmony_ci    11. Are the <format> and <type> parameters necessary?
7955bd8deadSopenharmony_ci
7965bd8deadSopenharmony_ci    RESOLVED. No, they will be removed.
7975bd8deadSopenharmony_ci
7985bd8deadSopenharmony_ci    DISCUSSION: For OpenGL ES the type parameter was necessary to
7995bd8deadSopenharmony_ci    determine the precision of the texture, but this can be solved by
8005bd8deadSopenharmony_ci    having these functions accept sized internal formats (which are
8015bd8deadSopenharmony_ci    already accepted by renderbuffers).
8025bd8deadSopenharmony_ci
8035bd8deadSopenharmony_ci    12. Should it be legal to make the default texture (id 0)
8045bd8deadSopenharmony_ci    immutable-format?
8055bd8deadSopenharmony_ci
8065bd8deadSopenharmony_ci    RESOLVED: No.
8075bd8deadSopenharmony_ci
8085bd8deadSopenharmony_ci    DISCUSSION: This would make it impossible to restore the context to
8095bd8deadSopenharmony_ci    it's default state, which is deemed undesirable. There is no good
8105bd8deadSopenharmony_ci    reason not to use named texture objects.
8115bd8deadSopenharmony_ci
8125bd8deadSopenharmony_ci    13. Should we try to guarantee that textures made through this path
8135bd8deadSopenharmony_ci    will always be complete?
8145bd8deadSopenharmony_ci
8155bd8deadSopenharmony_ci    RESOLVED: It should be guaranteed that the texture will be mipmap
8165bd8deadSopenharmony_ci    complete.
8175bd8deadSopenharmony_ci
8185bd8deadSopenharmony_ci    DISCUSSION: Future separation between images and samplers will still
8195bd8deadSopenharmony_ci    allow users to create combinations that are invalid, but
8205bd8deadSopenharmony_ci    constraining the simple cases will make these APIs easier to use for
8215bd8deadSopenharmony_ci    beginners.
8225bd8deadSopenharmony_ci
8235bd8deadSopenharmony_ci    14. Should these functions use a EXT_direct_state_access approach to
8245bd8deadSopenharmony_ci    specifying the texture objects?
8255bd8deadSopenharmony_ci
8265bd8deadSopenharmony_ci    UNRESOLVED.
8275bd8deadSopenharmony_ci
8285bd8deadSopenharmony_ci    DISCUSSION: as a standalone extension, no DSA-like functions will be
8295bd8deadSopenharmony_ci    added. However, interactions with EXT_direct_state_access and
8305bd8deadSopenharmony_ci    ARB_direct_state_access need to be resolved.
8315bd8deadSopenharmony_ci
8325bd8deadSopenharmony_ci    15. Should these functions accept generic compressed formats?
8335bd8deadSopenharmony_ci
8345bd8deadSopenharmony_ci    RESOLVED: Yes. Note that the spec language will need to be modified
8355bd8deadSopenharmony_ci    to allow this for ES, since the pseudocode is written in terms of
8365bd8deadSopenharmony_ci    TexImage2D, which does not allow compressed texture formats in ES.
8375bd8deadSopenharmony_ci    See also issues 23 and 27.
8385bd8deadSopenharmony_ci
8395bd8deadSopenharmony_ci    16. How should completeness be forced when TEXTURE_MAX_LEVEL is not
8405bd8deadSopenharmony_ci    present?
8415bd8deadSopenharmony_ci
8425bd8deadSopenharmony_ci    RESOLVED. The maximum level q will be redefined to clamp to the
8435bd8deadSopenharmony_ci    highest level available.
8445bd8deadSopenharmony_ci
8455bd8deadSopenharmony_ci    DISCUSSION: A single-level texture can be made complete either by
8465bd8deadSopenharmony_ci    making it mipmap complete (by setting TEXTURE_MAX_LEVEL to 0) or by
8475bd8deadSopenharmony_ci    turning off mipmapping (by choose an appropriate minification
8485bd8deadSopenharmony_ci    filter).
8495bd8deadSopenharmony_ci
8505bd8deadSopenharmony_ci    Some options:
8515bd8deadSopenharmony_ci
8525bd8deadSopenharmony_ci    A: Specify that TexStorage* changes the default minification filter
8535bd8deadSopenharmony_ci    for OpenGL ES. This makes it awkward to add TEXTURE_MAX_LEVEL
8545bd8deadSopenharmony_ci    support to OpenGL ES later, since switching to match GL would break
8555bd8deadSopenharmony_ci    compatibility. The two mechanisms also do not give identical
8565bd8deadSopenharmony_ci    results, since the magnification threshold depends on the
8575bd8deadSopenharmony_ci    minification filter.
8585bd8deadSopenharmony_ci
8595bd8deadSopenharmony_ci    B: Specify that the texture behaves as though TEXTURE_MAX_LEVEL were
8605bd8deadSopenharmony_ci    zero. To specify this properly probably requires fairly intrusive
8615bd8deadSopenharmony_ci    changes to the OpenGL ES full specification to add back all the
8625bd8deadSopenharmony_ci    language relating to the max level. It also does not solve the
8635bd8deadSopenharmony_ci    similar problem of what to do with NPOT textures; and it may have
8645bd8deadSopenharmony_ci    hardware impacts due to the change in the min/mag crossover.
8655bd8deadSopenharmony_ci
8665bd8deadSopenharmony_ci    C: Specify that TexStorage* changes the default minification filter
8675bd8deadSopenharmony_ci    for all implementations when a single-level texture is specified.
8685bd8deadSopenharmony_ci    This may be slightly counter-intuitive to desktop GL users, but will
8695bd8deadSopenharmony_ci    give consistent behaviour across variants of GL and avoids changing
8705bd8deadSopenharmony_ci    the functional behaviour of this extension based on the presence or
8715bd8deadSopenharmony_ci    absence of some other feature.
8725bd8deadSopenharmony_ci
8735bd8deadSopenharmony_ci    Currently B is specified. This has potential hardware implications
8745bd8deadSopenharmony_ci    for OpenGL ES because of the effect of the minification filter on
8755bd8deadSopenharmony_ci    the min/mag crossover. However, C has potential hardware implications
8765bd8deadSopenharmony_ci    for OpenGL due to the separation of texture and sampler state.
8775bd8deadSopenharmony_ci
8785bd8deadSopenharmony_ci    17. How should completeness be forced when only ES2-style NPOT is
8795bd8deadSopenharmony_ci    available?
8805bd8deadSopenharmony_ci
8815bd8deadSopenharmony_ci    RESOLVED. It is not worth trying to do this, in light of issue 13.
8825bd8deadSopenharmony_ci
8835bd8deadSopenharmony_ci    Previous revisions of this extension overrode the minification
8845bd8deadSopenharmony_ci    filter and wrap modes, but that is no longer the case. Since
8855bd8deadSopenharmony_ci    OES_texture_npot removes the caveats on NPOT textures anyway, it
8865bd8deadSopenharmony_ci    might not be worth trying to "fix" this.
8875bd8deadSopenharmony_ci
8885bd8deadSopenharmony_ci    18. For OpenGL ES, how do the new sized internal formats interact
8895bd8deadSopenharmony_ci    with OES_required_internal_format?
8905bd8deadSopenharmony_ci
8915bd8deadSopenharmony_ci    RESOLVED.
8925bd8deadSopenharmony_ci
8935bd8deadSopenharmony_ci    If OES_required_internal_format is not present, then the
8945bd8deadSopenharmony_ci    <internalformat> parameter is intended merely to indicate what the
8955bd8deadSopenharmony_ci    corresponding <format> and <type> would have been, had TexImage*
8965bd8deadSopenharmony_ci    been used instead. If OES_required_internal_format is present, then
8975bd8deadSopenharmony_ci    it is intended that the <internalformat> will be interpreted as if
8985bd8deadSopenharmony_ci    it had been passed directly to TexImage*.
8995bd8deadSopenharmony_ci
9005bd8deadSopenharmony_ci    19. Should there be some hinting mechanism to indicate whether data
9015bd8deadSopenharmony_ci    is coming immediately or later?
9025bd8deadSopenharmony_ci
9035bd8deadSopenharmony_ci    RESOLVED. No parameter is needed. An extension can be added to provide
9045bd8deadSopenharmony_ci    a TexParameter value which is latched at TexStorage time.
9055bd8deadSopenharmony_ci
9065bd8deadSopenharmony_ci    DISCUSSION: Some members felt that this would be useful so that they
9075bd8deadSopenharmony_ci    could defer allocation when suitable, particularly if higher-
9085bd8deadSopenharmony_ci    resolution images will be streamed in later; or to choose a memory
9095bd8deadSopenharmony_ci    type or layout appropriate to the usage. However, implementation
9105bd8deadSopenharmony_ci    experience with BufferData is that developers frequently provide
9115bd8deadSopenharmony_ci    wrong values and implementations have to guess anyway.
9125bd8deadSopenharmony_ci
9135bd8deadSopenharmony_ci    One option suggested was the <usage> parameter currently passed to
9145bd8deadSopenharmony_ci    BufferData. Another option was to set it with TexParameter.
9155bd8deadSopenharmony_ci
9165bd8deadSopenharmony_ci    20. How should this extension interact with
9175bd8deadSopenharmony_ci    EGLImageTargetTexture2DOES, eglBindTexImage, glXBindTexImage and
9185bd8deadSopenharmony_ci    wglBindTexImage?
9195bd8deadSopenharmony_ci
9205bd8deadSopenharmony_ci    RESOLVED. These functions will not be permitted after glTexStorage*.
9215bd8deadSopenharmony_ci
9225bd8deadSopenharmony_ci    Several options are possible:
9235bd8deadSopenharmony_ci
9245bd8deadSopenharmony_ci    A) Disallow these functions.
9255bd8deadSopenharmony_ci    B) Allow them, but have them reset the TEXTURE_IMMUTABLE_FORMAT_EXT
9265bd8deadSopenharmony_ci       flag.
9275bd8deadSopenharmony_ci    C) Allow them unconditionally.
9285bd8deadSopenharmony_ci
9295bd8deadSopenharmony_ci    C would violate the design principle that the dimensions and format
9305bd8deadSopenharmony_ci    of the mipmap array are immutable. B does not so much modify the
9315bd8deadSopenharmony_ci    dimension and formats as replace them with an entirely different
9325bd8deadSopenharmony_ci    set.
9335bd8deadSopenharmony_ci
9345bd8deadSopenharmony_ci    21. Should there be a single function for specifying 1D, 2D and 3D
9355bd8deadSopenharmony_ci    targets?
9365bd8deadSopenharmony_ci
9375bd8deadSopenharmony_ci    RESOLVED. No, we will stick with existing precedent.
9385bd8deadSopenharmony_ci
9395bd8deadSopenharmony_ci    22. Is it possible to use GenerateMipmap with an incomplete mipmap
9405bd8deadSopenharmony_ci    pyramid?
9415bd8deadSopenharmony_ci
9425bd8deadSopenharmony_ci    RESOLVED. Yes, because the effective max level is limited to the
9435bd8deadSopenharmony_ci    levels that were specified, and so GenerateMipmap does not generate
9445bd8deadSopenharmony_ci    any new levels.
9455bd8deadSopenharmony_ci
9465bd8deadSopenharmony_ci    However, to make automatic mipmap generation work, it is necessary
9475bd8deadSopenharmony_ci    to redefine p rather than q, since automatic mipmap generation
9485bd8deadSopenharmony_ci    ignores the max level.
9495bd8deadSopenharmony_ci
9505bd8deadSopenharmony_ci    23. How should this extension interact with
9515bd8deadSopenharmony_ci    OES_compressed_paletted_texture?
9525bd8deadSopenharmony_ci
9535bd8deadSopenharmony_ci    RESOLVED. Paletted textures will not be permitted, and will
9545bd8deadSopenharmony_ci    generate INVALID_ENUM.
9555bd8deadSopenharmony_ci
9565bd8deadSopenharmony_ci    DISCUSSION: OES_compressed_paletted_texture supplies all the mipmaps
9575bd8deadSopenharmony_ci    in a single function call, with the palette specified once. That's
9585bd8deadSopenharmony_ci    incompatible with the upload model in this extension.
9595bd8deadSopenharmony_ci
9605bd8deadSopenharmony_ci    24. How can ETC1 textures be used with this extension?
9615bd8deadSopenharmony_ci
9625bd8deadSopenharmony_ci    RESOLVED. Add language in this extension to allow subregion uploads
9635bd8deadSopenharmony_ci    for ETC1.
9645bd8deadSopenharmony_ci
9655bd8deadSopenharmony_ci    DISCUSSION: GL_OES_compressed_ETC1_RGB8_texture doesn't allow
9665bd8deadSopenharmony_ci    CompressedTexSubImage*, so it would be impossible to use this
9675bd8deadSopenharmony_ci    extension with ETC1. This is seen as an oversight in the ETC1
9685bd8deadSopenharmony_ci    extension. While it cannot be fixed in that extension (since it is
9695bd8deadSopenharmony_ci    already shipping), this extension can add that capability.
9705bd8deadSopenharmony_ci
9715bd8deadSopenharmony_ci    25. Should any other compressed formats be similarly modified?
9725bd8deadSopenharmony_ci
9735bd8deadSopenharmony_ci    RESOLVED. Yes, AMD_compressed_ATC_texture and
9745bd8deadSopenharmony_ci    AMD_compressed_3DC_texture can be modified similarly to ETC1
9755bd8deadSopenharmony_ci    (Maurice Ribble indicated that both formats use 4x4 blocks). Desktop
9765bd8deadSopenharmony_ci    OpenGL requires that whole-image replacement is supported for any
9775bd8deadSopenharmony_ci    compressed texture format, and the OpenGL ES extensions
9785bd8deadSopenharmony_ci    EXT_texture_compression_dxt1 and IMG_texture_compression_pvrtc
9795bd8deadSopenharmony_ci    already allow whole-image replacement, so it is not necessary to
9805bd8deadSopenharmony_ci    modify them to be used with this extension.
9815bd8deadSopenharmony_ci
9825bd8deadSopenharmony_ci    26. Should these commands be permitted in display lists?
9835bd8deadSopenharmony_ci
9845bd8deadSopenharmony_ci    RESOLVED. No.
9855bd8deadSopenharmony_ci
9865bd8deadSopenharmony_ci    DISCUSSION: Display lists are most useful for repeating commands,
9875bd8deadSopenharmony_ci    and TexStorage* commands cannot be repeated because the first call
9885bd8deadSopenharmony_ci    makes the format immutable.
9895bd8deadSopenharmony_ci
9905bd8deadSopenharmony_ci    27. Should these commands accept unsized internal formats?
9915bd8deadSopenharmony_ci
9925bd8deadSopenharmony_ci    RESOLVED: No, for both OpenGL and OpenGL ES.
9935bd8deadSopenharmony_ci
9945bd8deadSopenharmony_ci    DISCUSSION: normally the <type> parameter to TexImage* can serve as
9955bd8deadSopenharmony_ci    a hint to select a sized format (and in OpenGL ES, this is the only
9965bd8deadSopenharmony_ci    mechanism available); since TexStorage* does not have a <type>
9975bd8deadSopenharmony_ci    parameter, the implementation has no information on which to base a
9985bd8deadSopenharmony_ci    decision.
9995bd8deadSopenharmony_ci
10005bd8deadSopenharmony_ciRevision History
10015bd8deadSopenharmony_ci
10025bd8deadSopenharmony_ci    Revision 29, 2021/09/22 (Adam Jackson)
10035bd8deadSopenharmony_ci      - Assign OpenGL extension number
10045bd8deadSopenharmony_ci
10055bd8deadSopenharmony_ci    Revision 28, 2013/09/18 (Benj Lipchak)
10065bd8deadSopenharmony_ci      - Add interaction with APPLE_texture_format_BGRA8888.
10075bd8deadSopenharmony_ci      - Fix interaction with APPLE_rgb_422.
10085bd8deadSopenharmony_ci
10095bd8deadSopenharmony_ci    Revision 27, 2012/07/24 (Benj Lipchak)
10105bd8deadSopenharmony_ci      - Add interaction with APPLE_rgb_422.
10115bd8deadSopenharmony_ci
10125bd8deadSopenharmony_ci    Revision 26, 2012/02/29 (Benj Lipchak)
10135bd8deadSopenharmony_ci      - Add interaction with EXT_texture_rg.
10145bd8deadSopenharmony_ci
10155bd8deadSopenharmony_ci    Revision 25, 2012/01/19 (bmerry)
10165bd8deadSopenharmony_ci      - Clarify that the pixel unpack buffer has no effect.
10175bd8deadSopenharmony_ci
10185bd8deadSopenharmony_ci    Revision 24, 2011/11/11 (dgkoch)
10195bd8deadSopenharmony_ci      - Mark complete. Clarify ES clarifications.
10205bd8deadSopenharmony_ci
10215bd8deadSopenharmony_ci    Revision 23, 2011/11/10 (dgkoch)
10225bd8deadSopenharmony_ci      - Add GLES clarifcations and interactions with more GLES extensions
10235bd8deadSopenharmony_ci
10245bd8deadSopenharmony_ci    Revision 22, 2011/11/10 (bmerry)
10255bd8deadSopenharmony_ci      - Update my contact details
10265bd8deadSopenharmony_ci
10275bd8deadSopenharmony_ci    Revision 21, 2011/07/25 (bmerry)
10285bd8deadSopenharmony_ci      - Remove dangling references to MultiTexStorage in Errors section
10295bd8deadSopenharmony_ci
10305bd8deadSopenharmony_ci    Revision 20, 2011/07/21 (bmerry)
10315bd8deadSopenharmony_ci      - Remove dangling reference to <samples> in Errors section
10325bd8deadSopenharmony_ci
10335bd8deadSopenharmony_ci    Revision 19, 2011/05/02 (Jon Leech)
10345bd8deadSopenharmony_ci      - Assign enum value
10355bd8deadSopenharmony_ci
10365bd8deadSopenharmony_ci    Revision 18, 2011/01/24 (bmerry)
10375bd8deadSopenharmony_ci      - Disallow unsized internal formats (oversight in revision 17).
10385bd8deadSopenharmony_ci
10395bd8deadSopenharmony_ci    Revision 17, 2011/01/24 (bmerry)
10405bd8deadSopenharmony_ci      - Added and resolved issue 26.
10415bd8deadSopenharmony_ci      - Split issue 27 out from issue 15.
10425bd8deadSopenharmony_ci      - Disallow TexStorage* in display lists.
10435bd8deadSopenharmony_ci      - Use the term "immutable-format" consistently (bug 7281).
10445bd8deadSopenharmony_ci
10455bd8deadSopenharmony_ci    Revision 16, 2010/11/23 (bmerry)
10465bd8deadSopenharmony_ci      - Disallowed TexStorage on an immutable-format texture
10475bd8deadSopenharmony_ci        (resolves issue 5).
10485bd8deadSopenharmony_ci      - Deleted MultiTexStorage* commands (other DSA functions still
10495bd8deadSopenharmony_ci        unresolved).
10505bd8deadSopenharmony_ci      - Some minor wording changes suggested by Pat Brown (bug 7002).
10515bd8deadSopenharmony_ci
10525bd8deadSopenharmony_ci    Revision 15, 2010/11/09 (bmerry)
10535bd8deadSopenharmony_ci      - Reopened issue 5.
10545bd8deadSopenharmony_ci      - Reopened issue 14, pending stabilisation of
10555bd8deadSopenharmony_ci        ARB_direct_state_access.
10565bd8deadSopenharmony_ci      - Marked issue 9 resolved, pending any objections.
10575bd8deadSopenharmony_ci      - Fix references to no object being bound (was meant to refer to
10585bd8deadSopenharmony_ci        the default object).
10595bd8deadSopenharmony_ci      - Adding missing pseudocode for TEXTURE_1D_ARRAY.
10605bd8deadSopenharmony_ci      - Corrected TEXTURE_2D_ARRAY -> TEXTURE_1D_ARRAY in error checks.
10615bd8deadSopenharmony_ci      - Changed "levels... are removed" to "levels... are reset to their
10625bd8deadSopenharmony_ci        init state", since desktop GL has per-level state apart from the
10635bd8deadSopenharmony_ci        texels.
10645bd8deadSopenharmony_ci      - Miscellaneous wording fixes.
10655bd8deadSopenharmony_ci
10665bd8deadSopenharmony_ci    Revision 14, 2010/09/25 (bmerry)
10675bd8deadSopenharmony_ci      - Add issues 24-25 and alterations to
10685bd8deadSopenharmony_ci        OES_compressed_ETC1_RGB8_texture, AMD_compressed_ATC_texture and
10695bd8deadSopenharmony_ci        AMD_compressed_3DC_texture.
10705bd8deadSopenharmony_ci
10715bd8deadSopenharmony_ci    Revision 13, 2010/09/19 (bmerry)
10725bd8deadSopenharmony_ci      - Two typo fixes from Daniel Koch
10735bd8deadSopenharmony_ci
10745bd8deadSopenharmony_ci    Revision 12, 2010/09/18 (bmerry)
10755bd8deadSopenharmony_ci      - Changed resolution to issue 20
10765bd8deadSopenharmony_ci      - Added and resolved issue 23
10775bd8deadSopenharmony_ci      - Added explanation of how to upload data (in overview)
10785bd8deadSopenharmony_ci      - Added spec language to implement resolution to issue 15
10795bd8deadSopenharmony_ci
10805bd8deadSopenharmony_ci    Revision 11, 2010/07/21 (bmerry)
10815bd8deadSopenharmony_ci      - Resolved issue 16
10825bd8deadSopenharmony_ci      - Reopen issue 20
10835bd8deadSopenharmony_ci      - Fix some typos
10845bd8deadSopenharmony_ci
10855bd8deadSopenharmony_ci    Revision 10, 2010/07/15 (bmerry)
10865bd8deadSopenharmony_ci      - Update some issues to match core text
10875bd8deadSopenharmony_ci      - Resolved issue 17
10885bd8deadSopenharmony_ci
10895bd8deadSopenharmony_ci    Revision 9, 2010/05/24 (bmerry)
10905bd8deadSopenharmony_ci      - Marked issue 2 as resolved
10915bd8deadSopenharmony_ci      - Resolved issue 19 (as no change)
10925bd8deadSopenharmony_ci      - Resolved issue 20
10935bd8deadSopenharmony_ci      - Add issues 21-22
10945bd8deadSopenharmony_ci      - Add in spec language to forbid use on default textures
10955bd8deadSopenharmony_ci      - Redefine level_base, level_max to be clamped forms of
10965bd8deadSopenharmony_ci        TEXTURE_BASE_LEVEL/TEXTURE_MAX_LEVEL when using immutable
10975bd8deadSopenharmony_ci        textures
10985bd8deadSopenharmony_ci      - Redefine p to also be clamped to the provided levels for
10995bd8deadSopenharmony_ci        immutable textures, to support automatic mipmap generation
11005bd8deadSopenharmony_ci      - Removed multisample functions
11015bd8deadSopenharmony_ci      - Removed language stating that texture parameters were reset to
11025bd8deadSopenharmony_ci        defaults
11035bd8deadSopenharmony_ci
11045bd8deadSopenharmony_ci    Revision 8, 2010/05/18 (bmerry)
11055bd8deadSopenharmony_ci      - Added issue about EGLimage
11065bd8deadSopenharmony_ci      - Marked issue 14 as resolved
11075bd8deadSopenharmony_ci
11085bd8deadSopenharmony_ci    Revision 7, 2010/05/04 (bmerry)
11095bd8deadSopenharmony_ci      - Removed some lingering <format>, <type> parameters to the new
11105bd8deadSopenharmony_ci        functions that should have been removed in revision 4
11115bd8deadSopenharmony_ci      - Trivial typo fixes
11125bd8deadSopenharmony_ci
11135bd8deadSopenharmony_ci    Revision 6, 2010/02/18 (bmerry)
11145bd8deadSopenharmony_ci      - Resolved issues 5, 6 and 18
11155bd8deadSopenharmony_ci      - Added MultiTexStorage* functions for DSA interaction
11165bd8deadSopenharmony_ci      - Added error for texture-target mismatch in DSA
11175bd8deadSopenharmony_ci      - Allowed TexStorage* to be called again
11185bd8deadSopenharmony_ci
11195bd8deadSopenharmony_ci    Revision 5, 2010/01/25 (bmerry)
11205bd8deadSopenharmony_ci      - Added to contributors list
11215bd8deadSopenharmony_ci      - Require OpenGL 1.2, to simplify interactions with
11225bd8deadSopenharmony_ci        TEXTURE_BASE_LEVEL/TEXTURE_MAX_LEVEL and CLAMP_TO_EDGE
11235bd8deadSopenharmony_ci      - Change default wrap modes to always be CLAMP_TO_EDGE
11245bd8deadSopenharmony_ci      - Change default filters to always be NEAREST
11255bd8deadSopenharmony_ci      - Moved language about generating new levels into an interaction,
11265bd8deadSopenharmony_ci        since it can only happen on OpenGL ES
11275bd8deadSopenharmony_ci      - Added interaction with EXT_direct_state_access
11285bd8deadSopenharmony_ci      - Added extra <internalformats> for GL ES when OES_depth_texture,
11295bd8deadSopenharmony_ci        OES_packed_depth_stencil and EXT_texture_type_2_10_10_10_REV are
11305bd8deadSopenharmony_ci        present.
11315bd8deadSopenharmony_ci      - Minor non-functional wording fixes and typos
11325bd8deadSopenharmony_ci      - Resolved issue 16
11335bd8deadSopenharmony_ci      - Added issues 17-19
11345bd8deadSopenharmony_ci
11355bd8deadSopenharmony_ci    Revision 4, 2010/01/13 (bmerry)
11365bd8deadSopenharmony_ci      - Changed suffix from ARM to EXT
11375bd8deadSopenharmony_ci      - Added list of contributors
11385bd8deadSopenharmony_ci      - Added language to force the texture to always be complete
11395bd8deadSopenharmony_ci      - Removed <format> and <type> arguments
11405bd8deadSopenharmony_ci      - Added issues 14-16
11415bd8deadSopenharmony_ci      - Reopened issue 2
11425bd8deadSopenharmony_ci      - Reformatted issues to separate resolution and discussion
11435bd8deadSopenharmony_ci      - Resolved issues 1, 9 and 11-13
11445bd8deadSopenharmony_ci      - Fixed the max number of levels in a cube map array
11455bd8deadSopenharmony_ci
11465bd8deadSopenharmony_ci    Revision 3, 2009/12/17 (bmerry)
11475bd8deadSopenharmony_ci      - Added missing vendor suffix to TEXTURE_IMMUTABLE_FORMAT_ARM
11485bd8deadSopenharmony_ci      - Rewritten to against desktop OpenGL
11495bd8deadSopenharmony_ci      - Added prototypes for 1D and multisample storage functions
11505bd8deadSopenharmony_ci      - Added issues 8-13
11515bd8deadSopenharmony_ci
11525bd8deadSopenharmony_ci    Revision 2, 2009/08/20 (bmerry)
11535bd8deadSopenharmony_ci      - Resolved issue 2 (no border parameter)
11545bd8deadSopenharmony_ci      - Resolved issue 4 (metadata becomes immutable)
11555bd8deadSopenharmony_ci      - Added interaction with OES_texture_cube_map
11565bd8deadSopenharmony_ci      - Added error if width != height in a cube map
11575bd8deadSopenharmony_ci      - Added issues 5-7
11585bd8deadSopenharmony_ci
11595bd8deadSopenharmony_ci    Revision 1, 2009/05/06 (bmerry)
11605bd8deadSopenharmony_ci      - First draft
1161