summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
authorLionel Landwerlin <[email protected]>2017-11-06 11:11:42 +0000
committerLionel Landwerlin <[email protected]>2017-12-04 18:05:20 +0000
commitb66e4b51bfc82621e590e6be8972a30958c0a08a (patch)
tree7db4178319becf2f46fcb63ec172ca0d435323d2 /src/mesa
parentaa8a2a867056a93467623efbca950b51e592e67d (diff)
i965: read CS timestamp frequency from the kernel on Gen10+
We cannot figure this value out of the PCI-id anymore. Let's read it from the kernel (which computes this from a few registers). When running on a (upcoming) 4.16-rc1+ kernel, this will fixes piglit tests on CNL : spec@arb_timer_query@query gl_timestamp spec@arb_timer_query@timestamp-get spec@ext_timer_query@time-elapsed Signed-off-by: Lionel Landwerlin <[email protected]> Reviewed-by: Rafael Antognolli <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/drivers/dri/i965/intel_screen.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index db1552c1880..0c17b4050c4 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -1686,6 +1686,27 @@ intelDestroyBuffer(__DRIdrawable * driDrawPriv)
}
static void
+intel_cs_timestamp_frequency(struct intel_screen *screen)
+{
+ /* We shouldn't need to update gen_device_info.timestamp_frequency prior to
+ * gen10, PCI-id is enough to figure it out.
+ */
+ assert(screen->devinfo.gen >= 10);
+
+ int ret, freq;
+
+ ret = intel_get_param(screen, I915_PARAM_CS_TIMESTAMP_FREQUENCY,
+ &freq);
+ if (ret < 0) {
+ _mesa_warning(NULL,
+ "Kernel 4.15 required to read the CS timestamp frequency.\n");
+ return;
+ }
+
+ screen->devinfo.timestamp_frequency = freq;
+}
+
+static void
intel_detect_sseu(struct intel_screen *screen)
{
assert(screen->devinfo.gen >= 8);
@@ -2405,6 +2426,9 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen)
isl_device_init(&screen->isl_dev, &screen->devinfo,
screen->hw_has_swizzling);
+ if (devinfo->gen >= 10)
+ intel_cs_timestamp_frequency(screen);
+
/* GENs prior to 8 do not support EU/Subslice info */
if (devinfo->gen >= 8) {
intel_detect_sseu(screen);