Name

    QCOM_alpha_test

Name Strings

    GL_QCOM_alpha_test

Contact

    Maurice Ribble (mribble 'at' qualcomm.com)

Contributors

    Benj Lipchak
    Maurice Ribble

Status

    Complete.

Version

    Last Modified Date: October 11, 2010
    Revision: #2

Number

    OpenGL ES Extension #89

Dependencies

    OpenGL ES 2.0 is required.

    This extension is written against the OpenGL ES 2.0 specification.

Overview

    This extension reintroduces the alpha test per-fragment operation
    from OpenGL ES 1.x.  Some hardware has a dedicated unit capable of
    performing this operation, and it can save ALU operations in the fragment
    shader by avoiding the conditional discard.

New Procedures and Functions

    void AlphaFuncQCOM(enum func, clampf ref);

New Tokens

    Accepted by the <cap> parameter of Enable and Disable, and IsEnabled, and by
    the <pname> parameter of GetBooleanv, GetIntegerv, and GetFloatv:

        ALPHA_TEST_QCOM                             0x0BC0

    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, and
    GetFloatv:

        ALPHA_TEST_FUNC_QCOM                        0x0BC1
        ALPHA_TEST_REF_QCOM                         0x0BC2

    Accepted by the <func> parameter of AlphaFuncQCOM:

        NEVER
        LESS
        EQUAL
        LEQUAL
        GREATER
        NOTEQUAL
        GEQUAL
        ALWAYS

Additions to Chapter 4 of the OpenGL ES 2.0 Specification (Per-Fragment
Operations)

    Add a new section 4.1.4 - Alpha Test

        The alpha test discards a fragment conditional on the outcome of a
        comparison between the incoming fragment's alpha value and a constant
        value.  The comparison is enabled or disabled with the generic Enable
        and Disable commands using the symbolic constant ALPHA_TEST.  When
        disabled, it is as if the comparison always passes.  The test is
        controlled with

            void AlphaFuncQCOM(enum func, clampf ref);

        <func> is a symbolic constant indicating the alpha test function; <ref>
        is a reference value.  <ref> is clamped to lie in [0,1], and then
        converted to a fixed-point value according to the rules given for an A
        component in section 2.12.8.  For purposes of the alpha test, the
        fragment's alpha value is also rounded to the nearest integer.  The
        possible constants specifying the test function are NEVER, ALWAYS, LESS,
        LEQUAL, EQUAL, GEQUAL, GREATER, or NOTEQUAL, meaning pass the fragment
        never, always, if the fragment's alpha value is less than, less than or
        equal to, equal to, greater than or equal to, greater than, or not equal
        to the reference value, respectively.

        The required state consists of the floating-point reference value, an
        eight-valued integer indicating the comparison function, and a bit
        indicating if the comparison is enabled or disabled.  The initial state
        is for the reference value to be 0 and the function to be ALWAYS.
        Initially, the alpha test is disabled.

Errors

    None

New State

    (table 6.17, Pixel Operations) add the following entries:

                                           Initial
    Get Value            Type  Get Command  Value   Description          Section
    -------------------  ----  -----------  ------  -------------------  -------
    ALPHA_TEST_QCOM      B     IsEnabled    False   Alpha test enabled   4.1.4
    ALPHA_TEST_FUNC_QCOM Z8    GetIntegerv  ALWAYS  Alpha test function  4.1.4
    ALPHA_TEST_REF_QCOM  R+    GetFloatv    0       Alpha test reference 4.1.4
                                                    value

Revision History

    #01    11/04/2007    Benj Lipchak    Created based on ES 1.1 spec language.
    #02    10/11/2010    Maurice Ribble  Updated to be QCOM extension and fixed
                                         some wording.
