зеркало из https://github.com/AvaloniaUI/angle.git
158 строки
5.6 KiB
Plaintext
158 строки
5.6 KiB
Plaintext
Name
|
|
|
|
CHROMIUM_sync_control
|
|
|
|
Name Strings
|
|
|
|
EGL_CHROMIUM_sync_control
|
|
|
|
Contact
|
|
|
|
Stéphane Marchesin, Google (marcheu 'at' google.com)
|
|
|
|
Status
|
|
|
|
Draft.
|
|
|
|
Version
|
|
|
|
Version 3, 2020-01-23
|
|
|
|
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)
|
|
|
|
Bool eglGetMscRateCHROMIUM(EGLDisplay* dpy,
|
|
EGLSurface surface,
|
|
int32_t* numerator,
|
|
int32_t* denominator)
|
|
|
|
|
|
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.
|
|
|
|
eglGetMscRateCHROMIUM 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 functions eglGetSyncValuesCHROMIUM, and eglGetMscRateCHROMIUM 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 functions eglGetSyncValuesCHROMIUM, and eglGetMscRateCHROMIUM 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 3, 2020-01-23 (Jonah Ryan-Davis)
|
|
- Add the function eglGetMscRateCHROMIUM based on glXGetMscRateOML from
|
|
GLX_OML_sync_control revision 6.0.
|
|
|
|
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.
|