From 1217dbc88e0901e4a657ee51e2e3b7d00bb72b77 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 17 Apr 2014 21:04:15 +0100 Subject: [PATCH] sna: Support efficient cursor updates for old machines Given a kernel patch to fix coherency of physical objects, we can use a more efficient method for updating cursors. Signed-off-by: Chris Wilson --- src/sna/sna_display.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index 12f1e8d2..251d305b 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -4366,6 +4366,7 @@ sna_cursor_pre_init(struct sna *sna) uint64_t name; uint64_t value; } cap; + int v; if (sna->mode.num_real_crtc == 0) return; @@ -4374,6 +4375,8 @@ sna_cursor_pre_init(struct sna *sna) #define DRM_CAP_CURSOR_WIDTH 8 #define DRM_CAP_CURSOR_HEIGHT 9 +#define I915_PARAM_HAS_COHERENT_PHYS_GTT 29 + sna->cursor.max_size = 64; cap.value = 0; @@ -4387,7 +4390,17 @@ sna_cursor_pre_init(struct sna *sna) assert(sna->cursor.max_size == cap.value); #endif - sna->cursor.use_gtt = sna->kgem.gen >= 033; + v = -1; /* No param uses the sign bit, reserve it for errors */ + if (sna->kgem.gen >= 033) { + v = 1; + } else { + drm_i915_getparam_t gp = { + I915_PARAM_HAS_COHERENT_PHYS_GTT, + &v, + }; + (void)drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_GETPARAM, &gp); + } + sna->cursor.use_gtt = v > 0; DBG(("%s: cursor updates use_gtt?=%d\n", __FUNCTION__, sna->cursor.use_gtt));