summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLionel Landwerlin <[email protected]>2017-06-15 15:22:19 +0100
committerLionel Landwerlin <[email protected]>2017-06-19 22:11:00 +0100
commitc77d98ef32a0f9763d4c8945527d00ab98e748cc (patch)
tree551f2c24e046e091182dcb9b9326b07cfade4e56
parente5743ee014a82f228085dfcd5d653fcbd3d86fe4 (diff)
intel: common: express timestamps units in frequency
Rather than storing the period as a double that looses some precision. Also fixes the Gen9LP timestamp frequency which is no 19200123 but 19200000 as pointed by Ville : https://lists.freedesktop.org/archives/intel-gfx/2017-April/125126.html Finally add the Cannonlake timestamp frequency. Signed-off-by: Lionel Landwerlin <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/intel/common/gen_device_info.c19
-rw-r--r--src/intel/common/gen_device_info.h5
-rw-r--r--src/intel/vulkan/anv_device.c2
-rw-r--r--src/mesa/drivers/dri/i965/brw_queryobj.c2
4 files changed, 15 insertions, 13 deletions
diff --git a/src/intel/common/gen_device_info.c b/src/intel/common/gen_device_info.c
index 89a0d9e9e76..14d3761076f 100644
--- a/src/intel/common/gen_device_info.c
+++ b/src/intel/common/gen_device_info.c
@@ -36,7 +36,7 @@ static const struct gen_device_info gen_device_info_i965 = {
.urb = {
.size = 256,
},
- .timebase_scale = 80,
+ .timestamp_frequency = 12500000,
};
static const struct gen_device_info gen_device_info_g4x = {
@@ -52,7 +52,7 @@ static const struct gen_device_info gen_device_info_g4x = {
.urb = {
.size = 384,
},
- .timebase_scale = 80,
+ .timestamp_frequency = 12500000,
};
static const struct gen_device_info gen_device_info_ilk = {
@@ -67,7 +67,7 @@ static const struct gen_device_info gen_device_info_ilk = {
.urb = {
.size = 1024,
},
- .timebase_scale = 80,
+ .timestamp_frequency = 12500000,
};
static const struct gen_device_info gen_device_info_snb_gt1 = {
@@ -92,7 +92,7 @@ static const struct gen_device_info gen_device_info_snb_gt1 = {
[MESA_SHADER_GEOMETRY] = 256,
},
},
- .timebase_scale = 80,
+ .timestamp_frequency = 12500000,
};
static const struct gen_device_info gen_device_info_snb_gt2 = {
@@ -117,7 +117,7 @@ static const struct gen_device_info gen_device_info_snb_gt2 = {
[MESA_SHADER_GEOMETRY] = 256,
},
},
- .timebase_scale = 80,
+ .timestamp_frequency = 12500000,
};
#define GEN7_FEATURES \
@@ -127,7 +127,7 @@ static const struct gen_device_info gen_device_info_snb_gt2 = {
.has_llc = true, \
.has_pln = true, \
.has_surface_tile_offset = true, \
- .timebase_scale = 80
+ .timestamp_frequency = 12500000
static const struct gen_device_info gen_device_info_ivb_gt1 = {
GEN7_FEATURES, .is_ivybridge = true, .gt = 1,
@@ -300,7 +300,7 @@ static const struct gen_device_info gen_device_info_hsw_gt3 = {
.max_tes_threads = 504, \
.max_gs_threads = 504, \
.max_wm_threads = 384, \
- .timebase_scale = 80
+ .timestamp_frequency = 12500000
static const struct gen_device_info gen_device_info_bdw_gt1 = {
GEN8_FEATURES, .gt = 1,
@@ -398,7 +398,7 @@ static const struct gen_device_info gen_device_info_chv = {
.max_tcs_threads = 336, \
.max_tes_threads = 336, \
.max_cs_threads = 56, \
- .timebase_scale = 1000000000.0 / 12000000.0, \
+ .timestamp_frequency = 12000000, \
.urb = { \
.size = 384, \
.min_entries = { \
@@ -423,7 +423,7 @@ static const struct gen_device_info gen_device_info_chv = {
.max_tes_threads = 112, \
.max_gs_threads = 112, \
.max_cs_threads = 6 * 6, \
- .timebase_scale = 1000000000.0 / 19200123.0, \
+ .timestamp_frequency = 19200000, \
.urb = { \
.size = 192, \
.min_entries = { \
@@ -595,6 +595,7 @@ static const struct gen_device_info gen_device_info_glk_2x6 = {
.max_tcs_threads = 432, \
.max_tes_threads = 624, \
.max_cs_threads = 56, \
+ .timestamp_frequency = 19200000, \
.urb = { \
.size = 256, \
.min_entries = { \
diff --git a/src/intel/common/gen_device_info.h b/src/intel/common/gen_device_info.h
index 4a467cca3ef..86daf6e5337 100644
--- a/src/intel/common/gen_device_info.h
+++ b/src/intel/common/gen_device_info.h
@@ -26,6 +26,7 @@
#define GEN_DEVICE_INFO_H
#include <stdbool.h>
+#include <stdint.h>
/**
* Intel hardware information and quirks
@@ -159,7 +160,7 @@ struct gen_device_info
* corresponded to 80 nanoseconds.
*
* Since Gen9 the numbers aren't so round, with a a frequency of 12MHz for
- * SKL (or scale factor of 83.33333333) and a frequency of 19200123Hz for
+ * SKL (or scale factor of 83.33333333) and a frequency of 19200000Hz for
* BXT.
*
* For simplicty to fit with the current code scaling by a single constant
@@ -174,7 +175,7 @@ struct gen_device_info
* E.g. with crude testing on my system using the 'correct' scale factor I'm
* seeing a drift of ~2 milliseconds per second.
*/
- double timebase_scale;
+ uint64_t timestamp_frequency;
/** @} */
};
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 8e8c50200b1..2423aa3468f 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -868,7 +868,7 @@ void anv_GetPhysicalDeviceProperties(
.storageImageSampleCounts = VK_SAMPLE_COUNT_1_BIT,
.maxSampleMaskWords = 1,
.timestampComputeAndGraphics = false,
- .timestampPeriod = devinfo->timebase_scale,
+ .timestampPeriod = 1000000000ull / devinfo->timestamp_frequency,
.maxClipDistances = 8,
.maxCullDistances = 8,
.maxCombinedClipAndCullDistances = 8,
diff --git a/src/mesa/drivers/dri/i965/brw_queryobj.c b/src/mesa/drivers/dri/i965/brw_queryobj.c
index bccd33b9d38..04ce9a94cad 100644
--- a/src/mesa/drivers/dri/i965/brw_queryobj.c
+++ b/src/mesa/drivers/dri/i965/brw_queryobj.c
@@ -47,7 +47,7 @@ brw_timebase_scale(struct brw_context *brw, uint64_t gpu_timestamp)
{
const struct gen_device_info *devinfo = &brw->screen->devinfo;
- return (double)gpu_timestamp * devinfo->timebase_scale;
+ return (1000000000ull * gpu_timestamp) / devinfo->timestamp_frequency;
}
/* As best we know currently, the Gen HW timestamps are 36bits across