15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ARB_copy_image
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ARB_copy_image
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Michael Gold, NVIDIA Corporation (gold 'at' nvidia.com)
125bd8deadSopenharmony_ci    Graham Sellers, AMD (graham.sellers 'at' amd.com)
135bd8deadSopenharmony_ci
145bd8deadSopenharmony_ciContributors
155bd8deadSopenharmony_ci
165bd8deadSopenharmony_ci    Jeff Bolz, NVIDIA Corporation (jbolz 'at' nvidia.com)
175bd8deadSopenharmony_ci    James Jones, NVIDIA Corporation (jajones 'at' nvidia.com)
185bd8deadSopenharmony_ci    Joe Kain, NVIDIA Corporation (jkain 'at' nvidia.com)
195bd8deadSopenharmony_ci    Benjamin Morris, NVIDIA Corporation (bmorris 'at' nvidia.com)
205bd8deadSopenharmony_ci    Michael Morrison, NVIDIA Corporation (mmorrison 'at' nvidia.com)
215bd8deadSopenharmony_ci    Aaron Plattner, NVIDIA Corporation (aplattner 'at' nvidia.com)
225bd8deadSopenharmony_ci    Mathias Schott, NVIDIA Corporation (mschott 'at' nvidia.com)
235bd8deadSopenharmony_ci    Thomas Volk, NVIDIA Corporation (tvolk 'at' nvidia.com)
245bd8deadSopenharmony_ci    Eric Werness, NVIDIA Corporation (ewerness 'at' nvidia.com)
255bd8deadSopenharmony_ci    Daniel Koch, TransGaming Inc. (daniel 'at' transgaming.com)
265bd8deadSopenharmony_ci
275bd8deadSopenharmony_ciNotice
285bd8deadSopenharmony_ci
295bd8deadSopenharmony_ci    Copyright (c) 2012-2013 The Khronos Group Inc. Copyright terms at
305bd8deadSopenharmony_ci        http://www.khronos.org/registry/speccopyright.html
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ciSpecification Update Policy
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ci    Khronos-approved extension specifications are updated in response to
355bd8deadSopenharmony_ci    issues and bugs prioritized by the Khronos OpenGL Working Group. For
365bd8deadSopenharmony_ci    extensions which have been promoted to a core Specification, fixes will
375bd8deadSopenharmony_ci    first appear in the latest version of that core Specification, and will
385bd8deadSopenharmony_ci    eventually be backported to the extension document. This policy is
395bd8deadSopenharmony_ci    described in more detail at
405bd8deadSopenharmony_ci        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ciStatus
435bd8deadSopenharmony_ci
445bd8deadSopenharmony_ci    Complete.
455bd8deadSopenharmony_ci    Approved by the ARB on 2012/06/12.
465bd8deadSopenharmony_ci
475bd8deadSopenharmony_ciVersion
485bd8deadSopenharmony_ci
495bd8deadSopenharmony_ci    Last Modified Date:         May 10, 2012
505bd8deadSopenharmony_ci    Revision:                   3
515bd8deadSopenharmony_ci
525bd8deadSopenharmony_ciNumber
535bd8deadSopenharmony_ci
545bd8deadSopenharmony_ci    ARB Extension #123
555bd8deadSopenharmony_ci
565bd8deadSopenharmony_ciDependencies
575bd8deadSopenharmony_ci
585bd8deadSopenharmony_ci    OpenGL 1.1 is required.
595bd8deadSopenharmony_ci
605bd8deadSopenharmony_ci    The extension is written against the OpenGL 4.2 (Core Profile) Specification.
615bd8deadSopenharmony_ci
625bd8deadSopenharmony_ci    This extension interacts with OpenGL 4.3 and ARB_texture_view.
635bd8deadSopenharmony_ci
645bd8deadSopenharmony_ci    This extension interacts with the Compatibility Profile.
655bd8deadSopenharmony_ci
665bd8deadSopenharmony_ci    This extension interacts with EXT_texture_compression_s3tc.
675bd8deadSopenharmony_ci
685bd8deadSopenharmony_ci    This extension interacts with OpenGL 3.0 and ARB_texture_compression_rgtc.
695bd8deadSopenharmony_ci
705bd8deadSopenharmony_ci    This extension interacts with OpenGL 4.2 and ARB_texture_compression_bptc.
715bd8deadSopenharmony_ci
725bd8deadSopenharmony_ciOverview
735bd8deadSopenharmony_ci
745bd8deadSopenharmony_ci    This extension enables efficient image data transfer between image
755bd8deadSopenharmony_ci    objects (i.e. textures and renderbuffers) without the need to bind
765bd8deadSopenharmony_ci    the objects or otherwise configure the rendering pipeline.
775bd8deadSopenharmony_ci
785bd8deadSopenharmony_ci    This is accomplised by adding a new entry-point CopyImageSubData,
795bd8deadSopenharmony_ci    which takes a named source and destination.
805bd8deadSopenharmony_ci
815bd8deadSopenharmony_ci    CopyImageSubData does not perform general-purpose conversions
825bd8deadSopenharmony_ci    such as scaling, resizing, blending, color-space, or format 
835bd8deadSopenharmony_ci    conversions. It should be considered to operate in a manner 
845bd8deadSopenharmony_ci    similar to a CPU memcpy, but using the GPU for the copy.
855bd8deadSopenharmony_ci
865bd8deadSopenharmony_ci    CopyImageSubData supports copies between images with different
875bd8deadSopenharmony_ci    internal formats, if the formats are compatible for TextureViews.
885bd8deadSopenharmony_ci
895bd8deadSopenharmony_ci    CopyImageSubData also supports copying between compressed and
905bd8deadSopenharmony_ci    uncompressed images if the compressed block / uncompressed texel
915bd8deadSopenharmony_ci    sizes are the same.
925bd8deadSopenharmony_ci
935bd8deadSopenharmony_ciNew Procedures and Functions
945bd8deadSopenharmony_ci
955bd8deadSopenharmony_ci    void CopyImageSubData(
965bd8deadSopenharmony_ci        uint srcName, enum srcTarget, int srcLevel,
975bd8deadSopenharmony_ci        int srcX, int srcY, int srcZ,
985bd8deadSopenharmony_ci        uint dstName, enum dstTarget, int dstLevel,
995bd8deadSopenharmony_ci        int dstX, int dstY, int dstZ,
1005bd8deadSopenharmony_ci        sizei srcWidth, sizei srcHeight, sizei srcDepth);
1015bd8deadSopenharmony_ci
1025bd8deadSopenharmony_ciNew Tokens
1035bd8deadSopenharmony_ci
1045bd8deadSopenharmony_ci    None
1055bd8deadSopenharmony_ci
1065bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 4.2 (Core Profile) Specification (Per-Fragment
1075bd8deadSopenharmony_ciOperations and the Frame Buffer)
1085bd8deadSopenharmony_ci
1095bd8deadSopenharmony_ci    Append to section 4.3.2 (Copying Pixels):
1105bd8deadSopenharmony_ci
1115bd8deadSopenharmony_ci    The function
1125bd8deadSopenharmony_ci
1135bd8deadSopenharmony_ci        void CopyImageSubData(
1145bd8deadSopenharmony_ci            uint srcName, enum srcTarget, int srcLevel,
1155bd8deadSopenharmony_ci            int srcX, int srcY, int srcZ,
1165bd8deadSopenharmony_ci            uint dstName, enum dstTarget, int dstLevel,
1175bd8deadSopenharmony_ci            int dstX, int dstY, int dstZ,
1185bd8deadSopenharmony_ci            sizei srcWidth, sizei srcHeight, sizei srcDepth);
1195bd8deadSopenharmony_ci
1205bd8deadSopenharmony_ci    may be used to copy a region of texel data between two image
1215bd8deadSopenharmony_ci    objects.  An image object may be either a texture or a
1225bd8deadSopenharmony_ci    renderbuffer.
1235bd8deadSopenharmony_ci
1245bd8deadSopenharmony_ci    CopyImageSubData does not perform general-purpose conversions
1255bd8deadSopenharmony_ci    such as scaling, resizing, blending, color-space, or format 
1265bd8deadSopenharmony_ci    conversions. It should be considered to operate in a manner 
1275bd8deadSopenharmony_ci    similar to a CPU memcpy. CopyImageSubData can copy between 
1285bd8deadSopenharmony_ci    images with different internal formats, provided
1295bd8deadSopenharmony_ci    the formats are compatible. 
1305bd8deadSopenharmony_ci
1315bd8deadSopenharmony_ci    CopyImageSubData also allows copying between certain 
1325bd8deadSopenharmony_ci    types of compressed and uncompressed internal formats as detailed
1335bd8deadSopenharmony_ci    in Table 4.X.1. This copy does not perform on-the-fly compression
1345bd8deadSopenharmony_ci    or decompression. When copying from an uncompressed internal format
1355bd8deadSopenharmony_ci    to a compressed internal format, each texel of uncompressed data
1365bd8deadSopenharmony_ci    becomes a single block of compressed data. When copying from a
1375bd8deadSopenharmony_ci    compressed internal format to an uncompressed internal format,
1385bd8deadSopenharmony_ci    a block of compressed data becomes a single texel of uncompressed
1395bd8deadSopenharmony_ci    data. The texel size of the uncompressed format must be the same
1405bd8deadSopenharmony_ci    size the block size of the compressed formats. Thus it is permitted
1415bd8deadSopenharmony_ci    to copy between a 128-bit uncompressed format and a compressed
1425bd8deadSopenharmony_ci    format which uses 8-bit 4x4 blocks, or between a 64-bit uncompressed
1435bd8deadSopenharmony_ci    format and a compressed format which uses 4-bit 4x4 blocks.
1445bd8deadSopenharmony_ci    INVALID_OPERATION is generated if the texel size of
1455bd8deadSopenharmony_ci    the uncompressed image is not equal to the block size of the
1465bd8deadSopenharmony_ci    compressed image.
1475bd8deadSopenharmony_ci
1485bd8deadSopenharmony_ci    The source object is identified by <srcName> and <srcTarget>.
1495bd8deadSopenharmony_ci    Similarly the destination object is identified by <dstName> and
1505bd8deadSopenharmony_ci    <dstTarget>.  The interpretation of the name depends on the value
1515bd8deadSopenharmony_ci    of the corresponding target parameter.  If the target parameter is
1525bd8deadSopenharmony_ci    RENDERBUFFER, the name is interpreted as the name of a
1535bd8deadSopenharmony_ci    renderbuffer object.  If the target parameter is a texture target,
1545bd8deadSopenharmony_ci    the name is interpreted as a texture object.  All non-proxy
1555bd8deadSopenharmony_ci    texture targets are accepted, with the exception of TEXTURE_BUFFER
1565bd8deadSopenharmony_ci    and the cubemap face selectors described in table 3.17. 
1575bd8deadSopenharmony_ci    INVALID_ENUM is generated if either target is not RENDERBUFFER
1585bd8deadSopenharmony_ci    or a valid non-proxy texture target, or is TEXTURE_BUFFER, or is one
1595bd8deadSopenharmony_ci    of the cubemap face selectors described in table 3.17, or if the
1605bd8deadSopenharmony_ci    target does not match the type of the object. INVALID_OPERATION
1615bd8deadSopenharmony_ci    is generated if either object is a texture and the texture is
1625bd8deadSopenharmony_ci    not complete (as defined in section 3.9.14), if the source and 
1635bd8deadSopenharmony_ci    destination internal formats are not compatible (see below), 
1645bd8deadSopenharmony_ci    or if the number of samples do not match.  
1655bd8deadSopenharmony_ci    INVALID_VALUE is generated if either name does not correspond to a
1665bd8deadSopenharmony_ci    valid renderbuffer or texture object according to the corresponding
1675bd8deadSopenharmony_ci    target parameter.
1685bd8deadSopenharmony_ci
1695bd8deadSopenharmony_ci    <srcLevel> and <dstLevel> identify the source and destination
1705bd8deadSopenharmony_ci    level of detail.  For textures, this must be a valid level of
1715bd8deadSopenharmony_ci    detail in the texture object.  For renderbuffers, this value must
1725bd8deadSopenharmony_ci    be zero. INVALID_VALUE is generated if the specified level is not
1735bd8deadSopenharmony_ci    a valid level for the image.
1745bd8deadSopenharmony_ci
1755bd8deadSopenharmony_ci    <srcX>, <srcY>, and <srcZ> specify the lower left texel
1765bd8deadSopenharmony_ci    coordinates of a <srcWidth>-wide by <srcHeight>-high by 
1775bd8deadSopenharmony_ci    <srcDepth>-deep rectangular subregion of the source texel array.  
1785bd8deadSopenharmony_ci    (Compatibility Only: Negative values
1795bd8deadSopenharmony_ci    of <srcX>, <srcY>, and <srcZ> correspond to the coordinates of
1805bd8deadSopenharmony_ci    border texels, addressed as in figure 3.10.)  Similarly, <dstX>,
1815bd8deadSopenharmony_ci    <dstY> and <dstZ> specify the coordinates of a subregion of the
1825bd8deadSopenharmony_ci    destination texel array.  The source and destination subregions
1835bd8deadSopenharmony_ci    must be contained entirely within the specified level of the
1845bd8deadSopenharmony_ci    corresponding image objects. 
1855bd8deadSopenharmony_ci    The dimensions are always specified in texels, even for compressed
1865bd8deadSopenharmony_ci    texture formats. But it should be noted that if only one of the
1875bd8deadSopenharmony_ci    source and destination textures is compressed then the number of
1885bd8deadSopenharmony_ci    texels touched in the compressed image will be a factor of the
1895bd8deadSopenharmony_ci    block size larger than in the uncompressed image.
1905bd8deadSopenharmony_ci    INVALID_VALUE is generated if the
1915bd8deadSopenharmony_ci    dimensions of the either subregion exceeds the boundaries of the
1925bd8deadSopenharmony_ci    corresponding image object, or if the image format is compressed
1935bd8deadSopenharmony_ci    and the dimensions of the subregion fail to meet the alignment
1945bd8deadSopenharmony_ci    constraints of the format.
1955bd8deadSopenharmony_ci
1965bd8deadSopenharmony_ci    Slices of a TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY
1975bd8deadSopenharmony_ci    TEXTURE_3D and faces of TEXTURE_CUBE_MAP are all compatible provided 
1985bd8deadSopenharmony_ci    they share a compatible internal format, and multiple slices or faces
1995bd8deadSopenharmony_ci    may be copied between these objects with a single call by specifying the
2005bd8deadSopenharmony_ci    starting slice with <srcZ> and <dstZ>, and the number of slices to
2015bd8deadSopenharmony_ci    be copied with <srcDepth>.  Cubemap textures always have six faces
2025bd8deadSopenharmony_ci    which are selected by a zero-based face index, according to the
2035bd8deadSopenharmony_ci    order specified in table 3.17.
2045bd8deadSopenharmony_ci
2055bd8deadSopenharmony_ci    For the purposes of CopyImageSubData, two internal formats
2065bd8deadSopenharmony_ci    are considered compatible if any of the following conditions are
2075bd8deadSopenharmony_ci    met:
2085bd8deadSopenharmony_ci     * the formats are the same,
2095bd8deadSopenharmony_ci     * the formats are considered compatible according to the 
2105bd8deadSopenharmony_ci       compatibility rules used for texture views as defined in 
2115bd8deadSopenharmony_ci       section 3.9.X. In particular, if both internal formats are listed
2125bd8deadSopenharmony_ci       in the same entry of Table 3.X.2, they are considered compatible, or
2135bd8deadSopenharmony_ci     * one format is compressed and the other is uncompressed and
2145bd8deadSopenharmony_ci       Table 4.X.1 lists the two formats in the same row.
2155bd8deadSopenharmony_ci    If the formats are not compatible INVALID_OPERATION is generated.
2165bd8deadSopenharmony_ci
2175bd8deadSopenharmony_ci    ------------------------------------------------------------------------
2185bd8deadSopenharmony_ci    | Texel / | Uncompressed         |                                     |
2195bd8deadSopenharmony_ci    | Block   | internal format      | Compressed internal format          |
2205bd8deadSopenharmony_ci    | size    |                      |                                     | 
2215bd8deadSopenharmony_ci    ------------------------------------------------------------------------
2225bd8deadSopenharmony_ci    | 128-bit | RGBA32UI,            | COMPRESSED_RGBA_S3TC_DXT3_EXT,      |
2235bd8deadSopenharmony_ci    |         | RGBA32I,             | COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,|
2245bd8deadSopenharmony_ci    |         | RGBA32F              | COMPRESSED_RGBA_S3TC_DXT5_EXT,      |
2255bd8deadSopenharmony_ci    |         |                      | COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,|
2265bd8deadSopenharmony_ci    |         |                      | COMPRESSED_RG_RGTC2,                |
2275bd8deadSopenharmony_ci    |         |                      | COMPRESSED_SIGNED_RG_RGTC2,         |
2285bd8deadSopenharmony_ci    |         |                      | COMPRESSED_RGBA_BPTC_UNORM,         |
2295bd8deadSopenharmony_ci    |         |                      | COMPRESSED_SRGB_ALPHA_BPTC_UNORM,   |
2305bd8deadSopenharmony_ci    |         |                      | COMPRESSED_RGB_BPTC_SIGNED_FLOAT,   |
2315bd8deadSopenharmony_ci    |         |                      | COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT  |
2325bd8deadSopenharmony_ci    ------------------------------------------------------------------------
2335bd8deadSopenharmony_ci    | 64-bit  | RGBA16F, RG32F,      | COMPRESSED_RGB_S3TC_DXT1_EXT,       |
2345bd8deadSopenharmony_ci    |         | RGBA16UI, RG32UI,    | COMPRESSED_SRGB_S3TC_DXT1_EXT,      |
2355bd8deadSopenharmony_ci    |         | RGBA16I, RG32I,      | COMPRESSED_RGBA_S3TC_DXT1_EXT,      |
2365bd8deadSopenharmony_ci    |         | RGBA16, RGBA16_SNORM | COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,|
2375bd8deadSopenharmony_ci    |         |                      | COMPRESSED_RED_RGTC1,               |
2385bd8deadSopenharmony_ci    |         |                      | COMPRESSED_SIGNED_RED_RGTC1         |
2395bd8deadSopenharmony_ci    ------------------------------------------------------------------------
2405bd8deadSopenharmony_ci
2415bd8deadSopenharmony_ci        Table 4.X.1: Compatible internal formats for copying between
2425bd8deadSopenharmony_ci        compressed and uncompressed internal formats with CopyImageSubData.
2435bd8deadSopenharmony_ci        Formats in the same row can be copied between each other.
2445bd8deadSopenharmony_ci
2455bd8deadSopenharmony_ci
2465bd8deadSopenharmony_ciDependencies on OpenGL 4.3 and ARB_texture_view:
2475bd8deadSopenharmony_ci
2485bd8deadSopenharmony_ci    If OpenGL 4.3 or later and ARB_texture_view are not supported,
2495bd8deadSopenharmony_ci    any references to view-compatible image formats should be removed.
2505bd8deadSopenharmony_ci
2515bd8deadSopenharmony_ciDependencies on the Compatibility Profile:
2525bd8deadSopenharmony_ci
2535bd8deadSopenharmony_ci    If the Compatibility Profile is not supported, remove any 
2545bd8deadSopenharmony_ci    references to negative values for the source dimensions and
2555bd8deadSopenharmony_ci    to border texels.
2565bd8deadSopenharmony_ci
2575bd8deadSopenharmony_ciDependencies on EXT_texture_compression_s3tc:
2585bd8deadSopenharmony_ci
2595bd8deadSopenharmony_ci    If EXT_texture_compression_s3tc is not supported, remove any
2605bd8deadSopenharmony_ci    references to S3TC compressed texture formats.
2615bd8deadSopenharmony_ci
2625bd8deadSopenharmony_ciDependencies on OpenGL 3.0 and ARB_texture_compression_rgtc:
2635bd8deadSopenharmony_ci
2645bd8deadSopenharmony_ci    If OpenGL 3.0 or later, and ARB_texture_compression_rgtc is not
2655bd8deadSopenharmony_ci    supported, remove any references to the RGTC compressed texture
2665bd8deadSopenharmony_ci    formats.
2675bd8deadSopenharmony_ci
2685bd8deadSopenharmony_ciDependencies on OpenGL 4.2 and ARB_texture_compression_bptc:
2695bd8deadSopenharmony_ci
2705bd8deadSopenharmony_ci    If OpenGL 4.2 or later, and ARB_texture_compression_bptc is not
2715bd8deadSopenharmony_ci    supported, remove any references to the BPTC compressed texture
2725bd8deadSopenharmony_ci    formats.
2735bd8deadSopenharmony_ci    
2745bd8deadSopenharmony_ciErrors
2755bd8deadSopenharmony_ci
2765bd8deadSopenharmony_ci    CopyImageSubData may fail with any of the following errors:
2775bd8deadSopenharmony_ci
2785bd8deadSopenharmony_ci    INVALID_ENUM is generated
2795bd8deadSopenharmony_ci     * if either <srcTarget> or <dstTarget> 
2805bd8deadSopenharmony_ci      - is not RENDERBUFFER or a valid non-proxy texture target
2815bd8deadSopenharmony_ci      - is TEXTURE_BUFFER, or
2825bd8deadSopenharmony_ci      - is one of the cubemap face selectors described in table 3.17,
2835bd8deadSopenharmony_ci     * if the target does not match the type of the object.
2845bd8deadSopenharmony_ci
2855bd8deadSopenharmony_ci    INVALID_OPERATION is generated
2865bd8deadSopenharmony_ci     * if either object is a texture and the texture is not complete,
2875bd8deadSopenharmony_ci     * if the source and destination formats are not compatible,
2885bd8deadSopenharmony_ci     * if the source and destination number of samples do not match,
2895bd8deadSopenharmony_ci     * if one image is compressed and the other is uncompressed and the
2905bd8deadSopenharmony_ci       block size of compressed image is not equal to the texel size
2915bd8deadSopenharmony_ci       of the compressed image.
2925bd8deadSopenharmony_ci
2935bd8deadSopenharmony_ci    INVALID_VALUE is generated
2945bd8deadSopenharmony_ci     * if either <srcName> or <dstName> does not correspond to a valid
2955bd8deadSopenharmony_ci       renderbuffer or texture object according to the corresponding
2965bd8deadSopenharmony_ci       target parameter, or
2975bd8deadSopenharmony_ci     * if the specified level is not a valid level for the image, or
2985bd8deadSopenharmony_ci     * if the dimensions of the either subregion exceeds the boundaries 
2995bd8deadSopenharmony_ci       of the corresponding image object, or
3005bd8deadSopenharmony_ci     * if the image format is compressed and the dimensions of the
3015bd8deadSopenharmony_ci       subregion fail to meet the alignment constraints of the format.
3025bd8deadSopenharmony_ci
3035bd8deadSopenharmony_ciSample Code
3045bd8deadSopenharmony_ci
3055bd8deadSopenharmony_ci    TBD
3065bd8deadSopenharmony_ci
3075bd8deadSopenharmony_ciIssues
3085bd8deadSopenharmony_ci
3095bd8deadSopenharmony_ci    1) Should there be a single function for all image types, or
3105bd8deadSopenharmony_ci       "per-dimensional" functions?
3115bd8deadSopenharmony_ci
3125bd8deadSopenharmony_ci       RESOLVED:  A single function can support all image types.  Not only are
3135bd8deadSopenharmony_ci       per-dimensional functions an unnecessary convenience, they also
3145bd8deadSopenharmony_ci       restrict some of the flexibility offered by this extension,
3155bd8deadSopenharmony_ci       e.g. copying a slice of data between a 2D and a 3D image.
3165bd8deadSopenharmony_ci
3175bd8deadSopenharmony_ci    2) Should the extension support "deep copies", i.e. multiple slices of
3185bd8deadSopenharmony_ci       a 3D texture, a 2D array texture, or a cubemap?
3195bd8deadSopenharmony_ci
3205bd8deadSopenharmony_ci       RESOLVED: Yes, there may be performance advantages in copying a multiple
3215bd8deadSopenharmony_ci       slices in a single call.
3225bd8deadSopenharmony_ci
3235bd8deadSopenharmony_ci    3) Should renderbuffers be supported by the same function as textures?
3245bd8deadSopenharmony_ci
3255bd8deadSopenharmony_ci       RESOLVED: Yes, there is no fundamental difference between the two object
3265bd8deadSopenharmony_ci       classes, and allowing them to be used interchangeably has the
3275bd8deadSopenharmony_ci       advantage of allowing data transfers between them.
3285bd8deadSopenharmony_ci
3295bd8deadSopenharmony_ci    4) Is the "target" parameter necessary?
3305bd8deadSopenharmony_ci
3315bd8deadSopenharmony_ci       RESOLVED: Yes, given the current object model and texture API, there are
3325bd8deadSopenharmony_ci       two obvious applications of the target parameter:
3335bd8deadSopenharmony_ci
3345bd8deadSopenharmony_ci           1) Allows the selection of a single cubemap face.
3355bd8deadSopenharmony_ci           2) Differentiate between TEXTURE and RENDERBUFFER targets.
3365bd8deadSopenharmony_ci
3375bd8deadSopenharmony_ci    5) Should the target TEXTURE_CUBE_MAP be supported, and with what
3385bd8deadSopenharmony_ci       behavior?
3395bd8deadSopenharmony_ci
3405bd8deadSopenharmony_ci       RESOLVED: Given the resolution of issue 7, this is moot.  The
3415bd8deadSopenharmony_ci        TEXTURE_CUBE_MAP token is the only way to access a cubemap.
3425bd8deadSopenharmony_ci    
3435bd8deadSopenharmony_ci    6) Should the "extra" parameters for a given dimension be ignored, or
3445bd8deadSopenharmony_ci       should there be required values?
3455bd8deadSopenharmony_ci    
3465bd8deadSopenharmony_ci        Resolved.
3475bd8deadSopenharmony_ci    
3485bd8deadSopenharmony_ci        All parameters are required to have sensible values, for the
3495bd8deadSopenharmony_ci        simple reason that future extensions may give meaning to these
3505bd8deadSopenharmony_ci        values.  For dimensions which are currently superfluous, the
3515bd8deadSopenharmony_ci        offset must be zero and the size must be one, e.g. if the target
3525bd8deadSopenharmony_ci        is TEXTURE_2D, z must be 0 and depth must be 1.
3535bd8deadSopenharmony_ci    
3545bd8deadSopenharmony_ci    7) Should the per-face cubemap targets be accepted at all?  Why not
3555bd8deadSopenharmony_ci       use Z as the selector?
3565bd8deadSopenharmony_ci
3575bd8deadSopenharmony_ci        Resolved.
3585bd8deadSopenharmony_ci
3595bd8deadSopenharmony_ci        The existing per-face targets effectively define the face order:
3605bd8deadSopenharmony_ci
3615bd8deadSopenharmony_ci           face_index = face_target - TEXTURE_CUBE_MAP_POSITIVE_X;
3625bd8deadSopenharmony_ci
3635bd8deadSopenharmony_ci        Therefore it makes sense to generalize a cubemap as an array of
3645bd8deadSopenharmony_ci        size 6, and use the Z parameter to select the face(s).
3655bd8deadSopenharmony_ci
3665bd8deadSopenharmony_ci    8) How is this extension different from NV_copy_image?
3675bd8deadSopenharmony_ci
3685bd8deadSopenharmony_ci        RESOLVED: This extension does not include the WGL/GLX windowing-
3695bd8deadSopenharmony_ci        layer copy functions. This extension adds the ability to copy
3705bd8deadSopenharmony_ci        between images which have different formats where the formats 
3715bd8deadSopenharmony_ci        are compatible for texture views. This extension adds the ability
3725bd8deadSopenharmony_ci        to copy between uncompressed and compressed images if the texel
3735bd8deadSopenharmony_ci        and block sizes are the same.
3745bd8deadSopenharmony_ci
3755bd8deadSopenharmony_ci    9) Please explain copying between compressed and uncompressed images.
3765bd8deadSopenharmony_ci       Is the copy doing compression/decompression on the fly?
3775bd8deadSopenharmony_ci
3785bd8deadSopenharmony_ci       DISCUSSION. The CopyImageSubData does NOT provide any on-the-fly
3795bd8deadSopenharmony_ci       compression, decompression, or even any format conversions.
3805bd8deadSopenharmony_ci       Instead, it provides the ability for an application to implement
3815bd8deadSopenharmony_ci       it's own compressor in a shader by constructing the blocks and
3825bd8deadSopenharmony_ci       writing them out as texels and then copying them to a compressed
3835bd8deadSopenharmony_ci       texture so that it can in turn be used for sampling.
3845bd8deadSopenharmony_ci
3855bd8deadSopenharmony_ci    (10) Is copying from/to images with ETC2/EAC compressed texture formats
3865bd8deadSopenharmony_ci         defined?
3875bd8deadSopenharmony_ci
3885bd8deadSopenharmony_ci    RESOLVED: Only when the source and destination formats are identical,
3895bd8deadSopenharmony_ci    because texture view classes for ETC2/EAC are not defined (see issue 13
3905bd8deadSopenharmony_ci    of the ARB_texture_view specification).
3915bd8deadSopenharmony_ci
3925bd8deadSopenharmony_ciRevision History
3935bd8deadSopenharmony_ci
3945bd8deadSopenharmony_ci    Rev.    Date       Author    Changes
3955bd8deadSopenharmony_ci    ----  --------     --------  -----------------------------------------
3965bd8deadSopenharmony_ci     1    04/26/2012   gsellers  Initial revision based on NV_copy_image.
3975bd8deadSopenharmony_ci     2    05/08/2012   dgkoch    Update some references for 4.2 spec
3985bd8deadSopenharmony_ci                                 Allow copies between view-compatible images.
3995bd8deadSopenharmony_ci                                 Allow copies between compressed/uncompressed images.
4005bd8deadSopenharmony_ci                                 Clarify errors, updated overview.
4015bd8deadSopenharmony_ci     3    05/10/2012   dgkoch    Clarify dimensions refer to texels in the src image.
4025bd8deadSopenharmony_ci                                 Re-order/reflow text to make it read better.
4035bd8deadSopenharmony_ci                                 Add mention of TEXTURE_CUBE_MAP_ARRAY.
4045bd8deadSopenharmony_ci     4    10/08/2013   Jon Leech Add issue 10 discussing why copying 
4055bd8deadSopenharmony_ci                                 involving conversions between ETC2/EAC
4065bd8deadSopenharmony_ci                                 compressed formats is not supported (Bug
4075bd8deadSopenharmony_ci                                 11011).
408