OLD | NEW |
(Empty) | |
| 1 Name |
| 2 |
| 3 CHROMIUM_get_sync_values |
| 4 |
| 5 Name Strings |
| 6 |
| 7 EGL_CHROMIUM_get_sync_values |
| 8 |
| 9 Contact |
| 10 |
| 11 Stéphane Marchesin, Google (marcheu 'at' google.com) |
| 12 |
| 13 Status |
| 14 |
| 15 Draft. |
| 16 |
| 17 Version |
| 18 |
| 19 Last Modified Date: N/A Revision: 1.0 |
| 20 |
| 21 Based on GLX_OML_sync_control Revision 6.0 |
| 22 |
| 23 Number |
| 24 |
| 25 ??? |
| 26 |
| 27 Dependencies |
| 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 |
| 33 Overview |
| 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 |
| 57 Issues |
| 58 |
| 59 None. |
| 60 |
| 61 IP Status |
| 62 |
| 63 No known issues. |
| 64 |
| 65 New Procedures and Functions |
| 66 |
| 67 Bool eglGetSyncValuesCHROMIUM(EGLDisplay dpy, |
| 68 EGLSurface surface, |
| 69 int64_t* ust, |
| 70 int64_t* msc, |
| 71 int64_t* sbc) |
| 72 |
| 73 |
| 74 New Tokens |
| 75 |
| 76 None |
| 77 |
| 78 Additions to the EGL 1.3 Specification |
| 79 |
| 80 eglGetSyncValuesCHROMIUM returns the current UST/MSC/SBC triple. A UST |
| 81 timestamp is obtained each time the graphics MSC is incremented. |
| 82 If this value does not reflect the value of the UST at the time the |
| 83 first scan line of the display begins passing through the video |
| 84 output port, it will be adjusted by the graphics driver to do so |
| 85 prior to being returned by any of the functions defined by this |
| 86 extension. |
| 87 |
| 88 This UST timestamp, together with the current graphics MSC and the |
| 89 current SBC, comprise the current UST/MSC/SBC triple. The UST, |
| 90 graphics MSC, and SBC values are not part of the render context |
| 91 state. These values cannot be pushed or popped. The graphics MSC |
| 92 value is initialized to 0 when the graphics device is initialized. |
| 93 The SBC is per-surface state and is initialized to 0 when the |
| 94 EGLSurface data structure is initialized. |
| 95 |
| 96 The SBC value is incremented by the graphics driver at the completion |
| 97 of each buffer swap (e.g., the pixel copy has been completed or the |
| 98 hardware register that swaps memory banks has been written). For pixel |
| 99 formats that do not contain a back buffer, the SBC will always be |
| 100 returned as 0. |
| 101 |
| 102 The graphics MSC value is incremented once for each screen refresh. |
| 103 For a non-interlaced display, this means that the graphics MSC value |
| 104 is incremented for each frame. For an interlaced display, it means |
| 105 that it will be incremented for each field. For a multi-monitor |
| 106 system, the monitor used to determine MSC is the one where the surface |
| 107 is located. If the surface spans multiple monitors, the monitor used |
| 108 to determine MSC is the one with the biggest coverage in pixels. |
| 109 |
| 110 The function eglGetSyncValuesCHROMIUM will return TRUE if the function |
| 111 completed successfully, FALSE otherwise. |
| 112 |
| 113 Each time eglSwapBuffer succeeds, the SBC will be increased within a |
| 114 finite time period. |
| 115 |
| 116 Errors |
| 117 |
| 118 eglGetSyncValuesCHROMIUM will return FALSE if there is no current |
| 119 EGLContext. |
| 120 |
| 121 New State |
| 122 |
| 123 Get Value Get Command Type Initial Value |
| 124 --------- ----------- ---- ------------- |
| 125 [UST] eglGetSyncValuesCHROMIUM Z unspecified |
| 126 [MSC] eglGetSyncValuesCHROMIUM Z 0 |
| 127 [SBC] eglGetSyncValuesCHROMIUM Z 0 |
| 128 |
| 129 New Implementation Dependent State |
| 130 |
| 131 None |
OLD | NEW |