Name

    ARB_texture_stencil8

Name Strings

    GL_ARB_texture_stencil8

Contact

    Jeff Bolz, NVIDIA Corporation (jbolz 'at' nvidia.com)

Contributors

    Piers Daniell, NVIDIA
    Daniel Koch, NVIDIA
    Jon Leech

Notice

    Copyright (c) 2013 The Khronos Group Inc. Copyright terms at
        http://www.khronos.org/registry/speccopyright.html

Specification Update Policy

    Khronos-approved extension specifications are updated in response to
    issues and bugs prioritized by the Khronos OpenGL Working Group. For
    extensions which have been promoted to a core Specification, fixes will
    first appear in the latest version of that core Specification, and will
    eventually be backported to the extension document. This policy is
    described in more detail at
        https://www.khronos.org/registry/OpenGL/docs/update_policy.php

Status

    Complete. Approved by the ARB on June 3, 2013.
    Ratified by the Khronos Board of Promoters on July 19, 2013.

Version

    Last Modified Date:         August 26, 2013
    Revision:                   5

Number

    ARB Extension #150

Dependencies

    This extension is written against the OpenGL 4.3 specification
    (Compatibility Profile).

Overview

    This extension accepts STENCIL_INDEX8 as a texture internal format, and
    adds STENCIL_INDEX8 to the required internal format list. This removes the
    need to use renderbuffers if a stencil-only format is desired.

New Procedures and Functions

    None.

New Tokens

    Accepted by the <format> parameter of TexImage3D, TexImage2D, TexImage1D,
    TexSubImage3D, TexSubImage2D, TexSubImage1D, or GetTexImage:

        STENCIL_INDEX           0x1901  /* existing enum */

    Accepted by the <internalformat> parameter of TexImage3D, TexImage2D,
    TexImage1D, CopyTexImage2D, CopyTexImage1D, TexStorage3D, TexStorage2D,
    TexStorage1D, TexImage3DMultisample, TexImage2DMultisample,
    TexStorage3DMultisample, TexStorage2DMultisample:

        STENCIL_INDEX8          0x8D48  /* existing enum */

Additions to Chapter 8 of the OpenGL 4.3 (Compatibility Profile) Specification
(Textures and Samplers)

    Modify Section 8.5 Texture Image Specification, p. 205

    In the first paragraph, replace "The <format> STENCIL_INDEX is not allowed"
    with "An INVALID_OPERATION error is generated if the <format> is
    STENCIL_INDEX and the base internal format is not STENCIL_INDEX."


    Modify the last paragraph of p. 207 to include STENCIL_INDEX:

    "Textures with a base internal format of DEPTH_COMPONENT, DEPTH_STENCIL,
    or STENCIL_INDEX are supported by texture image specification commands
    only if <target> is TEXTURE_1D, TEXTURE_2D, TEXTURE_1D_ARRAY,
    TEXTURE_2D_ARRAY, TEXTURE_RECTANGLE, TEXTURE_CUBE_MAP,
    TEXTURE_CUBE_MAP_ARRAY, TEXTURE_2D_MULTISAMPLE,
    TEXTURE_2D_MULTISAMPLE_ARRAY, PROXY_TEXTURE_1D, PROXY_TEXTURE_2D,
    PROXY_TEXTURE_1D_ARRAY, PROXY_TEXTURE_2D_ARRAY, PROXY_TEXTURE_RECTANGLE,
    PROXY_TEXTURE_CUBE_MAP, PROXY_TEXTURE_CUBE_MAP_ARRAY,
    PROXY_TEXTURE_2D_MULTISAMPLE or PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY."

    Add a row to Table 8.18: Conversion from RGBA, depth, and stencil pixel
    components to internal texture, table, or filter components

        Base Internal Format    RGBA, Depth, and Stencil Values     Internal Components

        STENCIL_INDEX           Stencil                             S


    Add to the list of required texture internal formats:

        - Stencil formats: STENCIL_INDEX8


    Add rows to Table 8.21: Correspondence of sized internal depth and stencil
    formats to base internal formats, internal data type, and desired component
    resolutions for each sized internal format

        Sized Internal Format       Base Internal Format    D bits      S bits

        STENCIL_INDEX8              STENCIL_INDEX           <blank>     8

    Modify Section 8.6 Alternate Texture Image Specification Commands, p. 222

    ...The image is taken from the framebuffer exactly as if these arguments
    were passed to CopyPixels (see section 18.3) with argument type set to
    COLOR, DEPTH, DEPTH_STENCIL, or STENCIL_INDEX, depending on internalformat,
    stopping after pixel transfer processing is complete.

    Modify Section 8.11 Texture Queries, p. 246

    If format is DEPTH_COMPONENT, DEPTH_STENCIL, or STENCIL_INDEX then each
    depth component and/or stencil index is assigned with the same ordering of
    rows and images.

    Modifications to the errors section for GetTexImage, p. 247,

    Delete the following error:

    An INVALID_ENUM error is generated if <format> is STENCIL_INDEX.

    Add a bullet to the list of reasons for INVALID_OPERATION error:

    - <format> is STENCIL_INDEX and the base internal format is not
      STENCIL_INDEX or DEPTH_STENCIL.

    Modify 8.17 Texture Completeness, p. 263

    Modify the bullet point on p. 263 describing required texture filter
    modes for an integer texture in order to determine texture completeness,
    to add STENCIL_INDEX textures explicitly:

    - The internal format of the texture is integer (see tables 8.19-8.20)
      or STENCIL_INDEX, and either the magnification filter is not NEAREST,
      or the minification filter is neither NEAREST nor
      NEAREST_MIPMAP_NEAREST.

    Modify 8.22.1 Depth Texture Comparison Mode, p. 278

    - If the base internal format is STENCIL_INDEX, then r = St

Additions to Chapter 11 of the OpenGL 4.3 (Compatibility Profile) Specification
(Programmable Vertex Processing)

    Modify 11.1.3.5 Texture Access p. 390

    Texture lookups involving texture objects with an internal format of DEPTH_-
    STENCIL can read the stencil value as described in section 8.22 by setting
    the DEPTH_STENCIL_TEXTURE_MODE to STENCIL_COMPONENT. Textures with a
    STENCIL_INDEX base internal format may also be used to read stencil data.
    The stencil value is read as an integer and assigned to Rt. An unsigned
    integer sampler must be used to lookup the stencil component, otherwise
    the results are undefined.


Additions to Chapter 15 of the OpenGL 4.3 (Compatibility Profile) Specification
(Programmable Fragment Processing)

    Modify 15.2.1 Texture Access, p.510

    Repace the paragraph "The stencil index texture internal component is
    ignored if the base internal format is DEPTH_STENCIL" with:

    Texture lookups involving textures with stencil index data generate a
    texture base color Cb by using stencil values St directly, if either the
    texture has a base internal format of STENCIL_INDEX or the texture has a
    base internal format of DEPTH_STENCIL and a DEPTH_STENCIL_TEXTURE_MODE
    of STENCIL_COMPONENT.


New Implementation Dependent State

    None.

New State

    None.

Additions to the AGL/GLX/WGL Specifications

    None.

GLX Protocol

    None.

Modifications to the OpenGL Shading Language Specification, Version 4.30

    None.

Errors

    An INVALID_OPERATION error is generated by GetTexImage if <format>
    is STENCIL_INDEX and the base internal format is not STENCIL_INDEX or
    DEPTH_STENCIL.

    An INVALID_OPERATION error is generated by TexImage3D, TexImage2D,
    TexImage1D, TexSubImage3D, TexSubImage2D, or TexSubImage1D
    if <format> is STENCIL_INDEX and the base internal format is not
    <STENCIL_INDEX>.

    An INVALID_OPERATION error is generated by TexImage3D, TexImage2D,
    TexImage1D, TexSubImage3D, TexSubImage2D, or TexSubImage1D if
    <format> is STENCIL_INDEX and <target> is not one of TEXTURE_1D,
    TEXTURE_2D, TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_RECTANGLE,
    TEXTURE_CUBE_MAP, TEXTURE_CUBE_MAP_ARRAY, PROXY_TEXTURE_1D,
    PROXY_TEXTURE_2D, PROXY_TEXTURE_1D_ARRAY, PROXY_TEXTURE_2D_ARRAY,
    PROXY_TEXTURE_RECTANGLE, PROXY_TEXTURE_CUBE_MAP, or
    PROXY_TEXTURE_CUBE_MAP_ARRAY.

Issues


    (1) What is the interaction with ARB_stencil_texturing's
        DEPTH_STENCIL_TEXTURE_MODE?

    RESOLVED: That piece of state is ignored because the base internal format
    of a STENCIL_INDEX texture is not DEPTH_STENCIL.

    (2) Does the presence of this extension imply that the implementation
    supports a true 8-bit stencil buffer?

    RESOLVED: No, some OpenGL implementations may internally expand a
    format like STENCIL_INDEX8 to DEPTH24_STENCIL8, but will make such a format
    behave as if there were no depth bits.  Additionally, implementations may
    not support independent depth and stencil attachments; a framebuffer with a
    STENCIL_INDEX8 stencil attachment and a DEPTH_COMPONENT24 depth attachment
    may be treated as unsupported (FRAMEBUFFER_UNSUPPORTED).

    (3) Should we support stencil formats that have a number of bits that is
    not exactly supported in the implementation? 8-bits is universally
    supported, but 1/4/16-bits are not.

    RESOLVED: Only accept STENCIL_INDEX8, which is universally supported.

Revision History

    Rev.    Date    Author    Changes
    ----  --------  --------  -----------------------------------------------
     1    03/20/13  jbolz     Internal revisions.
     2    05/30/13  dgkoch    Add tokens and errors section.
                              Update errors for GetTexImage.
     3    06/28/13  Jon Leech Fix dates in revision history. Change filter
                              modes for texture completeness (Bug 10372).
     4    08/08/13  pdaniell  Fix the functions that accept STENCIL_INDEX8 as
                              an <internalformat> parameter (Bug 10558).
     5    08/26/13  pdaniell  Fix the list of texture targets that support
                              stencil (and depth and depth/stencil) textures
                              to include the multisample targets (Bug 10558).
