| // Copyright 2018-2021 The Khronos Group Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_EXT_calibrated_timestamps.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2018-10-04 |
| *IP Status*:: |
| No known IP claims. |
| *Contributors*:: |
| - Matthaeus G. Chajdas, AMD |
| - Alan Harrison, AMD |
| - Derrick Owens, AMD |
| - Daniel Rakos, AMD |
| - Jason Ekstrand, Intel |
| - Keith Packard, Valve |
| |
| === Description |
| |
| This extension provides an interface to query calibrated timestamps obtained |
| quasi simultaneously from two time domains. |
| |
| include::{generated}/interfaces/VK_EXT_calibrated_timestamps.txt[] |
| |
| === Issues |
| |
| 1) Is the device timestamp value returned in the same time domain as the |
| timestamp values written by flink:vkCmdWriteTimestamp? |
| |
| *RESOLVED*: Yes. |
| |
| 2) What time domain is the host timestamp returned in? |
| |
| *RESOLVED*: A query is provided to determine the calibrateable time domains. |
| The expected host time domain used on Windows is that of |
| QueryPerformanceCounter, and on Linux that of CLOCK_MONOTONIC. |
| |
| 3) Should we support other time domain combinations than just one host and |
| the device time domain? |
| |
| *RESOLVED*: Supporting that would need the application to query the set of |
| supported time domains, while supporting only one host and the device time |
| domain would only need a query for the host time domain type. |
| The proposed API chooses the general approach for the sake of extensibility. |
| |
| 4) Should we use CLOCK_MONOTONIC_RAW instead of CLOCK_MONOTONIC? |
| |
| *RESOLVED*: CLOCK_MONOTONIC is usable in a wider set of situations, however, |
| it is subject to NTP adjustments so some use cases may prefer |
| CLOCK_MONOTONIC_RAW. |
| Thus this extension allows both to be exposed. |
| |
| 5) How can the application extrapolate future device timestamp values from |
| the calibrated timestamp value? |
| |
| *RESOLVED*: slink:VkPhysicalDeviceLimits::pname:timestampPeriod makes it |
| possible to calculate future device timestamps as follows: |
| |
| 6) In what queue are timestamp values in time domain |
| ename:VK_TIME_DOMAIN_DEVICE_EXT captured by |
| flink:vkGetCalibratedTimestampsEXT? |
| |
| *RESOLVED*: An implementation supporting this extension will have all its |
| VkQueue share the same time domain. |
| |
| [source,c] |
| --------------------------------------------------- |
| futureTimestamp = calibratedTimestamp + deltaNanoseconds / timestampPeriod |
| --------------------------------------------------- |
| |
| 6) Can the host and device timestamp values drift apart over longer periods |
| of time? |
| |
| *RESOLVED*: Yes, especially as some time domains by definition allow for |
| that to happen (e.g. CLOCK_MONOTONIC is subject to NTP adjustments). |
| Thus it is recommended that applications re-calibrate from time to time. |
| |
| 7) Should we add a query for reporting the maximum deviation of the |
| timestamp values returned by calibrated timestamp queries? |
| |
| *RESOLVED*: A global query seems inappropriate and difficult to enforce. |
| However, it is possible to return the maximum deviation any single |
| calibrated timestamp query can have by sampling one of the time domains |
| twice as follows: |
| |
| [source,c] |
| --------------------------------------------------- |
| timestampX = timestampX_before = SampleTimeDomain(X) |
| for each time domain Y != X |
| timestampY = SampleTimeDomain(Y) |
| timestampX_after = SampleTimeDomain(X) |
| maxDeviation = timestampX_after - timestampX_before |
| --------------------------------------------------- |
| |
| 8) Can the maximum deviation reported ever be zero? |
| |
| *RESOLVED*: Unless the tick of each clock corresponding to the set of time |
| domains coincides and all clocks can literally be sampled simutaneously, |
| there is not really a possibility for the maximum deviation to be zero, so |
| by convention the maximum deviation is always at least the maximum of the |
| length of the ticks of the set of time domains calibrated and thus can never |
| be zero. |
| |
| === Version History |
| |
| * Revision 2, 2021-03-16 (Lionel Landwerlin) |
| - Specify requirement on device timestamps |
| * Revision 1, 2018-10-04 (Daniel Rakos) |
| - Internal revisions. |