1Name 2 3 ANGLE_sync_control_rate 4 5Name Strings 6 7 EGL_ANGLE_sync_control_rate 8 9Contact 10 11 Jonah Ryan-Davis, Google (jonahr 'at' google.com) 12 13Status 14 15 Draft. 16 17Version 18 19 Version 1, 2020-03-24 20 21 Based on GLX_OML_sync_control Revision 6.0 22 23Number 24 25 ??? 26 27Dependencies 28 29 The extension is written against the EGL 1.2 Specification, although it 30 should work on other versions of these specifications. This extension 31 also requires an operating system which supports CLOCK_MONOTONIC. 32 33Overview 34 35 This extension provides counters which let applications know about the 36 timing of the last vertical retrace. By looking at the system clock, as 37 well as the refresh rate of the monitor, this should enable applications 38 to predict the position of future retraces so as to schedule an optimal 39 workload. 40 41 This extension incorporates the use of three counters that provide 42 the necessary synchronization. The Unadjusted System Time (or UST) 43 is the 64-bit CLOCK_MONOTONIC clock; in particular this lets the 44 application schedule future vertical retraces by querying this clock. 45 The graphics Media Stream Counter (or graphics MSC) is a counter 46 that is unique to the graphics subsystem and increments for each 47 vertical retrace that occurs. The Swap Buffer Counter (SBC) is an 48 attribute of an EGLSurface and is incremented each time a swap 49 buffer action is performed on the associated surface. 50 51 The use of these three counters allows the application to 52 synchronize graphics rendering to vertical retraces and/or swap 53 buffer actions. For example, by querying the synchronization values for 54 a given surface, the application can accurately predict the timing for 55 the next vertical retraces and schedule rendering accordingly. 56 57Issues 58 59 None. 60 61IP Status 62 63 No known issues. 64 65New Procedures and Functions 66 67 Bool eglGetMscRateANGLE(EGLDisplay* dpy, 68 EGLSurface surface, 69 int32_t* numerator, 70 int32_t* denominator) 71 72New Tokens 73 74 None 75 76Additions to the EGL 1.3 Specification 77 78 The graphics MSC value is incremented once for each screen refresh. 79 For a non-interlaced display, this means that the graphics MSC value 80 is incremented for each frame. For an interlaced display, it means 81 that it will be incremented for each field. For a multi-monitor 82 system, the monitor used to determine MSC is the one where the surface 83 is located. If the surface spans multiple monitors, the monitor used 84 to determine MSC is the one with the biggest coverage in pixels. 85 86 eglGetMscRateANGLE returns the rate at which the MSC will be incremented 87 for the display associated with <hdc>. The rate is expressed in Hertz 88 as <numerator> / <denominator>. If the MSC rate in Hertz is an 89 integer, then <denominator> will be 1 and <numerator> will be 90 the MSC rate. 91 92 The function eglGetMscRateANGLE will return TRUE if the function 93 completed successfully, FALSE otherwise. 94 95 Each time eglSwapBuffer succeeds, the SBC will be increased within a 96 finite time period. 97 98Errors 99 100 The function eglGetMscRateANGLE will return FALSE if there is no 101 current EGLContext. 102 103New Implementation Dependent State 104 105 None 106 107Revision History 108 109 Version 1, 2020-03-24 (Jonah Ryan-Davis) 110 - Initial draft, based on GLX_OML_sync_control revision 6.0. 111