xf86-video-intel: 2 commits - src/sna/gen3_render.c src/sna/kgem.c src/sna/sna_accel.c src/sna/sna.h

Chris Wilson ickle at kemper.freedesktop.org
Mon Mar 2 13:59:57 PST 2015


 src/sna/gen3_render.c |    4 ++--
 src/sna/kgem.c        |    3 ++-
 src/sna/sna.h         |    6 ++++--
 src/sna/sna_accel.c   |    6 +++---
 4 files changed, 11 insertions(+), 8 deletions(-)

New commits:
commit b7e28618cdf7f4123ed47cd626e3535b4ed98f56
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Mar 2 09:34:19 2015 +0000

    sna: Tweak find clip box asserts
    
    Reordering the asserts to save one predicate!
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna.h b/src/sna/sna.h
index ff1c9c1..b5bebe8 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -1208,11 +1208,13 @@ find_clip_box_for_y(const BoxRec *begin, const BoxRec *end, int16_t y)
 
 	/* Quick test if scanline is within range of clip boxes */
 	if (begin->y2 > y) {
-		assert(__find_clip_box_for_y(begin, end, y) == begin);
+		assert(end == begin + 1 ||
+		       __find_clip_box_for_y(begin, end, y) == begin);
 		return begin;
 	}
 	if (y >= end[-1].y2) {
-		assert(__find_clip_box_for_y(begin, end, y) == end);
+		assert(end == begin + 1 ||
+		       __find_clip_box_for_y(begin, end, y) == end);
 		return end;
 	}
 
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 29bf6c4..467d95f 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -7165,14 +7165,14 @@ sna_copy_area(DrawablePtr src, DrawablePtr dst, GCPtr gc,
 const BoxRec *
 __find_clip_box_for_y(const BoxRec *begin, const BoxRec *end, int16_t y)
 {
-	assert(begin != end);
-	while (end > begin + 1) {
+	assert(end - begin > 1);
+	do {
 		const BoxRec *mid = begin + (end - begin) / 2;
 		if (mid->y2 > y)
 			end = mid;
 		else
 			begin = mid;
-	}
+	} while (end > begin + 1);
 	if (begin->y2 > y)
 		return begin;
 	else
commit cb2269d1308f2a410508aafecc8b0ee51959afcf
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Mar 2 09:08:54 2015 +0000

    sna/gen3: Disable fences associated with vertex buffers
    
    Could gen3 actually be trying to read these through a fence?
    
    References: https://bugs.freedesktop.org/show_bug.cgi?id=89334
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index a6add06..c3134f4 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2251,7 +2251,7 @@ static int gen3_vertex_finish(struct sna *sna)
 		if (sna->render.vertex_reloc[0]) {
 			sna->kgem.batch[sna->render.vertex_reloc[0]] =
 				kgem_add_reloc(&sna->kgem, sna->render.vertex_reloc[0],
-					       bo, I915_GEM_DOMAIN_VERTEX << 16, 0);
+					       bo, I915_GEM_DOMAIN_VERTEX << 16 | KGEM_RELOC_FENCED, 0);
 
 			sna->render.vertex_reloc[0] = 0;
 		}
@@ -2345,7 +2345,7 @@ static void gen3_vertex_close(struct sna *sna)
 	DBG(("%s: reloc = %d\n", __FUNCTION__, sna->render.vertex_reloc[0]));
 	sna->kgem.batch[sna->render.vertex_reloc[0]] =
 		kgem_add_reloc(&sna->kgem, sna->render.vertex_reloc[0],
-			       bo, I915_GEM_DOMAIN_VERTEX << 16, delta);
+			       bo, I915_GEM_DOMAIN_VERTEX << 16 | KGEM_RELOC_FENCED, delta);
 	sna->render.vertex_reloc[0] = 0;
 
 	if (sna->render.vbo == NULL) {
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index c512645..1ff092c 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -3648,7 +3648,8 @@ void _kgem_submit(struct kgem *kgem)
 		kgem->exec[i].relocs_ptr = (uintptr_t)kgem->reloc;
 		kgem->exec[i].alignment = 0;
 		kgem->exec[i].offset = rq->bo->presumed_offset;
-		kgem->exec[i].flags = 0;
+		/* Make sure the kernel releases any fence, ignored if gen4+ */
+		kgem->exec[i].flags = EXEC_OBJECT_NEEDS_FENCE;
 		kgem->exec[i].rsvd1 = 0;
 		kgem->exec[i].rsvd2 = 0;
 


More information about the xorg-commit mailing list