Name

    ARB_conservative_depth

Name String
    
    GL_ARB_conservative_depth

Contact

    Graham Sellers, AMD (graham.sellers 'at' amd.com)

Contributors

    Pierre Boudier, AMD
    Graham Sellers, AMD

Notice

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

Status

    Complete. Approved by the ARB on 2011/06/20.
    Approved by the Khronos Promoters on 2011/07/29.

Version

    Last Modified Date:         06/20/2010
    Author Revision:            6

Number

    ARB Extension #111

Dependencies

    OpenGL 3.0 is required.

    This extension is written against the OpenGL Shading Language Version 4.00.

Overview

    There is a common optimization for hardware accelerated implementation of
    OpenGL 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 the AGL/GLX/WGL Specifications

    None.

Modifications to the OpenGL Shading Language Specification version 1.50.9

Additions to Chapter 1 of the OpenGL Shading Language 4.00.08 Specification (Introduction)

    None.

Additions to Chapter 2 of the OpenGL Shading Language 4.00.08 Specification (Overview of OpenGL Shading)

    None.

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

    Add a new Section 3.3.x, GL_ARB_conservative_depth Extension

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

        #extension GL_ARB_conservative_depth: <behavior>

    where <behavior> is as described in section 3.3.

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

        #define GL_ARB_conservative_depth 1

Additions to Chapter 4 of the OpenGL Shading Language 4.00.08 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 (ses Section 7.2, Fragment Shader Special Variables).

    Insert the following before the paragraph beginning: "Geometry shaders can
    have three types of output layout qualifiers..."

        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;

        If gl_FragDepth is redeclared in any fragment shader in a program, it must
        be redeclared in all fragment shaders in that program that have static
        assignments to gl_FragDepth. All redeclarations of gl_FragDepth in all
        fragment shaders in a single program must have the same set of qualifiers.
        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
    ----  --------    --------  -----------------------------------------
     6     6/20/2011  wwlk      approved by ARB
     5     1/27/2011  johnk     Update with edits from reviews of the core spec.
     4    12/17/2010  johnk     Correct gl_Depth -> gl_FragDepth
                                Make the code examples fit within the width of 
                                actual paper.

     3    04/01/2010  gsellers  Minor cleanup. Update to GLSL 4.00.
     2    12/01/2009  gsellers  Internal updates
     1    11/03/2009  pboudier  Initial draft
