Name ARB_stencil_texturing Name Strings GL_ARB_stencil_texturing Contact Piers Daniell, NVIDIA Corporation (pdaniell 'at' nvidia.com) Contributors Bruce Merry Jeff Bolz, NVIDIA Pat Brown, NVIDIA Notice Copyright (c) 2012-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 2012/06/12. Version Last Modified Date: March 19, 2013 Revision: 5 Number ARB Extension #138 Dependencies OpenGL 1.1, ARB_depth_texture and EXT_packed_depth_stencil are required. This extension is written against The OpenGL 4.2 (Compatibility Profile) specification. Overview This extension allows texturing of the stencil component of a packed depth stencil texture. Stencil values are returned as unsigned integers. It is not possible to sample both depth and stencil values from the same texture, and this extension allows the app to select which is sampled for the bound texture. New Procedures and Functions None New Tokens Accepted by the parameter of TexParameter* and GetTexParameter*: DEPTH_STENCIL_TEXTURE_MODE 0x90EA Additions to the OpenGL 4.2 (Compatibility Profile) Specification Changes to Section 2.14.12 (Shader Execution), page 144 Add a new new bullet point on page 149: "* The sampler used in a texture lookup function is one of the shadow sampler types, the texture object's internal format is DEPTH_STENCIL, and the DEPTH_STENCIL_TEXTURE_MODE is not DEPTH_COMPONENT." Then change the following paragraph that reads: "The stencil index texture internal component is ignored if the base internal format is DEPTH_STENCIL." To the following: "The stencil index texture internal component is ignored if the base internal format is DEPTH_STENCIL and the DEPTH_STENCIL_TEXTURE_MODE is not STENCIL_INDEX. Texture lookups involving texture objects with an internal format of DEPTH_STENCIL can read the stencil value as described in section 3.10.18 by setting the DEPTH_STENCIL_TEXTURE_MODE to STENCIL_INDEX. The stencil value is read as an integer and assigned to R_t. An unsigned integer sampler should be used to lookup the stencil component, otherwise the results are undefined." Changes to Section 3.10.8 (Texture Parameters), page 322 In Table 3.22 (Texture parameters and their values) add the following entry: " Name Type Legal Values ------------- ---- ------------------------------ DEPTH_STENCIL_TEXTURE_MODE enum DEPTH_COMPONENT, STENCIL_INDEX " Changes to Section 3.10.13 (Combined Depth/Stencil Textures), page 342 Modify the paragraph to read: "If the texture image has a base internal format of DEPTH_STENCIL, then the stencil index texture component is ignored by default. The texture value does not include a stencil index component, but includes only the depth component. In order to access the stencil index texture component the DEPTH_STENCIL_TEXTURE_MODE texture parameter should be set to STENCIL_INDEX. When this mode is set the depth component is ignored and the texture value includes only the stencil index component. The stencil index value is treated as an unsigned integer texture and returns an unsigned integer value when sampled. When sampling the stencil index only NEAREST filtering is supported. The DEPTH_STENCIL_TEXTURE_MODE is ignored for non depth/stencil textures." Changes to Section 3.10.14 (Texture Completeness), page 343 Add a new bullet point for the conditions that cause the texture to not be complete: "* The internal format of the texture is DEPTH_STENCIL, the DEPTH_STENCIL_TEXTURE_MODE for the texture is STENCIL_INDEX and either the magnification filter or the minification filter is not NEAREST." Changes to Section 3.10.18 (Texture Comparison Modes), page 356 Modify the following paragraph: "Let Dt be the depth texture value and St be the stencil index component of a depth/stencil texture. If there is no stencil component the value of St is undefined. Let Dref be the reference value..." Insert a new paragraph after the paragraphs that ends: "Then the effective texture value is computed as follows: If the base internal format is DEPTH_STENCIL and the value of DEPTH_STENCIL_TEXTURE_MODE is STENCIL_INDEX, then r = St Otherwise if the value of TEXTURE_COMPARE_MODE is NONE, then r = Dt Otherwise if the value of TEXTURE_COMPARE_MODE is COMPARE_REF_TO_TEXTURE, then r depends on the texture comparison function as shown in table 3.31. The resulting r is assigned ..." Additions to Chapter 8 of the OpenGL Shading Language 4.20.6 Specification Insert a new paragraph at the end of Section 8.9: "For depth/stencil textures, the sampler type should match the component being accessed as set through the OpenGL API. When the depth/stencil texture mode is set to DEPTH_COMPONENT, a floating-point sampler type should be used. When the depth/stencil texture mode is set to STENCIL_INDEX, an unsigned integer sampler type should be used. Doing a texture lookup with an unsupported combination will return undefined values." Additions to the AGL/GLX/WGL Specifications None Errors None New State (Table 6.24, Textures) add the following entry: Get Value Type Get Command Initial Value Description Section ------------- ---- ----------- ------------- ----------- ------- DEPTH_STENCIL_TEXTURE_MODE n*Z2 GetTexParameteriv DEPTH_COMPONENT Depth stencil texture mode 3.10.8 New Implementation Dependent State None Issues 1) Should we support combined depth/stencil in one lookup? RESOLVED: No because depth is float and stencil is integer and we have no way to return both with the existing samplers. Also some implementations may not have an easy way to retrive both depth and stencil in one lookup. 2) How does this interact with texture filters (e.g., LINEAR)? RESOLVED: Sampling the stencil values will behave like integer textures. There is no filtering. 3) I assume DEPTH_STENCIL_TEXTURE_MODE is ignored unless the texture itself has a DEPTH_STENCIL internal format? RESOLVED: Correct. Revision History Rev. Date Author Changes ---- -------- -------- ----------------------------------------------- 5 03/19/13 Jon Leech Fix STENCIL_COMPONENT -> STENCIL_INDEX typo (Bug 10077). 4 05/04/12 pdaniell Add missing spec stating how the stencil value is assigned to the color vector result of the texture lookup function. Clarified the filtering used for stencil index sampling. 3 05/03/12 pdaniell Add enum value. Use DEPTH_COMPONENT and STENCIL_INDEX instead of DEPTH and STENCIL for the valid DEPTH_STENCIL_TEXTURE_MODEs. These better represent "Pixel Formats". 2 03/15/12 pdaniell Fixes based on feedback from Bruce Merry. 1 10/25/11 pdaniell Initial version.