1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
gpu / GLES2 / extensions / ANGLE / EGL_ANGLE_sync_control_rate.txt [blame]
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.