15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ARB_texture_view
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ARB_texture_view
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Jeff Bolz, NVIDIA Corporation (jbolz 'at' nvidia.com)
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ciContributors
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ci    Pat Brown, NVIDIA
165bd8deadSopenharmony_ci    Daniel Koch, TransGaming
175bd8deadSopenharmony_ci    Jon Leech
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ciNotice
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ci    Copyright (c) 2012-2013 The Khronos Group Inc. Copyright terms at
225bd8deadSopenharmony_ci        http://www.khronos.org/registry/speccopyright.html
235bd8deadSopenharmony_ci
245bd8deadSopenharmony_ciSpecification Update Policy
255bd8deadSopenharmony_ci
265bd8deadSopenharmony_ci    Khronos-approved extension specifications are updated in response to
275bd8deadSopenharmony_ci    issues and bugs prioritized by the Khronos OpenGL Working Group. For
285bd8deadSopenharmony_ci    extensions which have been promoted to a core Specification, fixes will
295bd8deadSopenharmony_ci    first appear in the latest version of that core Specification, and will
305bd8deadSopenharmony_ci    eventually be backported to the extension document. This policy is
315bd8deadSopenharmony_ci    described in more detail at
325bd8deadSopenharmony_ci        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ciStatus
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ci    Complete.
375bd8deadSopenharmony_ci    Approved by the ARB on 2012/06/12.
385bd8deadSopenharmony_ci
395bd8deadSopenharmony_ciVersion
405bd8deadSopenharmony_ci
415bd8deadSopenharmony_ci    Last Modified Date: July 15, 2013
425bd8deadSopenharmony_ci    Revision: 4
435bd8deadSopenharmony_ci
445bd8deadSopenharmony_ciNumber
455bd8deadSopenharmony_ci
465bd8deadSopenharmony_ci    ARB Extension #124
475bd8deadSopenharmony_ci
485bd8deadSopenharmony_ciDependencies
495bd8deadSopenharmony_ci
505bd8deadSopenharmony_ci    This extension is written against the OpenGL 4.2 Core profile 
515bd8deadSopenharmony_ci    specification.
525bd8deadSopenharmony_ci
535bd8deadSopenharmony_ci    ARB_texture_storage or OpenGL 4.2 is required.
545bd8deadSopenharmony_ci
555bd8deadSopenharmony_ci    ARB_internalformat_query2 interacts with this extension.
565bd8deadSopenharmony_ci
575bd8deadSopenharmony_ci    EXT_texture_compression_s3tc interacts with this extension.
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ci    EXT_texture_sRGB interacts with this extension.
605bd8deadSopenharmony_ci
615bd8deadSopenharmony_ci    ARB_texture_storage_multisample interacts with this extension.
625bd8deadSopenharmony_ci
635bd8deadSopenharmony_ciOverview
645bd8deadSopenharmony_ci
655bd8deadSopenharmony_ci    This extension allows a texture's data store to be "viewed" in multiple 
665bd8deadSopenharmony_ci    ways, either reinterpreting the data format/type as a different format/
675bd8deadSopenharmony_ci    type with the same element size, or by clamping the mipmap level range 
685bd8deadSopenharmony_ci    or array slice range. 
695bd8deadSopenharmony_ci    
705bd8deadSopenharmony_ci    The goals of this extension are to avoid having these alternate views 
715bd8deadSopenharmony_ci    become shared mutable containers of shared mutable objects, and to add 
725bd8deadSopenharmony_ci    the views to the API in a minimally invasive way.
735bd8deadSopenharmony_ci
745bd8deadSopenharmony_ci    No new object types are added. Conceptually, a texture object is split
755bd8deadSopenharmony_ci    into the following parts:
765bd8deadSopenharmony_ci    
775bd8deadSopenharmony_ci        - A data store holding texel data.
785bd8deadSopenharmony_ci        - State describing which portions of the data store to use, and how
795bd8deadSopenharmony_ci          to interpret the data elements.
805bd8deadSopenharmony_ci        - An embedded sampler object.
815bd8deadSopenharmony_ci        - Various other texture parameters.
825bd8deadSopenharmony_ci
835bd8deadSopenharmony_ci    With this extension, multiple textures can share a data store and have 
845bd8deadSopenharmony_ci    different state describing which portions of the data store to use and how
855bd8deadSopenharmony_ci    to interpret the data elements. The data store is refcounted and not 
865bd8deadSopenharmony_ci    destroyed until the last texture sharing it is deleted.
875bd8deadSopenharmony_ci
885bd8deadSopenharmony_ci    This extension leverages the ARB_texture_storage concept of an "immutable 
895bd8deadSopenharmony_ci    texture". Views can only be created of textures created with TexStorage.
905bd8deadSopenharmony_ci
915bd8deadSopenharmony_ci
925bd8deadSopenharmony_ciNew Procedures and Functions
935bd8deadSopenharmony_ci
945bd8deadSopenharmony_ci    void TextureView(uint texture, enum target, uint origtexture, 
955bd8deadSopenharmony_ci                     enum internalformat,
965bd8deadSopenharmony_ci                     uint minlevel, uint numlevels, 
975bd8deadSopenharmony_ci                     uint minlayer, uint numlayers);
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ciNew Tokens
1005bd8deadSopenharmony_ci
1015bd8deadSopenharmony_ci    Accepted by the <pname> parameters of GetTexParameterfv and 
1025bd8deadSopenharmony_ci    GetTexParameteriv:
1035bd8deadSopenharmony_ci
1045bd8deadSopenharmony_ci        TEXTURE_VIEW_MIN_LEVEL                          0x82DB
1055bd8deadSopenharmony_ci        TEXTURE_VIEW_NUM_LEVELS                         0x82DC
1065bd8deadSopenharmony_ci        TEXTURE_VIEW_MIN_LAYER                          0x82DD
1075bd8deadSopenharmony_ci        TEXTURE_VIEW_NUM_LAYERS                         0x82DE
1085bd8deadSopenharmony_ci        TEXTURE_IMMUTABLE_LEVELS                        0x82DF
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci    Used as compatibility class names in table 3.X.2 (see the "Interactions
1115bd8deadSopenharmony_ci    with ARB_internalformat_query2" section below).
1125bd8deadSopenharmony_ci
1135bd8deadSopenharmony_ci        VIEW_CLASS_128_BITS                             
1145bd8deadSopenharmony_ci        VIEW_CLASS_96_BITS                              
1155bd8deadSopenharmony_ci        VIEW_CLASS_64_BITS                              
1165bd8deadSopenharmony_ci        VIEW_CLASS_48_BITS                              
1175bd8deadSopenharmony_ci        VIEW_CLASS_32_BITS                              
1185bd8deadSopenharmony_ci        VIEW_CLASS_24_BITS                              
1195bd8deadSopenharmony_ci        VIEW_CLASS_16_BITS                              
1205bd8deadSopenharmony_ci        VIEW_CLASS_8_BITS                               
1215bd8deadSopenharmony_ci        VIEW_CLASS_S3TC_DXT1_RGB                        
1225bd8deadSopenharmony_ci        VIEW_CLASS_S3TC_DXT1_RGBA                       
1235bd8deadSopenharmony_ci        VIEW_CLASS_S3TC_DXT3_RGBA                       
1245bd8deadSopenharmony_ci        VIEW_CLASS_S3TC_DXT5_RGBA                       
1255bd8deadSopenharmony_ci        VIEW_CLASS_RGTC1_RED                            
1265bd8deadSopenharmony_ci        VIEW_CLASS_RGTC2_RG                             
1275bd8deadSopenharmony_ci        VIEW_CLASS_BPTC_UNORM                           
1285bd8deadSopenharmony_ci        VIEW_CLASS_BPTC_FLOAT                           
1295bd8deadSopenharmony_ci
1305bd8deadSopenharmony_ci
1315bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 4.2 Specification (OpenGL Operation)
1325bd8deadSopenharmony_ci
1335bd8deadSopenharmony_ci    None.
1345bd8deadSopenharmony_ci
1355bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 4.2 Specification (Rasterization)
1365bd8deadSopenharmony_ci
1375bd8deadSopenharmony_ci    Modify subsection 3.9.8 (Texture Parameters)
1385bd8deadSopenharmony_ci
1395bd8deadSopenharmony_ci    Add the following to the end of the paragraph on p. 240:
1405bd8deadSopenharmony_ci
1415bd8deadSopenharmony_ci    If the texture was created with TextureView, then the TEXTURE_BASE_LEVEL
1425bd8deadSopenharmony_ci    and TEXTURE_MAX_LEVEL parameters are interpreted relative to the view and 
1435bd8deadSopenharmony_ci    not relative to the original data store.
1445bd8deadSopenharmony_ci
1455bd8deadSopenharmony_ci    Modify subsection 3.9.15 (Texture State and Proxy State)
1465bd8deadSopenharmony_ci
1475bd8deadSopenharmony_ci    Add to the second paragraph on p. 256:
1485bd8deadSopenharmony_ci
1495bd8deadSopenharmony_ci    The values of TEXTURE_IMMUTABLE_LEVELS, TEXTURE_VIEW_MIN_LEVEL,
1505bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LEVELS, TEXTURE_VIEW_MIN_LAYER, TEXTURE_VIEW_NUM_LAYERS
1515bd8deadSopenharmony_ci    are 0.
1525bd8deadSopenharmony_ci
1535bd8deadSopenharmony_ci    Modify subsection 3.9.16 (Immutable-Format Texture Images)
1545bd8deadSopenharmony_ci
1555bd8deadSopenharmony_ci    Modify the second to last bullet on p. 258:
1565bd8deadSopenharmony_ci
1575bd8deadSopenharmony_ci    If the command is successful, TEXTURE_IMMUTABLE_FORMAT becomes TRUE, 
1585bd8deadSopenharmony_ci    TEXTURE_IMMUTABLE_LEVELS and TEXTURE_VIEW_NUM_LEVELS become <levels>.
1595bd8deadSopenharmony_ci    If the texture target is TEXTURE_1D_ARRAY then TEXTURE_VIEW_NUM_LAYERS 
1605bd8deadSopenharmony_ci    becomes <height>. If the texture target is TEXTURE_2D_ARRAY, 
1615bd8deadSopenharmony_ci    TEXTURE_CUBE_MAP_ARRAY, or TEXTURE_2D_MULTISAMPLE_ARRAY then 
1625bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LAYERS becomes <depth>. If the texture target is 
1635bd8deadSopenharmony_ci    TEXTURE_CUBE_MAP, then TEXTURE_VIEW_NUM_LAYERS becomes 6. For any other
1645bd8deadSopenharmony_ci    texture target, TEXTURE_VIEW_NUM_LAYERS becomes 1.
1655bd8deadSopenharmony_ci
1665bd8deadSopenharmony_ci    Add a new subsection at the end of 3.9 (Texturing)
1675bd8deadSopenharmony_ci
1685bd8deadSopenharmony_ci    3.9.X  Texture Views
1695bd8deadSopenharmony_ci
1705bd8deadSopenharmony_ci    A texture can be created which references the data store of another texture
1715bd8deadSopenharmony_ci    and interprets the data with a different format, and/or selects a subset of
1725bd8deadSopenharmony_ci    the levels and/or layers of the other texture. The data store for such a 
1735bd8deadSopenharmony_ci    texture is shared with the data store of the original texture.  Updating 
1745bd8deadSopenharmony_ci    the shared data store using the original texture affects texture values read
1755bd8deadSopenharmony_ci    using the new texture, and vice versa.  A texture data store remains in 
1765bd8deadSopenharmony_ci    existence until all textures that reference it are deleted.
1775bd8deadSopenharmony_ci
1785bd8deadSopenharmony_ci    The command:
1795bd8deadSopenharmony_ci
1805bd8deadSopenharmony_ci        void TextureView(uint texture, enum target, uint origtexture, 
1815bd8deadSopenharmony_ci                         enum internalformat,
1825bd8deadSopenharmony_ci                         uint minlevel, uint numlevels, 
1835bd8deadSopenharmony_ci                         uint minlayer, uint numlayers);
1845bd8deadSopenharmony_ci    
1855bd8deadSopenharmony_ci    initializes the texture named <texture> to the target specified by
1865bd8deadSopenharmony_ci    <target>. <texture>'s data store is inherited from the texture named 
1875bd8deadSopenharmony_ci    <origtexture>, but elements of the data store are interpreted according 
1885bd8deadSopenharmony_ci    to the internal format specified by <internalformat>. Additionally, if the
1895bd8deadSopenharmony_ci    original texture is an array or has multiple mipmap levels, the parameters 
1905bd8deadSopenharmony_ci    <minlayer>, <numlayers>, <minlevel>, and <numlevels> control which of those 
1915bd8deadSopenharmony_ci    slices and levels are considered part of the texture.
1925bd8deadSopenharmony_ci
1935bd8deadSopenharmony_ci    The <minlevel> and <minlayer> parameters are relative to the view of the 
1945bd8deadSopenharmony_ci    original texture. If <numlayers> or <numlevels> extend beyond the original 
1955bd8deadSopenharmony_ci    texture, they are clamped to the max extent of the original texture. If 
1965bd8deadSopenharmony_ci    <minlevel> or <minlayer> are larger than the greatest level or layer of the 
1975bd8deadSopenharmony_ci    original texture, the error INVALID_VALUE is generated.
1985bd8deadSopenharmony_ci
1995bd8deadSopenharmony_ci    If the command is successful, the texture parameters in <texture> are 
2005bd8deadSopenharmony_ci    updated as follows:
2015bd8deadSopenharmony_ci    
2025bd8deadSopenharmony_ci     - TEXTURE_IMMUTABLE_FORMAT is set to TRUE.
2035bd8deadSopenharmony_ci
2045bd8deadSopenharmony_ci     - TEXTURE_IMMUTABLE_LEVELS is set to the value of TEXTURE_IMMUTABLE_LEVELS 
2055bd8deadSopenharmony_ci       from the original texture.
2065bd8deadSopenharmony_ci
2075bd8deadSopenharmony_ci     - TEXTURE_VIEW_MIN_LEVEL is set to <minlevel> plus the value of 
2085bd8deadSopenharmony_ci       TEXTURE_VIEW_MIN_LEVEL from the original texture.
2095bd8deadSopenharmony_ci
2105bd8deadSopenharmony_ci     - TEXTURE_VIEW_MIN_LAYER is set to <minlayer> plus the value of 
2115bd8deadSopenharmony_ci       TEXTURE_VIEW_MIN_LAYER from the original texture.
2125bd8deadSopenharmony_ci
2135bd8deadSopenharmony_ci     - TEXTURE_VIEW_NUM_LEVELS is set to the lesser of <numlevels> and the 
2145bd8deadSopenharmony_ci       value of TEXTURE_VIEW_NUM_LEVELS from the original texture minus 
2155bd8deadSopenharmony_ci       <minlevels>.
2165bd8deadSopenharmony_ci
2175bd8deadSopenharmony_ci     - TEXTURE_VIEW_NUM_LAYERS is set to the lesser of <numlayers> and the 
2185bd8deadSopenharmony_ci       value of TEXTURE_VIEW_NUM_LAYERS from the original texture minus 
2195bd8deadSopenharmony_ci       <minlayer>.
2205bd8deadSopenharmony_ci
2215bd8deadSopenharmony_ci    The new texture's target must be "compatible" with the target of the 
2225bd8deadSopenharmony_ci    original texture, or else an INVALID_OPERATION error is generated. 
2235bd8deadSopenharmony_ci    Compatibility is defined by Table 3.X.1:
2245bd8deadSopenharmony_ci
2255bd8deadSopenharmony_ci        ---------------------------------------------------------------------------------------------------------
2265bd8deadSopenharmony_ci        | Original target             |  Valid new targets                                                      |
2275bd8deadSopenharmony_ci        ---------------------------------------------------------------------------------------------------------
2285bd8deadSopenharmony_ci        | TEXTURE_1D                  |  TEXTURE_1D, TEXTURE_1D_ARRAY                                           |
2295bd8deadSopenharmony_ci        |-------------------------------------------------------------------------------------------------------|
2305bd8deadSopenharmony_ci        | TEXTURE_2D                  |  TEXTURE_2D, TEXTURE_2D_ARRAY                                           |
2315bd8deadSopenharmony_ci        |-------------------------------------------------------------------------------------------------------|
2325bd8deadSopenharmony_ci        | TEXTURE_3D                  |  TEXTURE_3D                                                             |
2335bd8deadSopenharmony_ci        |-------------------------------------------------------------------------------------------------------|
2345bd8deadSopenharmony_ci        | TEXTURE_CUBE_MAP            |  TEXTURE_CUBE_MAP, TEXTURE_2D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY |
2355bd8deadSopenharmony_ci        |-------------------------------------------------------------------------------------------------------|
2365bd8deadSopenharmony_ci        | TEXTURE_RECTANGLE           |  TEXTURE_RECTANGLE                                                      |
2375bd8deadSopenharmony_ci        |-------------------------------------------------------------------------------------------------------|
2385bd8deadSopenharmony_ci        | TEXTURE_BUFFER              |  <none>                                                                 |
2395bd8deadSopenharmony_ci        |-------------------------------------------------------------------------------------------------------|
2405bd8deadSopenharmony_ci        | TEXTURE_1D_ARRAY            |  TEXTURE_1D_ARRAY, TEXTURE_1D                                           |
2415bd8deadSopenharmony_ci        |-------------------------------------------------------------------------------------------------------|
2425bd8deadSopenharmony_ci        | TEXTURE_2D_ARRAY            |  TEXTURE_2D_ARRAY, TEXTURE_2D, TEXTURE_CUBE_MAP, TEXTURE_CUBE_MAP_ARRAY |
2435bd8deadSopenharmony_ci        |-------------------------------------------------------------------------------------------------------|
2445bd8deadSopenharmony_ci        | TEXTURE_CUBE_MAP_ARRAY      |  TEXTURE_CUBE_MAP_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_2D, TEXTURE_CUBE_MAP |
2455bd8deadSopenharmony_ci        |-------------------------------------------------------------------------------------------------------|
2465bd8deadSopenharmony_ci        | TEXTURE_2D_MULTISAMPLE      |  TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY                   |
2475bd8deadSopenharmony_ci        |-------------------------------------------------------------------------------------------------------|
2485bd8deadSopenharmony_ci        | TEXTURE_2D_MULTISAMPLE_ARRAY|  TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY                   |
2495bd8deadSopenharmony_ci        ---------------------------------------------------------------------------------------------------------
2505bd8deadSopenharmony_ci        
2515bd8deadSopenharmony_ci        Table 3.X.1: Legal texture targets for TextureView.
2525bd8deadSopenharmony_ci
2535bd8deadSopenharmony_ci    If the new texture's target is TEXTURE_CUBE_MAP, the clamped <numlayers> 
2545bd8deadSopenharmony_ci    must be equal to 6. If the new texture's target is TEXTURE_CUBE_MAP_ARRAY, 
2555bd8deadSopenharmony_ci    then <numlayers> counts layer-faces rather than layers, and the clamped 
2565bd8deadSopenharmony_ci    <numlayers> must be a multiple of 6. Otherwise, the error INVALID_VALUE is
2575bd8deadSopenharmony_ci    generated. If the new texture's target is TEXTURE_CUBE_MAP or 
2585bd8deadSopenharmony_ci    TEXTURE_CUBE_MAP_ARRAY, the width and height of the original texture's 
2595bd8deadSopenharmony_ci    levels must be equal otherwise the error INVALID_OPERATION is generated.
2605bd8deadSopenharmony_ci
2615bd8deadSopenharmony_ci    When the original texture's target is TEXTURE_CUBE_MAP, the layer 
2625bd8deadSopenharmony_ci    parameters are interpreted in the same order as if it were a 
2635bd8deadSopenharmony_ci    TEXTURE_CUBE_MAP_ARRAY with 6 layer-faces. 
2645bd8deadSopenharmony_ci
2655bd8deadSopenharmony_ci    If <target> is TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_RECTANGLE, or 
2665bd8deadSopenharmony_ci    TEXTURE_2D_MULTISAMPLE and <numlayers> does not equal 1, the error
2675bd8deadSopenharmony_ci    INVALID_VALUE is generated.
2685bd8deadSopenharmony_ci
2695bd8deadSopenharmony_ci    If the dimensions of the original texture are larger than the maximum 
2705bd8deadSopenharmony_ci    supported dimensions of the new target, the error INVALID_OPERATION is 
2715bd8deadSopenharmony_ci    generated. For example, if the original texture has a TEXTURE_2D_ARRAY 
2725bd8deadSopenharmony_ci    target and its width is greater than MAX_CUBE_MAP_TEXTURE_SIZE, an error 
2735bd8deadSopenharmony_ci    will be generated if TextureView is called to create a TEXTURE_CUBE_MAP 
2745bd8deadSopenharmony_ci    view.
2755bd8deadSopenharmony_ci
2765bd8deadSopenharmony_ci    The two textures' internal formats must be compatible according to Table 
2775bd8deadSopenharmony_ci    3.X.2 (Compatible internal formats for TextureView) if the internal format
2785bd8deadSopenharmony_ci    exists in that table and the internal formats must be identical if not in 
2795bd8deadSopenharmony_ci    that table, or else an INVALID_OPERATION error is generated.
2805bd8deadSopenharmony_ci
2815bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
2825bd8deadSopenharmony_ci    | Class                 | Internal formats                                | 
2835bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
2845bd8deadSopenharmony_ci    | VIEW_CLASS_128_BITS   | RGBA32F, RGBA32UI, RGBA32I                      |
2855bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
2865bd8deadSopenharmony_ci    | VIEW_CLASS_96_BITS    | RGB32F, RGB32UI, RGB32I                         |
2875bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
2885bd8deadSopenharmony_ci    | VIEW_CLASS_64_BITS    | RGBA16F, RG32F, RGBA16UI, RG32UI, RGBA16I,      |
2895bd8deadSopenharmony_ci    |                       | RG32I, RGBA16, RGBA16_SNORM                     |
2905bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
2915bd8deadSopenharmony_ci    | VIEW_CLASS_48_BITS    | RGB16, RGB16_SNORM, RGB16F, RGB16UI, RGB16I     |
2925bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
2935bd8deadSopenharmony_ci    | VIEW_CLASS_32_BITS    | RG16F, R11F_G11F_B10F, R32F,                    |
2945bd8deadSopenharmony_ci    |                       | RGB10_A2UI, RGBA8UI, RG16UI, R32UI,             |
2955bd8deadSopenharmony_ci    |                       | RGBA8I, RG16I, R32I, RGB10_A2, RGBA8, RG16,     |
2965bd8deadSopenharmony_ci    |                       | RGBA8_SNORM, RG16_SNORM, SRGB8_ALPHA8, RGB9_E5  |
2975bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
2985bd8deadSopenharmony_ci    | VIEW_CLASS_24_BITS    | RGB8, RGB8_SNORM, SRGB8, RGB8UI, RGB8I          |
2995bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
3005bd8deadSopenharmony_ci    | VIEW_CLASS_16_BITS    | R16F, RG8UI, R16UI, RG8I, R16I, RG8, R16,       |
3015bd8deadSopenharmony_ci    |                       | RG8_SNORM, R16_SNORM                            |
3025bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
3035bd8deadSopenharmony_ci    | VIEW_CLASS_8_BITS     | R8UI, R8I, R8, R8_SNORM                         |
3045bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
3055bd8deadSopenharmony_ci    | VIEW_CLASS_RGTC1_RED  | COMPRESSED_RED_RGTC1,                           |
3065bd8deadSopenharmony_ci    |                       | COMPRESSED_SIGNED_RED_RGTC1                     |
3075bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
3085bd8deadSopenharmony_ci    | VIEW_CLASS_RGTC2_RG   | COMPRESSED_RG_RGTC2,                            |
3095bd8deadSopenharmony_ci    |                       | COMPRESSED_SIGNED_RG_RGTC2                      |
3105bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
3115bd8deadSopenharmony_ci    | VIEW_CLASS_BPTC_UNORM | COMPRESSED_RGBA_BPTC_UNORM,                     |
3125bd8deadSopenharmony_ci    |                       | COMPRESSED_SRGB_ALPHA_BPTC_UNORM                |
3135bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
3145bd8deadSopenharmony_ci    | VIEW_CLASS_BPTC_FLOAT | COMPRESSED_RGB_BPTC_SIGNED_FLOAT,               |
3155bd8deadSopenharmony_ci    |                       | COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT              |
3165bd8deadSopenharmony_ci    ---------------------------------------------------------------------------
3175bd8deadSopenharmony_ci
3185bd8deadSopenharmony_ci        Table 3.X.2: Compatible internal formats for TextureView. Formats in 
3195bd8deadSopenharmony_ci        the same entry may be cast to each other.
3205bd8deadSopenharmony_ci
3215bd8deadSopenharmony_ci    If the internal format does not exactly match the internal format of the 
3225bd8deadSopenharmony_ci    original texture, the contents of the memory are reinterpreted in the same
3235bd8deadSopenharmony_ci    manner as for image bindings described in section 3.9.20 (Texture Image 
3245bd8deadSopenharmony_ci    Loads and Stores).
3255bd8deadSopenharmony_ci
3265bd8deadSopenharmony_ci    If <texture> has already been bound and given a target, then the error
3275bd8deadSopenharmony_ci    INVALID_OPERATION is generated. If <texture> is 0, INVALID_VALUE is
3285bd8deadSopenharmony_ci    generated. If <texture> is not a valid name returned by GenTextures, the
3295bd8deadSopenharmony_ci    error INVALID_OPERATION is generated.
3305bd8deadSopenharmony_ci
3315bd8deadSopenharmony_ci    If <origtexture> is not the name of a texture, INVALID_VALUE is generated. 
3325bd8deadSopenharmony_ci    If <origtexture>'s TEXTURE_IMMUTABLE_FORMAT value is not TRUE, 
3335bd8deadSopenharmony_ci    INVALID_OPERATION is generated. 
3345bd8deadSopenharmony_ci
3355bd8deadSopenharmony_ci    Texture commands that take a <level> or <layer> parameter, such as 
3365bd8deadSopenharmony_ci    TexSubImage2D, interpret that parameter to be relative to the view of the 
3375bd8deadSopenharmony_ci    texture. i.e. the mipmap level of the data store that would be updated via 
3385bd8deadSopenharmony_ci    TexSubImage2D would be the sum of <level> and the value of 
3395bd8deadSopenharmony_ci    TEXTURE_VIEW_MIN_LEVEL.
3405bd8deadSopenharmony_ci
3415bd8deadSopenharmony_ci
3425bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 4.2 Specification (Per-Fragment
3435bd8deadSopenharmony_ciOperations and the Frame Buffer)
3445bd8deadSopenharmony_ci
3455bd8deadSopenharmony_ci    None.
3465bd8deadSopenharmony_ci
3475bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 4.2 Specification (Special Functions)
3485bd8deadSopenharmony_ci
3495bd8deadSopenharmony_ci    None.
3505bd8deadSopenharmony_ci
3515bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 4.2 Specification (State and
3525bd8deadSopenharmony_ciState Requests)
3535bd8deadSopenharmony_ci
3545bd8deadSopenharmony_ci    Modify subsection 6.1.3 (Enumerated Queries)
3555bd8deadSopenharmony_ci
3565bd8deadSopenharmony_ci    Modify the paragraph after GetTexParameter on p. 350:
3575bd8deadSopenharmony_ci
3585bd8deadSopenharmony_ci    ... <value> must be IMAGE_FORMAT_COMPATIBILITY_TYPE, 
3595bd8deadSopenharmony_ci    TEXTURE_IMMUTABLE_FORMAT, TEXTURE_VIEW_MIN_LEVEL,
3605bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LEVELS, TEXTURE_VIEW_MIN_LAYER, 
3615bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LAYERS, or TEXTURE_IMMUTABLE_LEVELS.
3625bd8deadSopenharmony_ci
3635bd8deadSopenharmony_ciAdditions to Appendix D of the OpenGL 4.2 Specification (Shared Objects and
3645bd8deadSopenharmony_ciMultiple Contexts)
3655bd8deadSopenharmony_ci
3665bd8deadSopenharmony_ci    Modify section D.3 (Propagating Changes to Objects) 
3675bd8deadSopenharmony_ci
3685bd8deadSopenharmony_ci    Modify the second bullet point on p 461:
3695bd8deadSopenharmony_ci
3705bd8deadSopenharmony_ci      - The contents of the data stores of textures and renderbuffers.
3715bd8deadSopenharmony_ci
3725bd8deadSopenharmony_ci    Add the following sentence to the paragraph that begins "When the contents
3735bd8deadSopenharmony_ci    of an object <T>":
3745bd8deadSopenharmony_ci
3755bd8deadSopenharmony_ci    When <T> is a texture, "the contents of an object <T>" should be construed
3765bd8deadSopenharmony_ci    to include the contents of the data store of <T>, even if <T>'s data store
3775bd8deadSopenharmony_ci    was modified via a different view of the data store.
3785bd8deadSopenharmony_ci
3795bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications
3805bd8deadSopenharmony_ci
3815bd8deadSopenharmony_ci    None.
3825bd8deadSopenharmony_ci
3835bd8deadSopenharmony_ciGLX Protocol
3845bd8deadSopenharmony_ci
3855bd8deadSopenharmony_ci    TBD
3865bd8deadSopenharmony_ci
3875bd8deadSopenharmony_ciDependencies on EXT_texture_compression_s3tc
3885bd8deadSopenharmony_ci
3895bd8deadSopenharmony_ci    If EXT_texture_compression_s3tc and EXT_texture_sRGB are supported, then
3905bd8deadSopenharmony_ci    Table 3.X.2 is updated to add the following rows:
3915bd8deadSopenharmony_ci
3925bd8deadSopenharmony_ci    -------------------------------------------------------------------
3935bd8deadSopenharmony_ci    | Class                     | Internal formats                    |
3945bd8deadSopenharmony_ci    -------------------------------------------------------------------
3955bd8deadSopenharmony_ci    | VIEW_CLASS_S3TC_DXT1_RGB  | COMPRESSED_RGB_S3TC_DXT1_EXT,       |
3965bd8deadSopenharmony_ci    |                           | COMPRESSED_SRGB_S3TC_DXT1_EXT       |
3975bd8deadSopenharmony_ci    -------------------------------------------------------------------
3985bd8deadSopenharmony_ci    | VIEW_CLASS_S3TC_DXT1_RGBA | COMPRESSED_RGBA_S3TC_DXT1_EXT,      |
3995bd8deadSopenharmony_ci    |                           | COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT |
4005bd8deadSopenharmony_ci    -------------------------------------------------------------------
4015bd8deadSopenharmony_ci    | VIEW_CLASS_S3TC_DXT3_RGBA | COMPRESSED_RGBA_S3TC_DXT3_EXT,      |
4025bd8deadSopenharmony_ci    |                           | COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT |
4035bd8deadSopenharmony_ci    -------------------------------------------------------------------
4045bd8deadSopenharmony_ci    | VIEW_CLASS_S3TC_DXT5_RGBA | COMPRESSED_RGBA_S3TC_DXT5_EXT,      |
4055bd8deadSopenharmony_ci    |                           | COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT |
4065bd8deadSopenharmony_ci    -------------------------------------------------------------------
4075bd8deadSopenharmony_ci
4085bd8deadSopenharmony_ciInteractions with ARB_internalformat_query2
4095bd8deadSopenharmony_ci
4105bd8deadSopenharmony_ci    The VIEW_CLASS_* tokens used as compatibility class names in table 3.X.2
4115bd8deadSopenharmony_ci    are the same tokens returned by the VIEW_COMPATIBILITY_CLASS query in
4125bd8deadSopenharmony_ci    ARB_internalformat_query2. In this extension they are simply a labelling
4135bd8deadSopenharmony_ci    mechanism and serve no functional purpose in the API, so their numeric
4145bd8deadSopenharmony_ci    values are not specified.
4155bd8deadSopenharmony_ci
4165bd8deadSopenharmony_ciDependencies on ARB_texture_storage_multisample
4175bd8deadSopenharmony_ci
4185bd8deadSopenharmony_ci    Views are only supported for textures created by TexStorage. The original 
4195bd8deadSopenharmony_ci    ARB_texture_storage extension did not include TexStorage commands for 
4205bd8deadSopenharmony_ci    multisample textures. These are added by ARB_texture_storage_multisample, 
4215bd8deadSopenharmony_ci    so without that extension multisample textures cannot be used with views.
4225bd8deadSopenharmony_ci
4235bd8deadSopenharmony_ciErrors
4245bd8deadSopenharmony_ci
4255bd8deadSopenharmony_ci    TODO
4265bd8deadSopenharmony_ci
4275bd8deadSopenharmony_ciNew State
4285bd8deadSopenharmony_ci
4295bd8deadSopenharmony_ci    Changes to table 6.16, p. 277 (Texture, state per texture object)
4305bd8deadSopenharmony_ci
4315bd8deadSopenharmony_ci                                                     Initial
4325bd8deadSopenharmony_ci    Get Value                Type   Get Command      Value    Description                   Sec.      Attribute
4335bd8deadSopenharmony_ci    ---------                ----   -----------      -------  -----------                   ----      ---------
4345bd8deadSopenharmony_ci    TEXTURE_VIEW_MIN_LEVEL    Z+    GetTexParameter  0        view base texture level       3.9.X     texture
4355bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LEVELS   Z+    GetTexParameter  0        view number of texture levels 3.9.X     texture
4365bd8deadSopenharmony_ci    TEXTURE_VIEW_MIN_LAYER    Z+    GetTexParameter  0        view min array layer          3.9.X     texture
4375bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LAYERS   Z+    GetTexParameter  0        view number of array layers   3.9.X     texture
4385bd8deadSopenharmony_ci    TEXTURE_IMMUTABLE_LEVELS  Z+    GetTexParameter  0        storage number of levels      3.9.X     texture
4395bd8deadSopenharmony_ci
4405bd8deadSopenharmony_ciNew Implementation Dependent State
4415bd8deadSopenharmony_ci
4425bd8deadSopenharmony_ci    None.
4435bd8deadSopenharmony_ci
4445bd8deadSopenharmony_ciExamples
4455bd8deadSopenharmony_ci
4465bd8deadSopenharmony_ci    TODO
4475bd8deadSopenharmony_ci
4485bd8deadSopenharmony_ciIssues
4495bd8deadSopenharmony_ci
4505bd8deadSopenharmony_ci    (1) What internal formats can be cast to what other formats?
4515bd8deadSopenharmony_ci
4525bd8deadSopenharmony_ci    RESOLVED: In general, we try to follow the precedent from 
4535bd8deadSopenharmony_ci    ARB_shader_image_load_store where formats with the same element size can
4545bd8deadSopenharmony_ci    be cast to each other. Some specific issues with that:
4555bd8deadSopenharmony_ci
4565bd8deadSopenharmony_ci     - Depth formats cannot be cast to other formats. D3D1x handles depth
4575bd8deadSopenharmony_ci       formats differently than GL, depth formats are not texturable and
4585bd8deadSopenharmony_ci       instead there are equivalent "RG" formats for each depth format. In GL,
4595bd8deadSopenharmony_ci       depth formats are all texturable and we don't have equivalent RG 
4605bd8deadSopenharmony_ci       formats for most of them (we only have R32F and R16). Since these can
4615bd8deadSopenharmony_ci       be textured from in GL, there's no great need to cast them.
4625bd8deadSopenharmony_ci
4635bd8deadSopenharmony_ci     - Compressed formats can only be cast to other compressed formats with
4645bd8deadSopenharmony_ci       nearly identical encodings. Only the sRGB/signed-ness can change. See 
4655bd8deadSopenharmony_ci       also issue (10).
4665bd8deadSopenharmony_ci
4675bd8deadSopenharmony_ci     - RGB formats cannot be cast to/from RGBA. For the case of RGBA->RGB, 
4685bd8deadSopenharmony_ci       the same can be accomplished using ARB_texture_swizzle. For the case
4695bd8deadSopenharmony_ci       of RGB->RGBA, an RGB texture may have been allocated without storage
4705bd8deadSopenharmony_ci       for alpha bits so this needs to be disallowed.
4715bd8deadSopenharmony_ci
4725bd8deadSopenharmony_ci    (2) Should TEXTURE_IMMUTABLE_FORMAT be renamed?
4735bd8deadSopenharmony_ci
4745bd8deadSopenharmony_ci    ARB_texture_storage isn't really about the format being immutable, it's 
4755bd8deadSopenharmony_ci    more about the data store not needing to be reallocated. This extension 
4765bd8deadSopenharmony_ci    allows interpreting the data store with a different format, so this enum
4775bd8deadSopenharmony_ci    now feels poorly named.
4785bd8deadSopenharmony_ci
4795bd8deadSopenharmony_ci    RESOLVED: Leave it as is.
4805bd8deadSopenharmony_ci
4815bd8deadSopenharmony_ci    (3) Is it possible to create a texture view using an original texture
4825bd8deadSopenharmony_ci    which is itself a view? And if so, how are the level/layer values 
4835bd8deadSopenharmony_ci    interpreted?
4845bd8deadSopenharmony_ci
4855bd8deadSopenharmony_ci    RESOLVED: It is legal. For example, let's say texture 1 is a 2D_ARRAY
4865bd8deadSopenharmony_ci    texture with 200 layers. It will have TEXTURE_VIEW_MIN_LAYER=0, 
4875bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LAYERS=200. Then we create texture 2 from texture 1 using 
4885bd8deadSopenharmony_ci    <minlayer>=100, <numlayers>=100. It will have TEXTURE_VIEW_MIN_LAYER=100, 
4895bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LAYERS=100. Then we create texture 3 from texture 2 using
4905bd8deadSopenharmony_ci    <minlayer>=50, <numlayers>=50. It will have TEXTURE_VIEW_MIN_LAYER=150, 
4915bd8deadSopenharmony_ci    TEXTURE_VIEW_NUM_LAYERS=50.
4925bd8deadSopenharmony_ci
4935bd8deadSopenharmony_ci    (4) Should we allow views of textures not created through TexStorage?
4945bd8deadSopenharmony_ci
4955bd8deadSopenharmony_ci    RESOLVED: No. It might be possible, but if TexImage is called on a texture
4965bd8deadSopenharmony_ci    whose data store is shared it would likely require orphaning the old data
4975bd8deadSopenharmony_ci    store and creating/copying to a new data store. That's not desirable.
4985bd8deadSopenharmony_ci
4995bd8deadSopenharmony_ci    (5) How are TEXTURE_BASE_LEVEL and TEXTURE_MAX_LEVEL interpreted if 
5005bd8deadSopenharmony_ci    TEXTURE_VIEW_MIN_LEVEL is non-zero?
5015bd8deadSopenharmony_ci
5025bd8deadSopenharmony_ci    RESOLVED: The intent is that TEXTURE_BASE_LEVEL is relative to the view,
5035bd8deadSopenharmony_ci    i.e. the base level is TEXTURE_BASE_LEVEL+TEXTURE_VIEW_MIN_LEVEL relative
5045bd8deadSopenharmony_ci    to the data store.
5055bd8deadSopenharmony_ci
5065bd8deadSopenharmony_ci    (6) Do we need any new "typeless" formats?
5075bd8deadSopenharmony_ci
5085bd8deadSopenharmony_ci    RESOLVED: No. Any "compatible" format can be used in place of a typeless
5095bd8deadSopenharmony_ci    format.
5105bd8deadSopenharmony_ci
5115bd8deadSopenharmony_ci    (7) Why aren't BUFFER textures supported?
5125bd8deadSopenharmony_ci
5135bd8deadSopenharmony_ci    RESOLVED: The same can be accomplished with the contemporaneous 
5145bd8deadSopenharmony_ci    GL_ARB_texture_buffer_range extension.
5155bd8deadSopenharmony_ci
5165bd8deadSopenharmony_ci    (8) This extension requires TEXTURE_IMMUTABLE_FORMAT to be TRUE,
5175bd8deadSopenharmony_ci    but we don't have TexStorage*Multisample. Should we add these 
5185bd8deadSopenharmony_ci    commands, or not require immutable format?
5195bd8deadSopenharmony_ci
5205bd8deadSopenharmony_ci    RESOLVED: Add TexStorage*Multisample. This is done by
5215bd8deadSopenharmony_ci    ARB_texture_storage_multisample.
5225bd8deadSopenharmony_ci
5235bd8deadSopenharmony_ci    (9) Should it be possible to create a 2D view from a RECTANGLE texture
5245bd8deadSopenharmony_ci    or vice versa?
5255bd8deadSopenharmony_ci
5265bd8deadSopenharmony_ci    RESOLVED: No. These targets may have different max dimensions, or may be 
5275bd8deadSopenharmony_ci    allocated in memory with different tiling/swizzling.
5285bd8deadSopenharmony_ci
5295bd8deadSopenharmony_ci    (10) Should it be possible to view a compressed texture in such a way
5305bd8deadSopenharmony_ci    that a block of the compressed view corresponds to a texel of an 
5315bd8deadSopenharmony_ci    uncompressed view? For example, taking a 256x256 DXT1 texture and viewing
5325bd8deadSopenharmony_ci    it as a 64x64 RG32UI texture?
5335bd8deadSopenharmony_ci
5345bd8deadSopenharmony_ci    RESOLVED: No. The different mipmap stack sizes would be a problem, and 
5355bd8deadSopenharmony_ci    it's unclear whether all hardware could support this. Maybe a future 
5365bd8deadSopenharmony_ci    extension could enable this, but only allowing the view to have a single
5375bd8deadSopenharmony_ci    level?
5385bd8deadSopenharmony_ci
5395bd8deadSopenharmony_ci    (11) Interaction between TEXTURE_IMMUTABLE_LEVELS and View textures?
5405bd8deadSopenharmony_ci
5415bd8deadSopenharmony_ci    RESOLVED: There are several new TexParameter queries, and the values they
5425bd8deadSopenharmony_ci    return depend on how the texture was created:
5435bd8deadSopenharmony_ci
5445bd8deadSopenharmony_ci      - If the texture is in its initial state or the data store was created 
5455bd8deadSopenharmony_ci        with TexImage, then all five new parameters are zero.
5465bd8deadSopenharmony_ci
5475bd8deadSopenharmony_ci      - If the texture was created with TexStorage, then the parameters take 
5485bd8deadSopenharmony_ci        their values from the arguments, with both MIN parameters being zero,
5495bd8deadSopenharmony_ci        both LEVELS parameters being <levels>, and NUM_LAYERS being the number
5505bd8deadSopenharmony_ci        of layers if it's an array texture.
5515bd8deadSopenharmony_ci
5525bd8deadSopenharmony_ci      - If the texture was created with TextureView, then the VIEW parameters
5535bd8deadSopenharmony_ci        describe the texture's subset of the entire data store, and 
5545bd8deadSopenharmony_ci        IMMUTABLE_LEVELS is inherited from the original texture.
5555bd8deadSopenharmony_ci
5565bd8deadSopenharmony_ci    (12) Are uses of two different views of the same data store automatically
5575bd8deadSopenharmony_ci    coherent?
5585bd8deadSopenharmony_ci
5595bd8deadSopenharmony_ci    RESOLVED: Yes, to the extent that they were for a single texture. A few 
5605bd8deadSopenharmony_ci    examples of this are:
5615bd8deadSopenharmony_ci
5625bd8deadSopenharmony_ci      - TexSubImage to view A followed by texturing from view B.
5635bd8deadSopenharmony_ci
5645bd8deadSopenharmony_ci      - Rendering to view A attached to an FBO followed by texturing from
5655bd8deadSopenharmony_ci        view B.
5665bd8deadSopenharmony_ci
5675bd8deadSopenharmony_ci      - Shader image stores to view A followed by texturing from view B.
5685bd8deadSopenharmony_ci
5695bd8deadSopenharmony_ci    The first two cases would automatically work correctly if A and B were
5705bd8deadSopenharmony_ci    the same texture, as described in Appendix D, so they continue to work
5715bd8deadSopenharmony_ci    with separate views. If an implementation were (for example) tracking
5725bd8deadSopenharmony_ci    uses of the texture to do cache invalidations, it should do such 
5735bd8deadSopenharmony_ci    tracking on the data store instead. 
5745bd8deadSopenharmony_ci
5755bd8deadSopenharmony_ci    The third case would not automatically work if A and B were the same
5765bd8deadSopenharmony_ci    texture, instead requiring a MemoryBarrier call to force coherency. This
5775bd8deadSopenharmony_ci    same solution applies with texture views.
5785bd8deadSopenharmony_ci
5795bd8deadSopenharmony_ci    (13) Are interactions with ETC2/EAC compressed texture formats defined?
5805bd8deadSopenharmony_ci
5815bd8deadSopenharmony_ci    RESOLVED: No. It is likely that these formats are emulated with
5825bd8deadSopenharmony_ci    uncompressed internal formats on older hardware, and the resulting
5835bd8deadSopenharmony_ci    complications make defining texture view classes for these formats too
5845bd8deadSopenharmony_ci    difficult for too little functionality.
5855bd8deadSopenharmony_ci
5865bd8deadSopenharmony_ci
5875bd8deadSopenharmony_ciRevision History
5885bd8deadSopenharmony_ci
5895bd8deadSopenharmony_ci    Rev.    Date    Author    Changes
5905bd8deadSopenharmony_ci    ----  --------  --------  -----------------------------------------
5915bd8deadSopenharmony_ci      5   10/08/13  Jon Leech Add issue 13 discussing why ETC2/EAC view
5925bd8deadSopenharmony_ci                              classes aren't supported (Bug 11011).
5935bd8deadSopenharmony_ci      4   07/15/13  Jon Leech Change "Class" column of table 3.X.2 from
5945bd8deadSopenharmony_ci                              abstract names to VIEW_CLASS_* enums from
5955bd8deadSopenharmony_ci                              ARB_internalformat_query2 (Bug 10518).
5965bd8deadSopenharmony_ci      3   08/13/12  Jon Leech Renumbered from #142 to #124
5975bd8deadSopenharmony_ci      2   05/07/12  dgkoch    Added class names to Table 3.X.2
5985bd8deadSopenharmony_ci      1             jbolz     Internal revisions.
599