Name

    APPLE_copy_texture_levels
    
Name Strings

    GL_APPLE_copy_texture_levels

Contact

    Eric Sunalp, Apple Inc., (esunalp 'at' apple.com)
    
Contributors

    Alex Eddy, Apple
    Richard Schreyer, Apple
    Eric Sunalp, Apple
    Michael Swift, Apple

Status

    Complete
    
Version

    Last Modified Date:     November 29, 2011
    Revision:               2

Number

    OpenGL ES Extension #123

Dependencies

    OpenGL ES 1.1 or OpenGL ES 2.0 is required.
    
    EXT_texture_storage is required.
    
    This specification is written against the OpenGL ES 2.0.25 (Full Specification).

Overview

    This extension provides an efficient path for copying a contiguous subset of mipmap 
    levels from one texture to the matching subset of mipmap levels of another texture, 
    where matches are determined by the equality of a level's dimensions.
    
    This extension is dependent on the existence of the extension EXT_texture_storage.
    Immutable textures are used to guarantee that storage is allocated up front for the
    source and destination textures and that the internal formats of those textures are 
    sized the same.
    
    An efficient copy can be achieved by implementations because the internal storage 
    requirements are the same between textures and will remain unchanged when moving data. 
    It is expected that in all cases, moving levels from one texture to another is a 
    simple copy operation without any necessary conversion. This extension can be used as
    an alternative to TEXTURE_BASE_LEVEL. In some implementations, changing the value of
    TEXTURE_BASE_LEVEL can incur a costly re-allocation at runtime.
    
    Texture streaming is an expected use case for this extension. For example, a developer
    may want to stream in a larger base level for a given texture from a storage device. 
    To achieve this, a copy of the current mipmap levels are made into a destination 
    whose storage was specified to accommodate the source levels and the larger base 
    level. The efficiency of the copy without conversion allows for the smaller mipmap 
    levels to be in place while the larger base level is being read from the storage 
    device and uploaded.

New Tokens

    None
    
New Procedures and Functions

    void CopyTextureLevelsAPPLE(uint destinationTexture, uint sourceTexture,
                           int sourceBaseLevel, sizei sourceLevelCount);

New State

   None

New Implementation Dependent State

   None

Additions to Chapter 3 of the 2.0.25 Specification (Rasterization)

    -- Restate the first paragraph of section 3.7.2, Alternate Texture Image Specification 
       Commands

    Texture images may also be specified using image data taken directly from the  
    framebuffer or from a subset of levels of a given texture. Rectangular subregions of 
    existing texture images may also be respecified.

    -- Append to section 3.7.2, Alternate Texture Image Specification Commands

    The command
    
        void CopyTextureLevelsAPPLE(uint destinationTexture, uint sourceTexture,
                               int sourceBaseLevel, sizei sourceLevelCount);

    is used to specify a texture image by copying a contiguous subset of mipmap levels 
    from one texture to the matching subset of mipmap levels of another texture, where 
    matches are determined by the equality of a level's dimensions. An INVALID_OPERATION 
    is generated when the count and dimensions of the source texture levels don't exactly 
    match the count and dimensions of a subset of corresponding destination texture 
    levels.
    
    Both <sourceTexture> and <destinationTexture> specify the texture object names to act
    as the source and destination of the copy as apposed to operating on the currently 
    bound textures for a given set of texture units.
    
    It is a requirement that both <sourceTexture> and <destinationTexture> are immutable 
    textures and that they are both specified with the same sized internal format 
    enumeration. An INVALID_OPERATION is generated if either texture's 
    TEXTURE_IMMUTABLE_FORMAT_EXT is FALSE or if the sized internal formats don't match.
    It is a requirement that the <sourceTexture>'s target specification is the same as
    the <destinationTexture>'s target specification. If not, then an INVALID_OPERATION
    is generated.

    <sourceBaseLevel> and <sourceLevelCount> are used to specify the inclusive range of 
    mipmap levels to be copied from the source texture to the destination texture. 
    <sourceBaseLevel> can assume a value from zero to n-1, where n is the number of levels
    for which the source texture was specified. Anything outside of this range will result 
    in the generation of an INVALID_VALUE error. <sourceLevelCount> is added to 
    <sourceBaseLevel> to specify the range of levels to be copied to the destination. An 
    INVALID_VALUE is generated if that value is greater than the number of levels for
    which the source texture was specified. Additionally, <sourceLevelCount> must be 
    equal to or greater than one, or an INVALID_VALUE will be generated.

Errors

    The error INVALID_OPERATION is generated by CopyTextureLevelsAPPLE when the count and 
    dimensions of the source texture levels, from source base level to source base level 
    plus source level count, don't exactly match the count and dimensions of a subset of 
    matching destination texture levels.
    
    The error INVALID_OPERATION is generated by CopyTextureLevelsAPPLE if either the
    source texture or destination texture is a texture for which
    TEXTURE_IMMUTABLE_FORMAT_EXT is FALSE.
    
    The error INVALID_OPERATION is generated by CopyTextureLevelsAPPLE if the internal format
    of the source texture is different than that of the destination texture.
    
    The error INVALID_OPERATION is generated by CopyTextureLevelsAPPLE if the source and
    the destination target specification differ.
    
    The error INVALID_VALUE is generated by CopyTextureLevelsAPPLE if the value passed to
    the parameter <sourceTexture> or <destinationTexture> is zero.
    
    The error INVALID_VALUE is generated by CopyTextureLevelsAPPLE if the value passed to
    the parameter <sourceBaseLevel> is less than zero.
    
    The error INVALID_VALUE is generated by CopyTextureLevelsAPPLE if the value passed to
    the parameter <sourceBaseLevel> is greater than n-1, where n is the number of levels
    for which the source texture was specified.
    
    The error INVALID_VALUE is generated by CopyTextureLevelsAPPLE if the value passed to
    the parameter <sourceLevelCount>, is less than one, or when added to the parameter 
    <sourceBaseLevel>, is greater than n-1, where n is the number of levels for which the 
    source texture was specified.

Issues

    None
    
Revision History

    Revision 2, 2011/11/29 (Eric Sunalp)
        - Incorporate initial feedback.

    Revision 1, 2011/11/10 (Eric Sunalp)
        - Draft proposal.
