xf86-video-intel: 3 commits - src/sna/gen4_render.c src/sna/sna_glyphs.c

Chris Wilson ickle at kemper.freedesktop.org
Sun Jul 7 01:22:09 PDT 2013


 src/sna/gen4_render.c |   43 +++++++++++++++++++++----------------------
 src/sna/sna_glyphs.c  |    3 +--
 2 files changed, 22 insertions(+), 24 deletions(-)

New commits:
commit dbb585b9d2510efa9f8432bc25842fa14a8e495e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sun Jul 7 09:17:58 2013 +0100

    sna/gen4: Remove custom max flush vertices w/a from video path
    
    This should now be superseded by using the common w/a.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 86ce306..8e03910 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -1418,7 +1418,7 @@ gen4_render_video(struct sna *sna,
 	do {
 		int n;
 
-		n = gen4_get_rectangles(sna, &tmp, min(nbox, 16),
+		n = gen4_get_rectangles(sna, &tmp, nbox,
 					gen4_video_bind_surfaces);
 		assert(n);
 		nbox -= n;
@@ -1449,13 +1449,8 @@ gen4_render_video(struct sna *sna,
 			}
 			box++;
 		} while (--n);
-		gen4_vertex_flush(sna);
-		if (!nbox)
-			break;
-
-		/* VUE corruption strikes again */
-		OUT_BATCH(MI_FLUSH | MI_INHIBIT_RENDER_CACHE_FLUSH);
-	} while (1);
+	} while (nbox);
+	gen4_vertex_flush(sna);
 
 	return true;
 }
commit 2a59eadf8165bd70780ac16220456c6196ac3ff1
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sun Jul 7 09:13:49 2013 +0100

    sna/gen4: Remove the glyph mask hack and tune the flush w/a
    
    Remove the hack from the glyph path to force the use of an auxiliary
    channel, and reduce the maximum amount of inflight vertices until we can
    then render glyphs with no corruption (at least in my test case).
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index d8cdb36..86ce306 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -62,6 +62,8 @@
 #define NO_FILL_BOXES 0
 #define NO_VIDEO 0
 
+#define MAX_FLUSH_VERTICES 6
+
 #define GEN4_GRF_BLOCKS(nreg)    ((nreg + 15) / 16 - 1)
 
 /* Set up a default static partitioning of the URB, which is supposed to
@@ -652,7 +654,7 @@ inline static int gen4_get_rectangles(struct sna *sna,
 	if (sna->kgem.nbatch == sna->render_state.gen4.last_primitive)
 		rem = sna->kgem.nbatch - 5;
 	if (rem) {
-		rem = 16 - (sna->render.vertex_index - sna->render.vertex_start) / 3;
+		rem = MAX_FLUSH_VERTICES - (sna->render.vertex_index - sna->render.vertex_start) / 3;
 		if (rem <= 0) {
 			if (sna->render.vertex_offset) {
 				gen4_vertex_flush(sna);
@@ -661,10 +663,10 @@ inline static int gen4_get_rectangles(struct sna *sna,
 								     op->u.gen4.wm_kernel);
 			}
 			OUT_BATCH(MI_FLUSH | MI_INHIBIT_RENDER_CACHE_FLUSH);
-			rem = 16;
+			rem = MAX_FLUSH_VERTICES;
 		}
 	} else
-		rem = 16;
+		rem = MAX_FLUSH_VERTICES;
 	if (want > rem)
 		want = rem;
 #endif
diff --git a/src/sna/sna_glyphs.c b/src/sna/sna_glyphs.c
index 62415c8..43086a0 100644
--- a/src/sna/sna_glyphs.c
+++ b/src/sna/sna_glyphs.c
@@ -1130,8 +1130,7 @@ next_image:
 					     __FUNCTION__,
 					     (int)this_atlas->format,
 					     (int)(format->depth << 24 | format->format)));
-					if (this_atlas->format == (format->depth << 24 | format->format) &&
-					    (sna->kgem.gen >> 3) != 4) { /* XXX cache corruption? how? */
+					if (this_atlas->format == (format->depth << 24 | format->format)) {
 						ok = sna->render.composite(sna, PictOpAdd,
 									   this_atlas, NULL, mask,
 									   0, 0, 0, 0, 0, 0,
commit c9c1833c30421e1461f6b03b858bbc187068eb0c
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sun Jul 7 08:58:52 2013 +0100

    sna/gen4: Tighten FORCE_FLUSH w/a to spot amalgamation of primitives
    
    Inspect whether this rectangle will be added to the previous primitive
    and so charge it against the current number of inflight rectangles.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index a5e49e5..d8cdb36 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -648,13 +648,18 @@ inline static int gen4_get_rectangles(struct sna *sna,
 
 	assert(want);
 #if FORCE_FLUSH
-	if (sna->render.vertex_offset) {
+	rem = sna->render.vertex_offset;
+	if (sna->kgem.nbatch == sna->render_state.gen4.last_primitive)
+		rem = sna->kgem.nbatch - 5;
+	if (rem) {
 		rem = 16 - (sna->render.vertex_index - sna->render.vertex_start) / 3;
 		if (rem <= 0) {
-			gen4_vertex_flush(sna);
-			if (gen4_magic_ca_pass(sna, op))
-				gen4_emit_pipelined_pointers(sna, op, op->op,
-							     op->u.gen4.wm_kernel);
+			if (sna->render.vertex_offset) {
+				gen4_vertex_flush(sna);
+				if (gen4_magic_ca_pass(sna, op))
+					gen4_emit_pipelined_pointers(sna, op, op->op,
+								     op->u.gen4.wm_kernel);
+			}
 			OUT_BATCH(MI_FLUSH | MI_INHIBIT_RENDER_CACHE_FLUSH);
 			rem = 16;
 		}
@@ -2455,8 +2460,7 @@ fallback_blt:
 		box++;
 	} while (--n);
 
-	if (!FORCE_FLUSH || sna->render.vertex_offset)
-		gen4_vertex_flush(sna);
+	gen4_vertex_flush(sna);
 	sna_render_composite_redirect_done(sna, &tmp);
 	kgem_bo_destroy(&sna->kgem, tmp.src.bo);
 	return true;
@@ -2694,8 +2698,7 @@ gen4_render_fill_boxes(struct sna *sna,
 		box++;
 	} while (--n);
 
-	if (!FORCE_FLUSH || sna->render.vertex_offset)
-		gen4_vertex_flush(sna);
+	gen4_vertex_flush(sna);
 	kgem_bo_destroy(&sna->kgem, tmp.src.bo);
 	return true;
 }
@@ -2878,8 +2881,7 @@ gen4_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo,
 
 	gen4_render_fill_rectangle(sna, &tmp, x1, y1, x2 - x1, y2 - y1);
 
-	if (!FORCE_FLUSH || sna->render.vertex_offset)
-		gen4_vertex_flush(sna);
+	gen4_vertex_flush(sna);
 	kgem_bo_destroy(&sna->kgem, tmp.src.bo);
 
 	return true;


More information about the xorg-commit mailing list