﻿Name

   CHROMIUM_sync_control

Name Strings

   EGL_CHROMIUM_sync_control

Contact

   Stéphane Marchesin, Google (marcheu 'at' google.com)

Status

   Draft.

Version

   Version 2, 2015-05-05

   Based on GLX_OML_sync_control Revision 6.0

Number

   ???

Dependencies

   The extension is written against the EGL 1.2 Specification, although it
   should work on other versions of these specifications. This extension
   also requires an operating system which supports CLOCK_MONOTONIC.

Overview

   This extension provides counters which let applications know about the
   timing of the last vertical retrace. By looking at the system clock, as
   well as the refresh rate of the monitor, this should enable applications
   to predict the position of future retraces so as to schedule an optimal
   workload.

   This extension incorporates the use of three counters that provide
   the necessary synchronization. The Unadjusted System Time (or UST)
   is the 64-bit CLOCK_MONOTONIC clock; in particular this lets the
   application schedule future vertical retraces by querying this clock.
   The graphics Media Stream Counter (or graphics MSC) is a counter
   that is unique to the graphics subsystem and increments for each
   vertical retrace that occurs. The Swap Buffer Counter (SBC) is an
   attribute of an EGLSurface and is incremented each time a swap
   buffer action is performed on the associated surface.

   The use of these three counters allows the application to
   synchronize graphics rendering to vertical retraces and/or swap
   buffer actions. For example, by querying the synchronization values for
   a given surface, the application can accurately predict the timing for
   the next vertical retraces and schedule rendering accordingly.

Issues

   None.

IP Status

   No known issues.

New Procedures and Functions

   Bool eglGetSyncValuesCHROMIUM(EGLDisplay dpy,
                                 EGLSurface surface,
                                 int64_t* ust,
                                 int64_t* msc,
                                 int64_t* sbc)

New Tokens

   None

Additions to the EGL 1.3 Specification

   eglGetSyncValuesCHROMIUM returns the current UST/MSC/SBC triple. A UST
   timestamp is obtained each time the graphics MSC is incremented.
   If this value does not reflect the value of the UST at the time the
   first scan line of the display begins passing through the video
   output port, it will be adjusted by the graphics driver to do so
   prior to being returned by any of the functions defined by this
   extension.

   This UST timestamp, together with the current graphics MSC and the
   current SBC, comprise the current UST/MSC/SBC triple. The UST,
   graphics MSC, and SBC values are not part of the render context
   state. These values cannot be pushed or popped. The graphics MSC
   value is initialized to 0 when the graphics device is initialized.
   The SBC is per-surface state and is initialized to 0 when the
   EGLSurface data structure is initialized.

   The SBC value is incremented by the graphics driver at the completion
   of each buffer swap (e.g., the pixel copy has been completed or the
   hardware register that swaps memory banks has been written). For pixel
   formats that do not contain a back buffer, the SBC will always be
   returned as 0.

   The graphics MSC value is incremented once for each screen refresh.
   For a non-interlaced display, this means that the graphics MSC value
   is incremented for each frame. For an interlaced display, it means
   that it will be incremented for each field. For a multi-monitor
   system, the monitor used to determine MSC is the one where the surface
   is located. If the surface spans multiple monitors, the monitor used
   to determine MSC is the one with the biggest coverage in pixels.

   The function eglGetSyncValuesCHROMIUM will return TRUE if the function
   completed successfully, FALSE otherwise.

   Each time eglSwapBuffer succeeds, the SBC will be increased within a
   finite time period.

Errors

   The function eglGetSyncValuesCHROMIUM will return FALSE if there is no
   current EGLContext.


New State

   Get Value                 Get Command            Type    Initial Value
   ---------                 -----------            ----    -------------
     [UST]             eglGetSyncValuesCHROMIUM      Z      unspecified
     [MSC]             eglGetSyncValuesCHROMIUM      Z                  0
     [SBC]             eglGetSyncValuesCHROMIUM      Z                  0

New Implementation Dependent State

   None

Revision History

    Version 2, 2015-05-05 (Chad Versace)
       - Rename to EGL_CHROMIUM_sync_control from EGL_CHROMIUM_get_sync_values.
         EGL_CHROMIUM_sync_control is the de facto extension name because all
         users query that extension string.

    Version 1, 2014-08-15 (Stéphane Marchesin)
       - Initial draft, based on GLX_OML_sync_control revision 6.0.
