Name

    ANGLE_timer_query

Name Strings

    GL_ANGLE_timer_query

Contributors

    Contributors to ARB_occlusion_query
    Contributors to EXT_timer_query
    Contributors to ARB_timer_query
    Ben Vanik, Google Inc.
    Daniel Koch, TransGaming Inc.

Contact

    Ben Vanik, Google Inc. (benvanik 'at' google 'dot' com)

Status

    Draft

Version

    Last Modified Date: Apr 28, 2011
    Author Revision: 1

Number

    OpenGL ES Extension #??

Dependencies

    OpenGL ES 2.0 is required.

    The extension is written against the OpenGL ES 2.0 specification.

Overview

    Applications can benefit from accurate timing information in a number of
    different ways.  During application development, timing information can
    help identify application or driver bottlenecks.  At run time,
    applications can use timing information to dynamically adjust the amount
    of detail in a scene to achieve constant frame rates.  OpenGL
    implementations have historically provided little to no useful timing
    information.  Applications can get some idea of timing by reading timers
    on the CPU, but these timers are not synchronized with the graphics
    rendering pipeline.  Reading a CPU timer does not guarantee the completion
    of a potentially large amount of graphics work accumulated before the
    timer is read, and will thus produce wildly inaccurate results.
    glFinish() can be used to determine when previous rendering commands have
    been completed, but will idle the graphics pipeline and adversely affect
    application performance.

    This extension provides a query mechanism that can be used to determine
    the amount of time it takes to fully complete a set of GL commands, and
    without stalling the rendering pipeline.  It uses the query object
    mechanisms first introduced in the occlusion query extension, which allow
    time intervals to be polled asynchronously by the application.

IP Status

    No known IP claims.

New Procedures and Functions

    void GenQueriesANGLE(sizei n, uint *ids);
    void DeleteQueriesANGLE(sizei n, const uint *ids);
    boolean IsQueryANGLE(uint id);
    void BeginQueryANGLE(enum target, uint id);
    void EndQueryANGLE(enum target);
    void QueryCounterANGLE(uint id, enum target);
    void GetQueryivANGLE(enum target, enum pname, int *params);
    void GetQueryObjectivANGLE(uint id, enum pname, int *params);
    void GetQueryObjectuivANGLE(uint id, enum pname, uint *params);
    void GetQueryObjecti64vANGLE(uint id, enum pname, int64 *params);
    void GetQueryObjectui64vANGLE(uint id, enum pname, uint64 *params);

New Tokens

    Accepted by the <pname> parameter of GetQueryivANGLE:

        QUERY_COUNTER_BITS_ANGLE                       0x8864
        CURRENT_QUERY_ANGLE                            0x8865

    Accepted by the <pname> parameter of GetQueryObjectivANGLE,
    GetQueryObjectuivANGLE, GetQueryObjecti64vANGLE, and
    GetQueryObjectui64vANGLE:

        QUERY_RESULT_ANGLE                             0x8866
        QUERY_RESULT_AVAILABLE_ANGLE                   0x8867
        
    Accepted by the <target> parameter of BeginQueryANGLE, EndQueryANGLE, and
    GetQueryivANGLE:

        TIME_ELAPSED_ANGLE                             0x88BF

    Accepted by the <target> parameter of GetQueryivANGLE and
    QueryCounterANGLE:

        TIMESTAMP_ANGLE                                0x8E28

Additions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL ES Operation)

    (Modify table 2.1, Correspondence of command suffix letters to GL argument)
    Add two new types:
    
    Letter Corresponding GL Type
    ------ ---------------------
    i64    int64ANGLE
    ui64   uint64ANGLE

    (Modify table 2.2, GL data types) Add two new types:
    
    GL Type       Minimum Bit Width   Description
    -------       -----------------   -----------------------------
    int64ANGLE    64                  Signed 2's complement integer
    uint64ANGLE   64                  Unsigned binary integer

Additions to Chapter 5 of the OpenGL ES 2.0 Specification (Special Functions)

    Add a new section 5.3 "Timer Queries":

    "5.3  Timer Queries

    Timer queries use query objects to track the amount of time needed to
    fully complete a set of GL commands, or to determine the current time
    of the GL.
    
    Timer queries are associated with query objects.  The command

      void GenQueriesANGLE(sizei n, uint *ids);

    returns <n> previously unused query object names in <ids>.  These
    names are marked as used, but no object is associated with them until
    the first time they are used by BeginQueryANGLE.  Query objects contain
    one piece of state, an integer result value.  This result value is
    initialized to zero when the object is created.  Any positive integer
    except for zero (which is reserved for the GL) is a valid query
    object name.

    Query objects are deleted by calling

      void DeleteQueriesANGLE(sizei n, const uint *ids);

    <ids> contains <n> names of query objects to be deleted.  After a
    query object is deleted, its name is again unused.  Unused names in
    <ids> are silently ignored.
    If an active query object is deleted its name immediately becomes unused,
    but the underlying object is not deleted until it is no longer active.

    A timer query can be started and finished by calling

      void BeginQueryANGLE(enum target, uint id);
      void EndQueryANGLE(enum target);

    where <target> is TIME_ELAPSED_ANGLE.  If BeginQueryANGLE is called
    with an unused <id>, that name is marked as used and associated with
    a new query object.
    
    If BeginQueryANGLE is called with an <id> of zero, if the active query
    object name for <target> is non-zero, if <id> is the name of an existing
    query object whose type does not match <target>, or if <id> is the active
    query object name for any query type, the error INVALID_OPERATION is
    generated.  If EndQueryANGLE is called while no query with the same target
    is in progress, an INVALID_OPERATION error is generated.

    When BeginQueryANGLE and EndQueryANGLE are called with a <target> of
    TIME_ELAPSED_ANGLE, the GL prepares to start and stop the timer used for
    timer queries.  The timer is started or stopped when the effects from all
    previous commands on the GL client and server state and the framebuffer
    have been fully realized.  The BeginQueryANGLE and EndQueryANGLE commands
    may return before the timer is actually started or stopped.  When the timer
    query timer is finally stopped, the elapsed time (in nanoseconds) is
    written to the corresponding query object as the query result value, and
    the query result for that object is marked as available.

    If the elapsed time overflows the number of bits, <n>, available to hold
    elapsed time, its value becomes undefined.  It is recommended, but not
    required, that implementations handle this overflow case by saturating at
    2^n - 1.

    The necessary state is a single bit indicating whether an timer
    query is active, the identifier of the currently active timer
    query, and a counter keeping track of the time that has passed.

    When the command

         void QueryCounterANGLE(uint id, enum target);

    is called with <target> TIMESTAMP_ANGLE, the GL records the current time
    into the corresponding query object. The time is recorded after all
    previous commands on the GL client and server state and the framebuffer
    have been fully realized. When the time is recorded, the query result for
    that object is marked available. QueryCounterANGLE timer queries can be
    used within a BeginQueryANGLE / EndQueryANGLE block where the <target> is
    TIME_ELAPSED_ANGLE and it does not affect the result of that query object.
    The error INVALID_OPERATION is generated if the <id> is already in use
    within a BeginQueryANGLE/EndQueryANGLE block."

Additions to Chapter 6 of the OpenGL ES 2.0 Specification (State and State
Requests)

    Add a new section 6.1.9 "Timer Queries":

    "The command

      boolean IsQueryANGLE(uint id);

    returns TRUE if <id> is the name of a query object.  If <id> is zero,
    or if <id> is a non-zero value that is not the name of a query
    object, IsQueryANGLE returns FALSE.

    Information about a query target can be queried with the command

      void GetQueryivANGLE(enum target, enum pname, int *params);

    <target> identifies the query target and can be TIME_ELAPSED_ANGLE or
    TIMESTAMP_ANGLE for timer queries.

    If <pname> is CURRENT_QUERY_ANGLE, the name of the currently active query
    for <target>, or zero if no query is active, will be placed in <params>.

    If <pname> is QUERY_COUNTER_BITS_ANGLE, the implementation-dependent number
    of bits used to hold the query result for <target> will be placed in
    <params>.  The number of query counter bits may be zero, in which case
    the counter contains no useful information.

    For timer queries (TIME_ELAPSED_ANGLE and TIMESTAMP_ANGLE), if the number
    of bits is non-zero, the minimum number of bits allowed is 30 which
    will allow at least 1 second of timing.

    The state of a query object can be queried with the commands

      void GetQueryObjectivANGLE(uint id, enum pname, int *params);
      void GetQueryObjectuivANGLE(uint id, enum pname, uint *params);
      void GetQueryObjecti64vANGLE(uint id, enum pname, int64 *params);
      void GetQueryObjectui64vANGLE(uint id, enum pname, uint64 *params);

    If <id> is not the name of a query object, or if the query object
    named by <id> is currently active, then an INVALID_OPERATION error is
    generated.

    If <pname> is QUERY_RESULT_ANGLE, then the query object's result
    value is returned as a single integer in <params>. If the value is so
    large in magnitude that it cannot be represented with the requested type,
    then the nearest value representable using the requested type is
    returned. If the number of query counter bits for target is zero, then
    the result is returned as a single integer with the value zero.
    
    There may be an indeterminate delay before the above query returns. If
    <pname> is QUERY_RESULT_AVAILABLE_ANGLE, FALSE is returned if such a delay
    would be required; otherwise TRUE is returned. It must always be true
    that if any query object returns a result available of TRUE, all queries
    of the same type issued prior to that query must also return TRUE.

    Querying the state for a given timer query forces that timer query to
    complete within a finite amount of time.

    If multiple queries are issued on the same target and id prior to 
    calling GetQueryObject[u]i[64]vANGLE, the result returned will always be
    from the last query issued.  The results from any queries before the
    last one will be lost if the results are not retrieved before starting
    a new query on the same <target> and <id>."

Errors

    The error INVALID_VALUE is generated if GenQueriesANGLE is called where
    <n> is negative.

    The error INVALID_VALUE is generated if DeleteQueriesANGLE is called
    where <n> is negative.

    The error INVALID_OPERATION is generated if BeginQueryANGLE is called
    when a query of the given <target> is already active.

    The error INVALID_OPERATION is generated if EndQueryANGLE is called
    when a query of the given <target> is not active.

    The error INVALID_OPERATION is generated if BeginQueryANGLE is called
    where <id> is zero.

    The error INVALID_OPERATION is generated if BeginQueryANGLE is called
    where <id> is the name of a query currently in progress.
    
    The error INVALID_OPERATION is generated if BeginQueryANGLE is called
    where <id> is the name of an existing query object whose type does not
    match <target>.

    The error INVALID_ENUM is generated if BeginQueryANGLE or EndQueryANGLE
    is called where <target> is not TIME_ELAPSED_ANGLE.

    The error INVALID_ENUM is generated if GetQueryivANGLE is called where
    <target> is not TIME_ELAPSED_ANGLE or TIMESTAMP_ANGLE.

    The error INVALID_ENUM is generated if GetQueryivANGLE is called where
    <pname> is not QUERY_COUNTER_BITS_ANGLE or CURRENT_QUERY_ANGLE.

    The error INVALID_ENUM is generated if QueryCounterANGLE is called where
    <target> is not TIMESTAMP_ANGLE.

    The error INVALID_OPERATION is generated if QueryCounterANGLE is called
    on a query object that is already in use inside a
    BeginQueryANGLE/EndQueryANGLE.

    The error INVALID_OPERATION is generated if GetQueryObjectivANGLE,
    GetQueryObjectuivANGLE, GetQueryObjecti64vANGLE, or
    GetQueryObjectui64vANGLE is called where <id> is not the name of a query
    object.

    The error INVALID_OPERATION is generated if GetQueryObjectivANGLE,
    GetQueryObjectuivANGLE, GetQueryObjecti64vANGLE, or
    GetQueryObjectui64vANGLE is called where <id> is the name of a currently
    active query object.

    The error INVALID_ENUM is generated if GetQueryObjectivANGLE,
    GetQueryObjectuivANGLE, GetQueryObjecti64vANGLE, or
    GetQueryObjectui64vANGLE is called where <pname> is not
    QUERY_RESULT_ANGLE or QUERY_RESULT_AVAILABLE_ANGLE.

New State

    (Add a new table 6.xx, "Query Operations")
    
    Get Value                      Type    Get Command              Initial Value   Description              Sec
    ---------                      ----    -----------              -------------   -----------              ------
    -                              B       -                        FALSE           query active             5.3
    CURRENT_QUERY_ANGLE            Z+      GetQueryivANGLE          0               active query ID          5.3
    QUERY_RESULT_ANGLE             Z+      GetQueryObjectuivANGLE,  0               samples-passed count     5.3
                                           GetQueryObjectui64vANGLE
    QUERY_RESULT_AVAILABLE_ANGLE   B       GetQueryObjectivANGLE    FALSE           query result available   5.3

New Implementation Dependent State

    (Add the following entry to table 6.18):

    Get Value                      Type    Get Command      Minimum Value      Description           Sec
    --------------------------     ----    -----------      -------------      ----------------      ------
    QUERY_COUNTER_BITS_ANGLE       Z+      GetQueryivANGLE  see 6.1.9          Number of bits in     6.1.9
                                                                               query counter

Examples

    (1) Here is some rough sample code that demonstrates the intended usage
        of this extension.

        GLint queries[N];
        GLint available = 0;
        // timer queries can contain more than 32 bits of data, so always
        // query them using the 64 bit types to avoid overflow
        GLuint64ANGLE timeElapsed = 0;

        // Create a query object.
        glGenQueriesANGLE(N, queries);

        // Start query 1
        glBeginQueryANGLE(GL_TIME_ELAPSED_ANGLE, queries[0]);

        // Draw object 1
        ....

        // End query 1
        glEndQueryANGLE(GL_TIME_ELAPSED_ANGLE);

        ...

        // Start query N
        glBeginQueryANGLE(GL_TIME_ELAPSED_ANGLE, queries[N-1]);

        // Draw object N
        ....

        // End query N
        glEndQueryANGLE(GL_TIME_ELAPSED_ANGLE);

        // Wait for all results to become available
        while (!available) {
            glGetQueryObjectivANGLE(queries[N-1], GL_QUERY_RESULT_AVAILABLE_ANGLE, &available);
        }

        for (i = 0; i < N; i++) {
            // See how much time the rendering of object i took in nanoseconds.
            glGetQueryObjectui64vANGLE(queries[i], GL_QUERY_RESULT_ANGLE, &timeElapsed);

            // Do something useful with the time.  Note that care should be
            // taken to use all significant bits of the result, not just the
            // least significant 32 bits.
            AdjustObjectLODBasedOnDrawTime(i, timeElapsed);
        }

        This example is sub-optimal in that it stalls at the end of every
        frame to wait for query results.  Ideally, the collection of results
        would be delayed one frame to minimize the amount of time spent
        waiting for the GPU to finish rendering.
        
    (2) This example is basically the same as the example above but uses
        QueryCounter instead.
    
        GLint queries[N+1];
        GLint available = 0;
        // timer queries can contain more than 32 bits of data, so always
        // query them using the 64 bit types to avoid overflow
        GLuint64ANGLE timeStart, timeEnd, timeElapsed = 0;

        // Create a query object.
        glGenQueriesANGLE(N+1, queries);

        // Query current timestamp 1
        glQueryCounterANGLE(queries[0], GL_TIMESTAMP_ANGLE);

        // Draw object 1
        ....

        // Query current timestamp N
        glQueryCounterANGLE(queries[N-1], GL_TIMESTAMP_ANGLE);

        // Draw object N
        ....

        // Query current timestamp N+1
        glQueryCounterANGLE(queries[N], GL_TIMESTAMP_ANGLE);

        // Wait for all results to become available
        while (!available) {
            glGetQueryObjectivANGLE(queries[N], GL_QUERY_RESULT_AVAILABLE_ANGLE, &available);
        }

        for (i = 0; i < N; i++) {
            // See how much time the rendering of object i took in nanoseconds.
            glGetQueryObjectui64vANGLE(queries[i], GL_QUERY_RESULT_ANGLE, &timeStart);
            glGetQueryObjectui64vANGLE(queries[i+1], GL_QUERY_RESULT_ANGLE, &timeEnd);
            timeElapsed = timeEnd - timeStart;

            // Do something useful with the time.  Note that care should be
            // taken to use all significant bits of the result, not just the
            // least significant 32 bits.
            AdjustObjectLODBasedOnDrawTime(i, timeElapsed);
        }

Issues from EXT_timer_query

    (1) What time interval is being measured?

    RESOLVED:  The timer starts when all commands prior to BeginQuery() have
    been fully executed.  At that point, everything that should be drawn by
    those commands has been written to the framebuffer.  The timer stops
    when all commands prior to EndQuery() have been fully executed.

    (2) What unit of time will time intervals be returned in?

    RESOLVED:  Nanoseconds (10^-9 seconds).  This unit of measurement allows
    for reasonably accurate timing of even small blocks of rendering
    commands.  The granularity of the timer is implementation-dependent.  A
    32-bit query counter can express intervals of up to approximately 4
    seconds.

    (3) What should be the minimum number of counter bits for timer queries?

    RESOLVED:  30 bits, which will allow timing sections that take up to 1
    second to render.

    (4) How are counter results of more than 32 bits returned?

    RESOLVED:  Via two new datatypes, int64ANGLE and uint64ANGLE, and their
    corresponding GetQueryObject entry points.  These types hold integer
    values and have a minimum bit width of 64.

    (5) Should the extension measure total time elapsed between the full
        completion of the BeginQuery and EndQuery commands, or just time
        spent in the graphics library?

    RESOLVED:  This extension will measure the total time elapsed between
    the full completion of these commands.  Future extensions may implement
    a query to determine time elapsed at different stages of the graphics
    pipeline.

    (6) If multiple query types are supported, can multiple query types be
        active simultaneously?

    RESOLVED:  Yes; an application may perform a timer query and another
    type of query simultaneously.  An application can not perform multiple
    timer queries or multiple queries of other types simultaneously.  An
    application also can not use the same query object for another query
    and a timer query simultaneously.

    (7) Do query objects have a query type permanently associated with them?

    RESOLVED:  No.  A single query object can be used to perform different
    types of queries, but not at the same time.

    Having a fixed type for each query object simplifies some aspects of the
    implementation -- not having to deal with queries with different result
    sizes, for example.  It would also mean that BeginQuery() with a query
    object of the "wrong" type would result in an INVALID_OPERATION error.

    UPDATE: This resolution was relevant for EXT_timer_query and OpenGL 2.0.
    Since EXT_transform_feedback has since been incorporated into the core,
    the resolution is that BeginQuery will generate error INVALID_OPERATION
    if <id> represents a query object of a different type.

    (8) How predictable/repeatable are the results returned by the timer
        query?

    RESOLVED:  In general, the amount of time needed to render the same
    primitives should be fairly constant.  But there may be many other
    system issues (e.g., context switching on the CPU and GPU, virtual
    memory page faults, memory cache behavior on the CPU and GPU) that can
    cause times to vary wildly.

    Note that modern GPUs are generally highly pipelined, and may be
    processing different primitives in different pipeline stages
    simultaneously.  In this extension, the timers start and stop when the
    BeginQuery/EndQuery commands reach the bottom of the rendering pipeline.
    What that means is that by the time the timer starts, the GL driver on
    the CPU may have started work on GL commands issued after BeginQuery,
    and the higher pipeline stages (e.g., vertex transformation) may have
    started as well.

   (9) What should the new 64 bit integer type be called?

    RESOLVED: The new types will be called GLint64ANGLE/GLuint64ANGLE.  The new
    command suffixes will be i64 and ui64.  These names clearly convey the
    minimum size of the types.  These types are similar to the C99 standard
    type int_least64_t, but we use names similar to the C99 optional type
    int64_t for simplicity.

Issues from ARB_timer_query

   (10) What about tile-based implementations? The effects of a command are
        not complete until the frame is completely rendered. Timing recorded
        before the frame is complete may not be what developers expect. Also
        the amount of time needed to render the same primitives is not
        consistent, which conflicts with issue (8) above. The time depends on
        how early or late in the scene it is placed.

    RESOLVED: The current language supports tile-based rendering okay as it
    is written. Developers are warned that using timers on tile-based
    implementation may not produce results they expect since rendering is not
    done in a linear order. Timing results are calculated when the frame is
    completed and may depend on how early or late in the scene it is placed.
    
   (11) Can the GL implementation use different clocks to implement the
        TIME_ELAPSED and TIMESTAMP queries?

   RESOLVED: Yes, the implemenation can use different internal clocks to
   implement TIME_ELAPSED and TIMESTAMP. If different clocks are
   used it is possible there is a slight discrepancy when comparing queries
   made from TIME_ELAPSED and TIMESTAMP; they may have slight
   differences when both are used to measure the same sequence. However, this
   is unlikely to affect real applications since comparing the two queries is
   not expected to be useful.

Issues

    (12) What should we call this extension?

    RESOLVED: ANGLE_timer_query

    (13) Why is this done as a separate extension instead of just supporting
         ARB_timer_query?

    ARB_timer_query is written against OpenGL 3.2, which includes a lot of
    the required support for dealing with query objects. None of these
    functions or tokens exist in OpenGL ES, and as such have to be added in
    this specification.

    (14) How does this extension differ from ARB_timer_query?

    This extension contains most ARB_timer_query behavior unchanged as well
    as a subset of the query support required to use it from the core
    OpenGL 3.2 spec. It omits the glGetInteger(TIMESTAMP) functionality used to
    query the current time on the GPU, but the behavior for all remaining
    functionality taken from ARB_timer_query is the same.
    
    (15) Are query objects shareable between multiple contexts?

    RESOLVED: No.  Query objects are lightweight and we normally share 
    large data across contexts.  Also, being able to share query objects
    across contexts is not particularly useful.  In order to do the async 
    query across contexts, a query on one context would have to be finished 
    before the other context could query it. 

Revision History

    Revision 1, 2011/04/28
      - copied from revision 9 of ARB_timer_query and revision 7 of
        ARB_occlusion_query
      - removed language that was clearly not relevant to ES2
      - rebased changes against the OpenGL ES 2.0 specification
