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