Name

    ARB_transform_feedback_overflow_query

Name Strings

    GL_ARB_transform_feedback_overflow_query

Contact

    Brian Paul, VMware Inc. (brianp 'at' vmware.com)

Contributors

    Brian Paul, VMware
    Daniel Rakos, AMD
    Daniel Koch, NVIDIA

Notice

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

Status

    Complete.
    Approved by the ARB on June 26, 2014.
    Ratified by the Khronos Board of Promoters on August 7, 2014.

Version

    Date: May 29, 2017
    Revision: 5

Number

    ARB Extension #173

Dependencies

    OpenGL 3.0 is required.

    The extension is written against the OpenGL 4.4 Specification, Core
    Profile, March 19, 2014.

    OpenGL 4.0 and ARB_transform_feedback3 affect the definition of this
    extension.

Overview

    This extension adds new query types which can be used to detect overflow
    of transform feedback buffers. The new query types are also accepted by
    conditional rendering commands.

IP Status

    No known IP claims.

New Procedures and Functions

    None.

New Tokens

    Accepted by the <target> parameter of BeginQuery, EndQuery,
    BeginQueryIndexed, EndQueryIndexed, GetQueryiv, and GetQueryIndexediv:

        TRANSFORM_FEEDBACK_OVERFLOW_ARB                 0x82EC
        TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB          0x82ED

Additions to Chapter 4 of the OpenGL 4.4 (Core Profile) Specification (Event Model)

    Modify Section 4.2, Query Objects and Asynchronous Queries

    (add new bullet after second bullet on p. 39)

      * Transform feedback overflow queries return information on whether or
        not transform feedback overflow happened for one or more streams
        (see section 13.x).

    (modify errors section for BeginQueryIndexed on p. 40)

    An INVALID_ENUM error is generated if <target> is not SAMPLES_PASSED,
    ... for a primitives written query; or TRANSFORM_FEEDBACK_OVERFLOW_ARB
    or TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB for a transform feedback
    overflow query.

    An INVALID_VALUE error is generated if <target> is SAMPLES_PASSED ...
    TIME_ELAPSED, or TRANSFORM_FEEDBACK_OVERFLOW_ARB, and <index> is not
    zero.

    An INVALID_VALUE error is generated if <target> is PRIMITIVES_GENERATED,
    TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, or
    TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB, and <index> is not in the range
    zero to the value of MAX_VERTEX_STREAMS minus one.

    (modify errors section for EndQueryIndexed on p. 41-42)

    An INVALID_ENUM error is generated if <target> is not SAMPLES_PASSED,
    ... TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN,
    TRANSFORM_FEEDBACK_OVERFLOW_ARB, or
    TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB.

    An INVALID_VALUE error is generated if <target> is SAMPLES_PASSED, ...
    TIME_ELAPSED, or TRANSFORM_FEEDBACK_OVERFLOW_ARB, and <index> is not
    zero.

    An INVALID_VALUE error is generated if <target> is PRIMITIVES_GENERATED,
    TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, or
    TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB, and <index> is not in the range
    zero to the value of MAX_VERTEX_STREAMS minus one.


    Modify Section 4.2.1, Query Object Queries

    (add new paragraph after fourth paragraph on p. 43)

    For transform feedback overflow queries (TRANSFORM_FEEDBACK_OVERFLOW_ARB
    and TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB) if the number of bits is
    non-zero, the minimum number of bits is 1.

    (modify errors section for GetQueryIndexediv on p 43)

    An INVALID_ENUM error is generated if <target> is not ...,
    TRANSFORM_FEEDBACK_OVERFLOW_ARB, or TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB.

    An INVALID_VALUE error is generated if <target> is ..., or
    TRANSFORM_FEEDBACK_OVERFLOW_ARB, and <index> is not zero.

    An INVALID_VALUE error is generated if <target> is ..., or
    TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB, and <index> is not in the range
    zero to the value of MAX_VERTEX_STREAMS minus one.

Additions to Chapter 10 of the OpenGL 4.4 (Core Profile) Specification (Vertex Specification and Drawing Commands)

    Modify Section 10.10, Conditional Rendering

    (modify first paragraph on p. 338)

    Conditional rendering can be used to discard rendering commands based on
    the result of a query. Conditional rendering is started and stopped using
    the commands
        ...
    <id> specifies the name of a query whose results are used to determine if
    the rendering commands are discarded. If the result (SAMPLES_PASSED) of
    the query is zero, or if the result (ANY_SAMPLES_PASSED,
    ANY_SAMPLES_PASSED_CONSERVATIVE, TRANSFORM_FEEDBACK_OVERFLOW_ARB, or
    TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB) is false, ...

    (modify second sentence of second paragraph on p. 338)

    If the result (SAMPLES_PASSED) of the query is non-zero, or if the
    result (ANY_SAMPLES_PASSED, ANY_SAMPLES_PASSED_CONSERVATIVE,
    TRANSFORM_FEEDBACK_OVERFLOW_ARB, or
    TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB) is true, such commands are not
    discarded.

    (modify errors section for BeginConditionalRender on p. 339)

    An INVALID_OPERATION error is generated if <id> is the named of a query
    object with a target other than ..., TRANSFORM_FEEDBACK_OVERFLOW_ARB, or
    TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB, or if <id> is the name of a query
    currently in progress.

Additions to Chapter 13 of the OpenGL 4.4 (Core Profile) Specification
(Fixed-Function Vertex Post-Processing)

    Add new Section after 13.3, Primitive Queries

    13.x Transform Feedback Overflow Queries

    Transform feedback overflow queries use query objects to track whether
    or not all stream vertices were written to buffer objects in transform
    feedback mode.

    When BeginQueryIndexed is called with a <target> of
    TRANSFORM_FEEDBACK_OVERFLOW_ARB, the transform feedback overflow state
    maintained by the GL is set to false. If transform feedback is active
    and a primitive to be recorded on any stream does not fit in one of the
    buffer objects used for capture, the overflow state is set to true.

    When BeginQueryIndexed is called with a <target> of
    TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB, the transform feedback stream
    overflow state maintained by the GL for vertex stream <index> is set to
    false. There is a separate overflow state for each vertex stream. If
    transform feedback is active and a primitive to be recorded on stream
    <index> does not fit in one of the buffer objects used for capture, the
    overflow state for vertex stream <index> is set to true.

Additions to the AGL/EGL/GLX/WGL Specifications

     None.

New State

    Modify Table 23.74, Miscellaneous

    (update the state table to cover the new query types on p. 599)

    Get Value      Type  Get Command  Initial Value  Description                Sec.
    -------------  ----  -----------  -------------  -------------------------  -----
    CURRENT_QUERY  9xZ+  GetQueryiv         0        Active query object names  4.2.1

New Implementation Dependent State

    Modify Table 23.69, Implementation Dependent Values

    (update the state table to cover the new query types on p. 594)

    Get Value           Type  Get Command  Minimum Value   Description         Sec.
    ------------------  ----  -----------  --------------  ------------------  -----
    QUERY_COUNTER_BITS  9xZ+  GetQueryiv   see sec. 4.2.1  Asynchronous query  4.1.1
                                                           counter bits

Dependencies on OpenGL 4.0 and ARB_transform_feedback3

    If OpenGL 4.0 and ARB_transform_feedback3 are not support then remove all
    references to TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB.

Issues

    (1) Why is this extension necessary?

      RESOLVED:  An application can query the number of vertices written
      to a transform feedback buffer and compare that to the size of the
      buffer (or number of vertices drawn) to try to detect overflow but
      that is ineffective if subsequent rendering is to be predicated on
      that condition.  Basically, the whole point is to have a queries
      which can be used by BeginConditionalRender.

      Note that this feature is present in another, competing graphics API.
      This extension will allow one to better implement that API's features
      on top of OpenGL.

    (2) For conditional rendering do we want to discard or not discard
        drawing if the query indicates transform feedback buffer overflow?

      RESOLVED: Some apps probably want one way while others want the
      other. This can be solved by the GL_ARB_conditional_render_inverted
      extension which allows one to specify predication either on the normal
      or inverted query result.

    (3) Is the overflow condition determined per transform feedback buffer or
        per vertex stream?

      DISCUSSION: There may be multiple buffers used to capture primitives of
      the same vertex stream and while the buffers themselves are the ones
      that overflow, the overflow condition itself is determined per vertex
      stream, as no data is written to any of the buffers used to capture
      primitives of a particular vertex stream if not all of them are able to
      capture the whole primitive.

      RESOLVED: Overflow is determined per vertex stream.

    (4) What do queries with target TRANSFORM_FEEDBACK_OVERFLOW_ARB track?

      RESOLVED: Tracks overflow condition for all vertex streams. If OpenGL 4.0
      and ARB_transform_feedback3 are not supported this trivially simplifies to
      tracking overflow condition for the first and only vertex stream.

Revision History

    Revision 5, 2017/05/29 (Daniel Koch)
      - fix typo

    Revision 4, 2014/06/17 (Jon Leech)
      - Add missing error condition for BeginQueryIndexed / EndQueryIndexed
        and <target>TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB (Bug 12376).

    Revision 3, 2014/04/25 (Daniel Rakos)
      - Renamed to ARB_transform_feedback_overflow_query.
      - Replaced EXT suffixes with ARB ones.

    Revision 2, 2014/04/16 (Daniel Rakos)
      - Renamed extension to EXT_transform_feedback_overflow_query.
      - Renamed new query targets to TRANSFORM_FEEDBACK_OVERFLOW_EXT and
        TRANSFORM_FEEDBACK_STREAM_OVERFLOW_EXT.
      - Added issues (3) and (4).
      - Moved transform feedback overflow queries to have their own section
        instead of introducing them as part of primitive queries.
      - Added state table changes.
      - Clarified language and error conditions.

    Revision 1, 2014/01/27 (Brian Paul)
      - Initial revision.
