Name

    ANGLE_depth_texture

Name Strings

    GL_ANGLE_depth_texture

Contributors

    Nicolas Capens, TransGaming
    Kenneth Russell, Google
    Vangelis Kokkevis, Google
    Gregg Tavares, Google
    Contributors to OES_depth_texture
    Contributors to OES_packed_depth_stencil

Contact

    Daniel Koch, TransGaming (daniel 'at' transgaming.com)

Status

    Implemented in ANGLE.

Version

    Last Modifed Date: June 4, 2012
    Revision: #3

Number

    TBD

Dependencies

    OpenGL ES 2.0 is required.
    This extension is written against the OpenGL ES 2.0.25 specification

    OES_packed_depth_stencil affects the definition of this extension.

    EXT_texture_storage affects the definition of this extension.

Overview

    This extension defines support for 2D depth and depth-stencil
    textures in an OpenGL ES implementation.

    This extension incorporates the depth texturing functionality of 
    OES_depth_texture and OES_packed_depth_stencil, but does not 
    provide the ability to load existing data via TexImage2D or
    TexSubImage2D. This extension also allows implementation 
    variability in which components from a sampled depth texture
    contain the depth data. Depth textures created with this
    extension only support 1 level.

New Procedures and Functions

    None

New Tokens

    Accepted by the <format> parameter of TexImage2D and TexSubImage2D and
    <internalformat> parameter of TexImage2D:
    
        DEPTH_COMPONENT             0x1902
        DEPTH_STENCIL_OES           0x84F9
        
    Accepted by the <type> parameter of TexImage2D, TexSubImage2D: 

        UNSIGNED_SHORT              0x1403
        UNSIGNED_INT                0x1405
        UNSIGNED_INT_24_8_OES       0x84FA

    Accepted by the <internalformat> parameter of TexStorage2DEXT:

        DEPTH_COMPONENT16           0x81A5
        DEPTH_COMPONENT32_OES       0x81A7
        DEPTH24_STENCIL8_OES        0x88F0

Additions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL Operation)

    Update Section 2.10.5 "Shader Execution" in the subsection titled 
    "Texture Access" add a new paragraph before the last paragraph add
    this line:

    "The stencil index texture internal component is ignored if the base
    internal format is DEPTH_STENCIL_OES.

    If a vertex shader uses..."

Additions to Chapter 3 of the OpenGL ES 2.0 specification (Rasterizatoin)

    Add the following rows to Table 3.2 (page 62):

      type Parameter           GL Data Type    Special
      ------------------------------------------------
      ...                      ...              ...
      UNSIGNED_SHORT           ushort           No
      UNSIGNED_INT             uint             No
      UNSIGNED_INT_24_8_OES    uint             Yes

    Add the following rows to Table 3.3 (page 62):

      Format Name       Element Meaning and Order      Target Buffer
      ------------------------------------------------------------------
      ...               ...                            ...
      DEPTH_COMPONENT   Depth                          Depth
      DEPTH_STENCIL_OES Depth and Stencil Index        Depth and Stencil
      ...               ...                            ...

    Add a row to Table 3.5 "Packed pixel formats" (page 64):

      type Parameter               GL Type  Components  Pixel Formats
      ------------------------------------------------------------------
      ...                          ...      ...         ...
      UNSIGNED_INT_24_8_OES        uint     2           DEPTH_STENCIL_OES

    Add a new table after Table 3.6 (page 64):

    UNSIGNED_INT_24_8_OES

       31 30 29 28 27 26 ... 12 11 10 9 8 7 6 5 4 3 2 1 0
      +----------------------------------+---------------+
      |           1st Component          | 2nd Component |
      +----------------------------------+---------------+

      Table 3.6.B: UNSIGNED_INT formats

    Add a row to Table 3.7 "Packed pixel field assignments" (page 65):

      Format            |  1st     2nd     3rd     4th
      ------------------+-------------------------------
      ...               |  ...     ...     ...     ...
      DEPTH_STENCIL_OES |  depth   stencil N/A     N/A

    Add the following paragraph to the end of the section "Conversion to
    floating-point" (page 65):

    "For groups of components that contain both standard components and index
    elements, such as DEPTH_STENCIL_OES, the index elements are not converted."

    In section 3.7.1 "Texture Image Specification", update page 67 to
    say:

    "The selected groups are processed as described in section 3.6.2, stopping
    just before final conversion.  Each R, G, B, A, or depth value so generated
    is clamped to [0, 1], while the stencil index values are masked by 2^n-1,
    where n is the number of stencil bits in the internal format resolution
    (see below).

    Components are then selected from the resulting R, G, B, A, depth, or
    stencil index values to obtain a texture with the base internal format
    specified by <internalformat>.  Table 3.8 summarizes the mapping of R, G,
    B, A, depth, or stencil values to texture components, as a function of the
    base internal format of the texture image.  <internalformat> may be
    specified as one of the internal format symbolic constants listed in
    table 3.8. Specifying a value for <internalformat> that is not one of the
    above values generates the error INVALID_VALUE. If <internalformat> does
    not match <format>, the error INVALID_OPERATION is generated.

    Textures with a base internal format of DEPTH_COMPONENT or 
    DEPTH_STENCIL_OES are supported by texture image specification commands
    only if <target> is TEXTURE_2D.  Using these formats in conjunction with
    any other <target> will result in an INVALID_OPERATION error.

    Textures with a base internal format of DEPTH_COMPONENT or
    DEPTH_STENCIL_OES only support one level of image data.  Specifying a
    non-zero value for <level> will result in an INVALID_OPERATION error.

    Textures with a base internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES
    require either depth component data or depth/stencil component data.
    Textures with other base internal formats require RGBA component data.  The
    error INVALID_OPERATION is generated if the base internal format is
    DEPTH_COMPONENT or DEPTH_STENCIL_OES and <format> is not DEPTH_COMPONENT or
    DEPTH_STENCIL_OES, or if the base internal format is not DEPTH_COMPONENT or
    DEPTH_STENCIL_OES and <format> is DEPTH_COMPONENT or DEPTH_STENCIL_OES.

    Textures with a base internal format of DEPTH_COMPONENT or
    DEPTH_STENCIL_OES do not support loading image data via the TexImage
    commands. They can only have their contents specified by rendering
    to them. The INVALID_OPERATION error is generated by the TexImage2D
    command if <data> is not NULL for such textures."

    Add a row to table 3.8 (page 68), and update the title of the
    second column:

      Base Internal Format  RGBA, Depth and Stencil Values  Internal Components
      -------------------------------------------------------------------------
      ...                   ...                             ...
      DEPTH_COMPONENT       Depth                           D
      DEPTH_STENCIL_OES     Depth,Stencil                   D,S
      ...                   ...                             ...

    Update the caption for table 3.8 (page 68)

    "Table 3.8: Conversion from RGBA, depth, and stencil pixel components to
    internal texture components.  Texture components R, G, B, A, and L are 
    converted back to RGBA colors during filtering as shown in table 3.12.
    Texture components D are converted to RGBA colors as described in 
    section 3.7.8-1/2."

    Add the following to section 3.7.2 "Alternate Texture Image Specification
    Commands":

    "CopyTexImage2D and CopyTexSubImage2D generate the INVALID_OPERATION 
    error if the base internal format of the destination texture is 
    DEPTH_COMPONENT or DEPTH_STENCIL_OES.

    TexSubImage2D generates the INVALID_OPERATION error if the base internal
    format of the texture is DEPTH_COMPONENT or DEPTH_STENCIL_OES."

    Add a new section between sections 3.7.8 and 3.7.9:

    "3.7.8-1/2 Depth/Stencil Textures

    If the currently bound texture's base internal format is DEPTH_COMPONENT or
    DEPTH_STENCIL_OES, then the output of the texture unit is as described
    below. Otherwise, the texture unit operates in the normal manner.

    Let <D_t> be the depth texture value, provided by the shader's texture lookup
    function. Then the effective texture value, <L_t> or <A_t> is computed
    as follows:
            <Tau> = <D_t>

    If the texture image has a base internal format of DEPTH_STENCIL_OES, then
    the stencil index texture component is ignored.  The texture value <Tau> does
    not include a stencil index component, but includes only the depth
    component.

    The resulting <Tau> is assigned to <L_t>. In some implementations, 
    <Tau> is also assigned to <A_t>. Thus in table 3.12, textures with
    depth component data behave as if their base internal format is
    either LUMINANCE or LUMINANCE_ALPHA."

    Add the following to section 3.7.11 "Mipmap Generation":

    "If the level zero array contains depth or depth-stencil data, the
     error INVALID_OPERATION is generated."

    Insert a new paragraph after the first paragraph of the "Texture Access"
    subsection of section 3.8.2 on page 87, which says:

    "Texture lookups involving textures with depth component data generate
    a texture source color by using depth data directly, as described in
    section 3.7.8-1/2.  The stencil texture internal component is ignored
    if the base internal format is DEPTH_STENCIL_OES."

Additions to Chapter 4 of the OpenGL ES 2.0 specification (Per-Fragment
Operations and the Framebuffer)

    In section 4.4.5 "Framebuffer Completeness", replace the the 3rd
    paragraph with the following text:

     "* An internal format is color-renderable if it is one of the formats
        from table 4.5 noted as color-renderable or if it is unsized format
        RGBA or RGB. No other formats, including compressed internal formats,
        are color-renderable.

      * An internal format is depth-renderable if it is one of the sized
        internal formats from table 4.5 noted as depth-renderable, if it
        is the unsized format DEPTH_COMPONENT or if it is the internal 
        format value of DEPTH24_STENCIL8_OES. No other formats are 
        depth-renderable.

      * An internal format is stencil-renderable if it is one of the sized 
        internal formats from table 4.5 noted as stencil-renderable or if it
        is DEPTH24_STENCIL8_OES. No other formats are stencil-renderable."

Additions to Chapter 5 of the OpenGL ES 2.0 Specification (Special
Functions)

    None.

Additions to Chapter 6 of the OpenGL ES 2.0 Specification (State and State
Requests)

    None.

Interactions with OES_packed_depth_stencil

    If OES_packed_depth_stencil is not supported, mentions of
    DEPTH_STENCIL_OES and UNSIGNED_INT_24_8_OES as a format/type combinations
    for TexImage2D and TexSubImage2D are omitted. Mentions of
    the internal format DEPTH24_STENCIL8_OES are also omitted.

Interactions with EXT_texture_storage

    If EXT_texture_storage is supported the following internalformat
    to format/type mappings are used:

        <internalformat>       <format>           <type>
        ----------------       --------           ------
        DEPTH_COMPONENT16      DEPTH_COMPONENT    UNSIGNED_SHORT
        DEPTH_COMPONENT32_OES  DEPTH_COMPONENT    UNSIGNED_INT
        DEPTH24_STENCIL8_OES   DEPTH_STENCIL_OES  UNSIGNED_INT

    Textures with the above <internalformats> only support one level of
    image data. Specifying a value other than one for the <levels> parameter
    to TexStorage2DEXT will result in an INVALID_OPERATION error.

    If EXT_texture_storage is not supported, ignore any references
    to TexStorage2DEXT. 

Errors

    The error INVALID_OPERATION is generated by TexImage2D if <format> and 
    <internalformat> are DEPTH_COMPONENT and <type> is not UNSIGNED_SHORT,
    or UNSIGNED_INT.

    The error INVALID_OPERATION is generated by TexSubImage2D if <format> is 
    DEPTH_COMPONENT and <type> is not UNSIGNED_SHORT, or UNSIGNED_INT.

    The error INVALID_OPERATION is generated by TexImage2D if <format> and
    <internalformat> are not DEPTH_COMPONENT and <type> is UNSIGNED_SHORT,
    or UNSIGNED_INT.

    The error INVALID_OPERATION is generated by TexSubImage2D if <format> is
    not DEPTH_COMPONENT and <type> is UNSIGNED_SHORT, or UNSIGNED_INT.

    The error INVALID_OPERATION is generated by TexImage2D if <format> and
    <internalformat> are DEPTH_STENCIL_OES and <type> is not
    UNSIGNED_INT_24_8_OES. 

    The error INVALID_OPERATION is generated by TexSubImage2D if <format>
    is DEPTH_STENCIL_OES and <type> is not UNSIGNED_INT_24_8_OES. 

    The error INVALID_OPERATION is generated by TexImage2D if <format> and
    <internalformat> is not DEPTH_STENCIL_OES and <type> is 
    UNSIGNED_INT_24_8_OES.

    The error INVALID_OPERATION is generated by TexSubImage2D if <format>
    is not DEPTH_STENCIL_OES and <type> is UNSIGNED_INT_24_8_OES.

    The error INVALID_OPERATION is generated in the following situations:
    - TexImage2D is called with <format> and <internalformat> of
      DEPTH_COMPONENT or DEPTH_STENCIL_OES and
       - <target> is not TEXTURE_2D,
       - <data> is not NULL, or
       - <level> is not zero.
    - TexSubImage2D is called with <format> of DEPTH_COMPONENT or 
      DEPTH_STENCIL_OES.
    - TexStorage2DEXT is called with <internalformat> of DEPTH_COMPONENT16,
      DEPTH_COMPONENT32_OES, or DEPTH24_STENCIL8_OES, and 
       - <target> is not TEXTURE_2D, or
       - <levels> is not one.
    - CopyTexImage2D is called with an <internalformat> that has a base
      internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES.
    - CopyTexSubImage2D is called with a target texture that has a base
      internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES.
    - GenerateMipmap is called on a texture that has a base internal format
      of DEPTH_COMPONENT or DEPTH_STENCIL_OES.
    
New State

    None.

Issues

    1) What are the differences between this extension and OES_depth_texture
       and OES_packed_depth_stencil?
    
       RESOLVED: This extension:
         - does not support loading pre-baked depth stencil data via 
           TexImage2D or TexSubImage2D.
         - allows variability in w-component of the sample results from
           depth textures.
         - only supports one level textures.
         - explicitly lists the errors for unsupported functionality.
           Since these were not clearly specified in the OES_depth_texture
           extension there may be differences in error values between 
           implementations of OES_depth_texture and ANGLE_depth_texture.
       This specification was also rebased to apply against the OpenGL ES 2.0
       specification instead of the OpenGL specification, making it more 
       obvious what all the functionality changes are.

    2) Why does TexSubImage2D accept the new format/type combinations even
       though it does not actually support loading data?

       RESOLVED: This was done to be more consistent with the OES_depth_texture
       extension and to make it easier to add support for loading texture
       data if it is possible to support in the future.

    3) Why are only 1-level depth textures supported? 

       RESOLVED: The only use for multiple levels of depth textures would
       be for fitlered texturing. However since it is not possible to
       render to non-zero-level texture levels in OpenGL ES 2.0, and since
       this extension forbids loading existing data and GenerateMipmap on 
       depth textures, it is impossible to initialize or specify contents
       for non-zero levels of depth textures.

Revision History
 
    06/04/2012  dgkoch  fix errors, disallow multi-level depth textures.
    05/30/2012  dgkoch  minor updates and add issues.
    05/23/2012  dgkoch  intial revision based on OES_depth_texture and 
                        OES_packed_depth_stencil and rebased against the ES 2.0 spec

