Name

    EXT_buffer_age

Name Strings

    GLX_EXT_buffer_age

Notice

    Copyright 2011,2012 Intel Cooperation. All rights reserved.

Contributors

    Robert Bragg
    Neil Roberts
    James Jones

Contacts

    Robert Bragg, Intel (robert.bragg 'at' intel.com)

Status

    Draft

Version

    8 - Sept 20, 2012

Number

    427

Dependencies

    Requires GLX 1.4

    This extension is written against the wording of the GLX 1.4
    Specification.

    GLX_OML_swap_method trivially interacts with this extension.

Overview

    The aim of this extension is to expose enough information to
    applications about how the driver manages the set of front and
    back buffers associated with a given surface to allow applications
    to re-use the contents of old frames and minimize how much must be
    redrawn for the next frame.

    There are lots of different ways for a driver to manage these
    buffers, from double buffering, different styles of triple
    buffering and even n-buffering or simply single buffer rendering.
    We also need to consider that power management events or memory
    pressure events might also result in some of the buffers not
    currently in-use being freed.

    This extension lets applications query the age of the back buffer
    contents for a GLX surface as the number of frames elapsed since
    the contents were most recently defined. The back buffer can
    either be reported as invalid (has an age of 0) or it may be
    reported to contain the contents from n frames prior to the
    current frame.

    Once the application has queried the buffer age, the age of
    contents remains valid until the end of the frame for all pixels
    that continue to pass the pixel ownership test.

    For example if you consider a double buffered application drawing
    a small spinning icon, but everything else in the scene is static.
    If we know that 2 buffers are continuously being recycled each
    time glXSwapBuffers is called then even though 100s of frames may
    need to be drawn to animate the icon it can be seen that the two
    buffers are remaining unchanged except within the bounds of the
    icon. In this scenario ideally the application would simply
    perform an incremental update of the old buffer instead of
    redundantly redrawing all the static parts of the scene. The
    problem up until now though has been that GLX doesn't report how
    buffers may be recycled so it wasn't safe for applications to try
    and reuse their contents. Now applications can keep track of all
    the regions that have changed over the last n frames and by
    knowing the age of the buffer they know how to efficiently repair
    buffers that are re-cycled instead of redrawing the entire scene.

New Procedures and Functions

    None

New Tokens

    GLX_BACK_BUFFER_AGE_EXT    0x20F4

Additions to Section 3.3.6 of the GLX 1.4 Specification (Querying Attributes)

    Add the following text to the description for glXQueryDrawable

        Querying GLX_BACK_BUFFER_AGE_EXT returns the age of the color
        contents of the current back-buffer as the number of frames
        elapsed since it was most recently defined. Applications can,
        under certain conditions described below, use this age to
        safely rely on the contents of old back-buffers to potentially
        reduce the amount of redrawing they do each frame. A frame is
        the period between calls to any of the functions in table 3.X,
        hereafter referred to as "frame boundaries."

        Function name
        --------------------
        glXSwapBuffers
        glXSwapBuffersMscOML

        Table 3.X, Frame Boundary Functions

        Buffers' ages are initialized to 0 at buffer creation time.
        When a frame boundary is reached, the following occurs before
        any exchanging or copying of color buffers:

            * The current back buffer's age is set to 1.
            * Any other color buffers' ages are incremented by 1 if
              their age was previously greater than 0.

        For the purposes of buffer age tracking, a buffer's content
        is considered defined when its age transitions to a value
        greater than 0.

        For example, with a double buffered surface and an
        implementation that swaps via buffer exchanges, the age would
        usually be 2. With a triple buffered surface the age would
        usually be 3. An age of 1 means the previous swap was
        implemented as a copy. An age of 0 means the buffer has only
        just been initialized and the contents are undefined. Single
        buffered drawables have no frame boundaries and therefore
        always have an age of 0.

        Frame boundaries are the only events that can set a buffer's
        age to a positive value. Once GLX_BACK_BUFFER_AGE_EXT has been
        queried then it can be assumed that the age will remain valid
        until the next frame boundary. GLX implementations are
        permitted, but not required, to reset the buffer age in
        response to pixel ownership test changes for any pixels within
        the drawable, or if new pixels are added to or removed from
        the drawable, i.e., the drawable is resized. A reset of this
        nature does not affect the age of pixels that pass the pixel
        ownership test before and after the event that caused the
        reset.  In other words, applications can assume that no event
        will invalidate the content of pixels that continuously pass
        the pixel test between when the buffer age was queried and the
        following frame boundary.

        It is up to applications to track pixel ownership using data
        collected from window configuration, expose, and any other
        relevant X events.

        If the GLX implementation decides to free un-used back-buffers
        when the system is under memory pressure or in response to
        power-management events then GLX will return an age of 0 when
        it allocates a new buffer at the start of a new frame.

        GLX_BACK_BUFFER_AGE_EXT state, while a property of the GLX
        drawable that owns the buffers, lives in the address space of
        the current GL server context.  That is, if a GLX drawable is
        used with multiple direct-rendering contexts in separate
        processes, the buffer age is not guaranteed to be
        synchronized across the processes.  Similarly, if a GLX
        drawable is used with both an indirect and a direct context,
        the buffer age may depend on which context the drawable is
        bound to when it is queried. However, binding and unbinding a
        drawable to and from one or more contexts in the same address
        space will not affect the ages of any buffers in that
        drawable.

    Add the following text to the last paragraph of the description for
    glXQueryDrawable describing error conditions.

        If querying GLX_BACK_BUFFER_AGE_EXT and <draw> is not bound to
        the calling thread's current context a GLXBadDrawable error is
        generated.

Dependencies on OpenGL

    None

Dependencies on GLX_OML_sync_control

    If GLX_OML_sync_control is not supported, glXSwapBuffersMscOML is
    removed from Table 3.X.

Issues

    1) How can an application know that all pixels of a re-usable
       buffer were originally owned by the current context?

        RESOLVED: It is up to the application to track pixel
        ownership using existing X11 events, such as expose or
        configure notify events.

    2) What are the semantics if the buffer age attribute is queried
       for a drawable that isn't bound to the calling thread's
       context?

        RESOLVED: we report a GLXBadDrawable error.

    3) Is the buffer age tracked in the GLX client or the GLX server?

        RESOLVED: Querying the buffer age needs to be a fast
        operation, so it makes sense to track it in the GLX client.
        However, GLX implementations without support for direct
        rendering likely won't have any per-drawable client state.
        Therefore, the buffer age is tracked in the same address space
        as the current GL server context.  For direct rendering, this
        is the GLX client. For indirect rendering, it is the GLX
        server.  The buffer age is not synchronized between the two
        when changing contexts.

    4) What is the buffer age of a single buffered drawable?

        RESOLVED: 0.  This falls out implicitly from the buffer age
        calculations, which dictate that a buffer's age starts at 0,
        and is only incremented by frame boundaries.  Since frame
        boundary functions do not affect single buffered drawables,
        their age will always be 0.

    5) What guarantees are provided after querying the buffer age?

        RESOLVED: The buffer age of pixels which continue to pass the
        pixel ownership test must remain valid until the next frame
        boundary otherwise applications can't be absolutely sure of
        the consistency of their rendered content.  Implementations
        may reset the queryable age of the buffer when pixel ownership
        changes occur.  This is further clarified in section 3.3.6

Revision History

    Version 1, 07/02/2012
      - First draft
    Version 2, 08/03/2012
      - Document that once the age is queried it remains valid until
        the end of the frame.
    Version 3, 08/03/2012
      - Clarify that only buffers who's contents were fully owned by
        the context are tracked.
    Version 4 21/03/2012
      - Document that an error will be generated if querying the age
        for a drawable not bound to the current context.
    Version 5 21/08/2012
      - Relax pixel ownership requirements
      - Slightly tweak and explicitly document buffer age calculation
      - Note that buffer age is tracked in the GLX client when using
        direct rendering.
    Version 6 11/09/2012
      - Clarify guarantees once the age has been queried
    Version 7 17/09/2012
      - Further clarify pixel age vs. buffer age
      - Rename GLX_BUFFER_AGE_EXT to GLX_BACK_BUFFER_AGE_EXT
      - Assign value to GLX_BACK_BUFFER_AGE_EXT
    Version 8 20/09/2012
      - Remove overly precise definition of buffer age
