Name

    EXT_conservative_depth

Name String

    GL_EXT_conservative_depth

Contact

    Tobias Hector, Imagination Technologies (tobias.hector 'at' imgtec.com)

Contributors

    Contributors to the original ARB_conservative_depth
    Ian Romanick
    Daniel Koch

Status

    Final

Version

    Last Modified Date:         14/09/2016
    Author Revision:            3

Number

    OpenGL ES Extension #268

Dependencies

    OpenGL ES 3.0 is required.

    This extension is written against the OpenGL ES Shading Language Version 3.00.6

Overview

    There is a common optimization for hardware accelerated implementation of
    OpenGL ES which relies on an early depth test to be run before the fragment
    shader so that the shader evaluation can be skipped if the fragment ends
    up being discarded because it is occluded.

    This optimization does not affect the final rendering, and is typically
    possible when the fragment does not change the depth programmatically.
    (i.e.: it does not write to the built-in gl_FragDepth output). There are,
    however a class of operations on the depth in the shader which could
    still be performed while allowing the early depth test to operate.

    This extension allows the application to pass enough information to the
    GL implementation to activate such optimizations safely.

New Procedures and Functions

    None.

New Tokens

    None.

Additions to Chapter 3 of the OpenGL ES Shading Language 3.00.06 Specification (Basics)

    Add a new Section 3.5.x, GL_EXT_conservative_depth Extension

    Including the following line in a shader can be used to control the language
    features described in this extension:

        #extension GL_EXT_conservative_depth: <behavior>

    where <behavior> is as described in section 3.5.

    A new preprocessor #define is added to the OpenGL Shading Language:

        #define GL_EXT_conservative_depth 1

Additions to Chapter 4 of the OpenGL Shading Language 3.00.06 Specification (Variables and Types)

    Modify Section 4.3.8.2 (Output Layout Qualifiers) page 47

    Modify the paragraph beginning: "Fragment shaders allow output layout
    qualifiers only..."

        Fragment shaders allow output layout qualifiers only on the interface
        out, or for the purposes of redeclaring the built-in variable
        gl_FragDepth (see Section 7.2, Fragment Shader Special Variables).

    Insert the following at the end of the section:

        The built-in fragment shader variable gl_FragDepth may be redeclared using
        one of the following layout qualifiers.

        layout-qualifier-id
            depth_any
            depth_greater
            depth_less
            depth_unchanged

        For example:

            layout (depth_greater) out float gl_FragDepth;

        The layout qualifier for gl_FragDepth specifies constraints on the final
        value of gl_FragDepth written by any shader invocation.  GL implementations
        may perform optimizations assuming that the depth test fails (or passes)
        for a given fragment if all values of gl_FragDepth consistent with the layout
        qualifier would fail (or pass).  If the final value of gl_FragDepth
        is inconsistent with its layout qualifier, the result of the depth test for
        the corresponding fragment is undefined.  However, no error will be
        generated in this case.  When the depth test passes and depth writes are
        enabled, the value written to the depth buffer is always the value of
        gl_FragDepth, whether or not it is consistent with the layout qualifier.

        By default, gl_FragDepth assumes the <depth_any> layout qualifier. When
        the layout qualifier for gl_FragDepth is <depth_any>, the shader compiler
        will note any assignment to gl_FragDepth modifying it in an unknown way,
        and depth testing will always be performed after the shader has executed.
        When the layout qualifier is "depth_greater", the GL will assume that the
        final value of gl_FragDepth is greater than or equal to the fragment's
        interpolated depth value, as given by the <z> component of gl_FragCoord.
        When the layout qualifier is <depth_less>, the GL will assume that any
        modification of gl_FragDepth will only decrease its value. When the
        layout qualifier is <depth_unchanged>, the shader compiler will honor
        any modification to gl_FragDepth, but the rest of the GL assume that
        gl_FragDepth is not assigned a new value.

        Redeclarations of gl_FragDepth are performed as follows:

            // redeclaration that changes nothing is allowed

            out float gl_FragDepth;

            // assume it may be modified in any way
            layout (depth_any) out float gl_FragDepth;

            // assume it may be modified such that its value will only increase
            layout (depth_greater) out float gl_FragDepth;

            // assume it may be modified such that its value will only decrease
            layout (depth_less) out float gl_FragDepth;

            // assume it will not be modified
            layout (depth_unchanged) out float gl_FragDepth;

        Within any shader, the first redeclarations of gl_FragDepth must appear
        before any use of gl_FragDepth. The built-in gl_FragDepth is only
        predeclared in fragment shaders, so redeclaring it in any other shader
        language will be illegal.

Revision History

    Rev.  Date        Author   Changes
    ----  ----------  -------  -------------------------------------------------
    1     08/09/2016  thector  Initial draft based on ARB_conservative_depth
    2     12/09/2016  thector  Converted to EXT as per feedback from Ian Romanick
    3     14/09/2016  thector  Removed reference to multiple fragment shaders as per Daniel Koch's feedback
