diff options
author | Lionel Landwerlin <[email protected]> | 2017-11-06 11:11:42 +0000 |
---|---|---|
committer | Lionel Landwerlin <[email protected]> | 2017-12-04 18:05:20 +0000 |
commit | b66e4b51bfc82621e590e6be8972a30958c0a08a (patch) | |
tree | 7db4178319becf2f46fcb63ec172ca0d435323d2 | |
parent | aa8a2a867056a93467623efbca950b51e592e67d (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]>
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_screen.c | 24 |
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); |