﻿Name

   ANGLE_sync_control_rate

Name Strings

   EGL_ANGLE_sync_control_rate

Contact

   Jonah Ryan-Davis, Google (jonahr 'at' google.com)

Status

   Draft.

Version

   Version 1, 2020-03-24

   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 eglGetMscRateANGLE(EGLDisplay* dpy,
                           EGLSurface surface,
                           int32_t* numerator,
                           int32_t* denominator)

New Tokens

   None

Additions to the EGL 1.3 Specification

   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.

   eglGetMscRateANGLE returns the rate at which the MSC will be incremented
   for the display associated with <hdc>. The rate is expressed in Hertz
   as <numerator> / <denominator>. If the MSC rate in Hertz is an
   integer, then <denominator> will be 1 and <numerator> will be
   the MSC rate.

   The function eglGetMscRateANGLE 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 eglGetMscRateANGLE will return FALSE if there is no
   current EGLContext.

New Implementation Dependent State

   None

Revision History

    Version 1, 2020-03-24 (Jonah Ryan-Davis)
       - Initial draft, based on GLX_OML_sync_control revision 6.0.
