xf86-video-intel: src/sna/kgem.c

Chris Wilson ickle at kemper.freedesktop.org
Tue Nov 4 02:39:08 PST 2014


 src/sna/kgem.c |   16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

New commits:
commit a972c9886edc1141ad3f8a0a33d2f7f18d0008bc
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Oct 24 12:16:11 2014 +0100

    sna: Use v2 of get_tiling ioctl to check for bit17 swizzling
    
    With the new version of the get_tiling ioctl we can reliably detect if
    we can use manual detiling (i.e. CPU mmaps) on older gen.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index eb2a3d9..7c572cc 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1232,10 +1232,13 @@ err:
 
 static void kgem_init_swizzling(struct kgem *kgem)
 {
-	struct drm_i915_gem_get_tiling tiling;
-
-	if (kgem->gen < 050) /* bit17 swizzling :( */
-		return;
+	struct local_i915_gem_get_tiling_v2 {
+		uint32_t handle;
+		uint32_t tiling_mode;
+		uint32_t swizzle_mode;
+		uint32_t phys_swizzle_mode;
+	} tiling;
+#define LOCAL_IOCTL_I915_GEM_GET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct local_i915_gem_get_tiling_v2)
 
 	VG_CLEAR(tiling);
 	tiling.handle = gem_create(kgem->fd, 1);
@@ -1245,7 +1248,10 @@ static void kgem_init_swizzling(struct kgem *kgem)
 	if (!gem_set_tiling(kgem->fd, tiling.handle, I915_TILING_X, 512))
 		goto out;
 
-	if (do_ioctl(kgem->fd, DRM_IOCTL_I915_GEM_GET_TILING, &tiling))
+	if (do_ioctl(kgem->fd, LOCAL_IOCTL_I915_GEM_GET_TILING, &tiling))
+		goto out;
+
+	if (kgem->gen < 50 && tiling.phys_swizzle_mode != tiling.swizzle_mode)
 		goto out;
 
 	choose_memcpy_tiled_x(kgem, tiling.swizzle_mode);


More information about the xorg-commit mailing list