xf86-video-intel: 3 commits - src/sna/gen6_render.c src/sna/gen7_render.c src/sna/gen8_render.c src/sna/kgem.c src/sna/sna_display.c src/sna/sna_dri2.c

Chris Wilson ickle at kemper.freedesktop.org
Mon Jun 23 03:32:24 PDT 2014


 src/sna/gen6_render.c |   16 ++++++++--------
 src/sna/gen7_render.c |   16 ++++++++--------
 src/sna/gen8_render.c |   16 ++++++++--------
 src/sna/kgem.c        |    2 +-
 src/sna/sna_display.c |    2 +-
 src/sna/sna_dri2.c    |   10 +++++++---
 6 files changed, 33 insertions(+), 29 deletions(-)

New commits:
commit 6848fb235b1bac84e91d1efde4094540180c4d48
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Jun 23 11:27:20 2014 +0100

    sna: Fix flushing empty batches
    
    A logic inversion in
    
    commit 1909910fdf89216d18703e50728f4604f75d5d66
    Author: Chris Wilson <chris at chris-wilson.co.uk>
    Date:   Sun Jun 22 20:19:22 2014 +0100
    
        sna: Inject a batch flush before adding a fresh bo
    
    also applied the injection to when the batch was empty.
    
    Reported-by: Jiri Slaby <jirislaby at gmail.com>
    References: https://bugs.freedesktop.org/show_bug.cgi?id=70461#c48
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index b54084c..dfaf878 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -5217,7 +5217,7 @@ inline static bool needs_reservation(struct kgem *kgem, struct kgem_bo *bo)
 
 inline static bool needs_batch_flush(struct kgem *kgem, struct kgem_bo *bo)
 {
-	if (kgem->nreloc)
+	if (kgem->nreloc == 0)
 		return false;
 
 	if (needs_semaphore(kgem, bo)) {
commit 60fd6764eba05f51bb83efba5593975cf8d1285b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Jun 23 11:25:47 2014 +0100

    sna: Handle old busy_ioctl not reporting the active ring
    
    If we have an old kernel, just presume that the bo was last active on the
    render ring.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 3e4a4b5..ecec052 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -6439,7 +6439,7 @@ fixup_flip:
 				if (drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_GEM_BUSY, &busy) == 0) {
 					if (busy.busy) {
 						int mode = KGEM_RENDER;
-						if ((busy.busy & (1 << 16)) == 0)
+						if (busy.busy & (0xfffe << 16))
 							mode = KGEM_BLT;
 						DBG(("%s: marking flip bo as busy [%x -> mode=%d]\n", __FUNCTION__, busy.busy, mode));
 						kgem_bo_mark_busy(&sna->kgem, flip_bo, mode);
diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index 2b8cd03..686fd60 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -778,13 +778,17 @@ static void sna_dri2_select_mode(struct sna *sna, struct kgem_bo *dst, struct kg
 	if (drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_GEM_BUSY, &busy))
 		return;
 
-	DBG(("%s: src busy?=%x\n", __FUNCTION__, busy.busy));
+	DBG(("%s: src handle=%d busy?=%x\n", __FUNCTION__, busy.handle, busy.busy));
 	if (busy.busy == 0) {
+		__kgem_bo_clear_busy(src);
+
 		busy.handle = dst->handle;
 		if (drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_GEM_BUSY, &busy))
 			return;
-		DBG(("%s: dst busy?=%x\n", __FUNCTION__, busy.busy));
+
+		DBG(("%s: dst handle=%d busy?=%x\n", __FUNCTION__, busy.handle, busy.busy));
 		if (busy.busy == 0) {
+			__kgem_bo_clear_busy(dst);
 			DBG(("%s: src/dst is idle, using defaults\n", __FUNCTION__));
 			return;
 		}
@@ -806,7 +810,7 @@ static void sna_dri2_select_mode(struct sna *sna, struct kgem_bo *dst, struct kg
 	 * the cost of the query.
 	 */
 	mode = KGEM_RENDER;
-	if ((busy.busy & (1 << 16)) == 0)
+	if (busy.busy & (0xfffe << 16))
 		mode = KGEM_BLT;
 	kgem_bo_mark_busy(&sna->kgem, busy.handle == src->handle ? src : dst, mode);
 	_kgem_set_mode(&sna->kgem, mode);
commit 30348efd57135edee41fccb87133c572b6473aa8
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Jun 23 11:14:25 2014 +0100

    sna/gen6+: Avoid adjusting copy coordinates until commited to using them
    
    If we need to fallback to the BLT unit, we need to pass it the original
    source/dest coordinates and not our transformed render coordinates. So
    keep the original values intact until we start emitting the render
    operation.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 49a783a..2b4fd03 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2790,11 +2790,6 @@ fallback_blt:
 						   extents.y2 - extents.y1,
 						   n > 1))
 			goto fallback_tiled;
-
-		dst_dx += tmp.dst.x;
-		dst_dy += tmp.dst.y;
-
-		tmp.dst.x = tmp.dst.y = 0;
 	}
 
 	tmp.src.card_format = gen6_get_card_format(tmp.src.pict_format);
@@ -2822,9 +2817,6 @@ fallback_blt:
 			DBG(("%s: unable to extract partial pixmap\n", __FUNCTION__));
 			goto fallback_tiled_dst;
 		}
-
-		src_dx += tmp.src.offset[0];
-		src_dy += tmp.src.offset[1];
 	} else {
 		tmp.src.bo = src_bo;
 		tmp.src.width  = src->drawable.width;
@@ -2857,6 +2849,14 @@ fallback_blt:
 		_kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	}
 
+	src_dx += tmp.src.offset[0];
+	src_dy += tmp.src.offset[1];
+
+	dst_dx += tmp.dst.x;
+	dst_dy += tmp.dst.y;
+
+	tmp.dst.x = tmp.dst.y = 0;
+
 	gen6_align_vertex(sna, &tmp);
 	gen6_emit_copy_state(sna, &tmp);
 
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 0d03c3b..1999aed 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -3027,11 +3027,6 @@ fallback_blt:
 						   extents.y2 - extents.y1,
 						   n > 1))
 			goto fallback_tiled;
-
-		dst_dx += tmp.dst.x;
-		dst_dy += tmp.dst.y;
-
-		tmp.dst.x = tmp.dst.y = 0;
 	}
 
 	tmp.src.card_format = gen7_get_card_format(tmp.src.pict_format);
@@ -3057,9 +3052,6 @@ fallback_blt:
 					       extents.x2 - extents.x1,
 					       extents.y2 - extents.y1))
 			goto fallback_tiled_dst;
-
-		src_dx += tmp.src.offset[0];
-		src_dy += tmp.src.offset[1];
 	} else {
 		tmp.src.bo = src_bo;
 		tmp.src.width  = src->drawable.width;
@@ -3087,6 +3079,14 @@ fallback_blt:
 		_kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	}
 
+	src_dx += tmp.src.offset[0];
+	src_dy += tmp.src.offset[1];
+
+	dst_dx += tmp.dst.x;
+	dst_dy += tmp.dst.y;
+
+	tmp.dst.x = tmp.dst.y = 0;
+
 	gen7_align_vertex(sna, &tmp);
 	gen7_emit_copy_state(sna, &tmp);
 
diff --git a/src/sna/gen8_render.c b/src/sna/gen8_render.c
index 6497630..f3ccb9b 100644
--- a/src/sna/gen8_render.c
+++ b/src/sna/gen8_render.c
@@ -2851,11 +2851,6 @@ fallback_blt:
 						   extents.y2 - extents.y1,
 						   n > 1))
 			goto fallback_tiled;
-
-		dst_dx += tmp.dst.x;
-		dst_dy += tmp.dst.y;
-
-		tmp.dst.x = tmp.dst.y = 0;
 	}
 
 	tmp.src.card_format = gen8_get_card_format(tmp.src.pict_format);
@@ -2881,9 +2876,6 @@ fallback_blt:
 					       extents.x2 - extents.x1,
 					       extents.y2 - extents.y1))
 			goto fallback_tiled_dst;
-
-		src_dx += tmp.src.offset[0];
-		src_dy += tmp.src.offset[1];
 	} else {
 		tmp.src.bo = src_bo;
 		tmp.src.width  = src->drawable.width;
@@ -2911,6 +2903,14 @@ fallback_blt:
 		_kgem_set_mode(&sna->kgem, KGEM_RENDER);
 	}
 
+	src_dx += tmp.src.offset[0];
+	src_dy += tmp.src.offset[1];
+
+	dst_dx += tmp.dst.x;
+	dst_dy += tmp.dst.y;
+
+	tmp.dst.x = tmp.dst.y = 0;
+
 	gen8_align_vertex(sna, &tmp);
 	gen8_emit_copy_state(sna, &tmp);
 


More information about the xorg-commit mailing list