зеркало из https://github.com/AvaloniaUI/angle.git
111 строки
3.3 KiB
Plaintext
111 строки
3.3 KiB
Plaintext
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.
|