Hash :
ee218f27
Author :
Date :
2017-03-22T15:39:13
Re-land eglGetSyncValuesCHROMIUM extension. This reverts commit 20c97cac2a15144b61ceec7404a9e6249c40f50a and adds a few trivial changes to make it build with the current version of ANGLE code. Please see https://bugs.chromium.org/p/chromium/issues/detail?id=614147 for more details on how this extension will be used. Original description: This change adds implementation of eglGetSyncValuesCHROMIUM extension on D3D11 with Direct Composition. This should work on Windows 8.1 and above. The implementation is based on IDXGISwapChain::GetFrameStatistics. Extension documentation: https://chromium.googlesource.com/chromium/src/gpu/+/master/GLES2/extensions/CHROMIUM/EGL_CHROMIUM_get_sync_values.txt BUG=angleproject:1402 Change-Id: I4b77899f31a4c4cf1fa7f20ab12de5a02ccf74d8 Reviewed-on: https://chromium-review.googlesource.com/459217 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
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 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
Name
CHROMIUM_get_sync_values
Name Strings
EGL_CHROMIUM_get_sync_values
Contact
Stéphane Marchesin, Google (marcheu 'at' google.com)
Status
Draft.
Version
Last Modified Date: N/A Revision: 1.0
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)
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.
The function eglGetSyncValuesCHROMIUM 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
eglGetSyncValuesCHROMIUM 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