xf86-video-intel: 2 commits - src/sna/gen3_render.c src/sna/gen4_render.c src/sna/gen5_render.c src/sna/gen6_render.c src/sna/gen7_render.c

Chris Wilson ickle at kemper.freedesktop.org
Thu Feb 23 02:30:13 PST 2012


 src/sna/gen3_render.c |   68 +++++++++++++-------------------------------------
 src/sna/gen4_render.c |    1 
 src/sna/gen5_render.c |    1 
 src/sna/gen6_render.c |   15 -----------
 src/sna/gen7_render.c |   15 -----------
 5 files changed, 23 insertions(+), 77 deletions(-)

New commits:
commit dfa21713c27eb9135cb5e1745807324e49422fde
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Feb 23 10:29:38 2012 +0000

    sna/gen3: Refactor get_rectangles() to emit composite state and retry
    
    As gen3 only uses the single state emission block, and uniformly calls
    get_rectangles(), we can move that caller protocol into the callee.
    
    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 cb85cb9..6828a16 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -1729,12 +1729,15 @@ inline static int gen3_get_rectangles(struct sna *sna,
 				      const struct sna_composite_op *op,
 				      int want)
 {
-	int rem = vertex_space(sna);
+	int rem;
 
 	DBG(("%s: want=%d, rem=%d\n",
 	     __FUNCTION__, want*op->floats_per_rect, rem));
 
 	assert(sna->render.vertex_index * op->floats_per_vertex == sna->render.vertex_used);
+
+start:
+	rem = vertex_space(sna);
 	if (op->floats_per_rect > rem) {
 		DBG(("flushing vbo for %s: %d < %d\n",
 		     __FUNCTION__, rem, op->floats_per_rect));
@@ -1762,7 +1765,8 @@ flush:
 		gen3_magic_ca_pass(sna, op);
 	}
 	_kgem_submit(&sna->kgem);
-	return 0;
+	gen3_emit_composite_state(sna, op);
+	goto start;
 }
 
 fastcall static void
@@ -1776,10 +1780,7 @@ gen3_render_composite_blt(struct sna *sna,
 	     r->dst.x, r->dst.y, op->dst.x, op->dst.y,
 	     r->width, r->height));
 
-	if (!gen3_get_rectangles(sna, op, 1)) {
-		gen3_emit_composite_state(sna, op);
-		gen3_get_rectangles(sna, op, 1);
-	}
+	gen3_get_rectangles(sna, op, 1);
 
 	op->prim_emit(sna, op, r);
 }
@@ -1797,10 +1798,7 @@ gen3_render_composite_box(struct sna *sna,
 	     op->mask.offset[0], op->mask.offset[1],
 	     op->dst.x, op->dst.y));
 
-	if (!gen3_get_rectangles(sna, op, 1)) {
-		gen3_emit_composite_state(sna, op);
-		gen3_get_rectangles(sna, op, 1);
-	}
+	gen3_get_rectangles(sna, op, 1);
 
 	r.dst.x  = box->x1;
 	r.dst.y  = box->y1;
@@ -1826,10 +1824,6 @@ gen3_render_composite_boxes(struct sna *sna,
 		int nbox_this_time;
 
 		nbox_this_time = gen3_get_rectangles(sna, op, nbox);
-		if (nbox_this_time == 0) {
-			gen3_emit_composite_state(sna, op);
-			nbox_this_time = gen3_get_rectangles(sna, op, nbox);
-		}
 		nbox -= nbox_this_time;
 
 		do {
@@ -3110,11 +3104,7 @@ gen3_render_composite_spans_box(struct sna *sna,
 	     box->x2 - box->x1,
 	     box->y2 - box->y1));
 
-	if (!gen3_get_rectangles(sna, &op->base, 1)) {
-		gen3_emit_composite_state(sna, &op->base);
-		gen3_get_rectangles(sna, &op->base, 1);
-	}
-
+	gen3_get_rectangles(sna, &op->base, 1);
 	op->prim_emit(sna, op, box, opacity);
 }
 
@@ -3134,10 +3124,6 @@ gen3_render_composite_spans_boxes(struct sna *sna,
 		int nbox_this_time;
 
 		nbox_this_time = gen3_get_rectangles(sna, &op->base, nbox);
-		if (nbox_this_time == 0) {
-			gen3_emit_composite_state(sna, &op->base);
-			nbox_this_time = gen3_get_rectangles(sna, &op->base, nbox);
-		}
 		nbox -= nbox_this_time;
 
 		do {
@@ -3918,10 +3904,6 @@ fallback_blt:
 		int n_this_time;
 
 		n_this_time = gen3_get_rectangles(sna, &tmp, n);
-		if (n_this_time == 0) {
-			gen3_emit_composite_state(sna, &tmp);
-			n_this_time = gen3_get_rectangles(sna, &tmp, n);
-		}
 		n -= n_this_time;
 
 		do {
@@ -3966,10 +3948,7 @@ gen3_render_copy_blt(struct sna *sna,
 		     int16_t w, int16_t h,
 		     int16_t dx, int16_t dy)
 {
-	if (!gen3_get_rectangles(sna, &op->base, 1)) {
-		gen3_emit_composite_state(sna, &op->base);
-		gen3_get_rectangles(sna, &op->base, 1);
-	}
+	gen3_get_rectangles(sna, &op->base, 1);
 
 	OUT_VERTEX(dx+w);
 	OUT_VERTEX(dy+h);
@@ -4215,11 +4194,9 @@ gen3_render_fill_boxes(struct sna *sna,
 	gen3_align_vertex(sna, &tmp);
 
 	do {
-		int n_this_time = gen3_get_rectangles(sna, &tmp, n);
-		if (n_this_time == 0) {
-			gen3_emit_composite_state(sna, &tmp);
-			n_this_time = gen3_get_rectangles(sna, &tmp, n);
-		}
+		int n_this_time;
+
+		n_this_time = gen3_get_rectangles(sna, &tmp, n);
 		n -= n_this_time;
 
 		do {
@@ -4244,10 +4221,7 @@ gen3_render_fill_op_blt(struct sna *sna,
 			const struct sna_fill_op *op,
 			int16_t x, int16_t y, int16_t w, int16_t h)
 {
-	if (!gen3_get_rectangles(sna, &op->base, 1)) {
-		gen3_emit_composite_state(sna, &op->base);
-		gen3_get_rectangles(sna, &op->base, 1);
-	}
+	gen3_get_rectangles(sna, &op->base, 1);
 
 	OUT_VERTEX(x+w);
 	OUT_VERTEX(y+h);
@@ -4262,10 +4236,7 @@ gen3_render_fill_op_box(struct sna *sna,
 			const struct sna_fill_op *op,
 			const BoxRec *box)
 {
-	if (!gen3_get_rectangles(sna, &op->base, 1)) {
-		gen3_emit_composite_state(sna, &op->base);
-		gen3_get_rectangles(sna, &op->base, 1);
-	}
+	gen3_get_rectangles(sna, &op->base, 1);
 
 	OUT_VERTEX(box->x2);
 	OUT_VERTEX(box->y2);
@@ -4285,11 +4256,9 @@ gen3_render_fill_op_boxes(struct sna *sna,
 	     box->x1, box->y1, box->x2, box->y2, nbox));
 
 	do {
-		int nbox_this_time = gen3_get_rectangles(sna, &op->base, nbox);
-		if (nbox_this_time == 0) {
-			gen3_emit_composite_state(sna, &op->base);
-			nbox_this_time = gen3_get_rectangles(sna, &op->base, nbox);
-		}
+		int nbox_this_time;
+
+		nbox_this_time = gen3_get_rectangles(sna, &op->base, nbox);
 		nbox -= nbox_this_time;
 
 		do {
commit a48e6e0db970ad07cd7452ba24c362d0c2fcf1bf
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Feb 23 10:17:34 2012 +0000

    sna/gen3+: Force a batch flush when run out of CA vbo
    
    As we prematurely end the batch if we bail on extending the vbo for CA
    glyphs, we need to force the flush.
    
    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 5253a8c..cb85cb9 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -1761,6 +1761,7 @@ flush:
 		gen3_vertex_flush(sna);
 		gen3_magic_ca_pass(sna, op);
 	}
+	_kgem_submit(&sna->kgem);
 	return 0;
 }
 
@@ -3109,7 +3110,7 @@ gen3_render_composite_spans_box(struct sna *sna,
 	     box->x2 - box->x1,
 	     box->y2 - box->y1));
 
-	if (gen3_get_rectangles(sna, &op->base, 1) == 0) {
+	if (!gen3_get_rectangles(sna, &op->base, 1)) {
 		gen3_emit_composite_state(sna, &op->base);
 		gen3_get_rectangles(sna, &op->base, 1);
 	}
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 4bc2938..cccdf4c 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -1185,6 +1185,7 @@ flush:
 		gen4_vertex_flush(sna);
 		gen4_magic_ca_pass(sna, op);
 	}
+	_kgem_submit(&sna->kgem);
 	return 0;
 }
 
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index ac55b09..8d6a3e9 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -1193,6 +1193,7 @@ flush:
 		gen5_vertex_flush(sna);
 		gen5_magic_ca_pass(sna, op);
 	}
+	_kgem_submit(&sna->kgem);
 	return 0;
 }
 
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 035da78..e975328 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -1658,6 +1658,7 @@ flush:
 		gen6_vertex_flush(sna);
 		gen6_magic_ca_pass(sna, op);
 	}
+	_kgem_submit(&sna->kgem);
 	return 0;
 }
 
@@ -1772,7 +1773,6 @@ gen6_render_composite_blt(struct sna *sna,
 			  const struct sna_composite_rectangles *r)
 {
 	if (unlikely(!gen6_get_rectangles(sna, op, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen6_emit_composite_state(sna, op);
 		gen6_get_rectangles(sna, op, 1);
 	}
@@ -1788,7 +1788,6 @@ gen6_render_composite_box(struct sna *sna,
 	struct sna_composite_rectangles r;
 
 	if (unlikely(!gen6_get_rectangles(sna, op, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen6_emit_composite_state(sna, op);
 		gen6_get_rectangles(sna, op, 1);
 	}
@@ -1816,7 +1815,6 @@ gen6_render_composite_boxes(struct sna *sna,
 	do {
 		int nbox_this_time = gen6_get_rectangles(sna, op, nbox);
 		if (unlikely(nbox_this_time == 0)) {
-			_kgem_submit(&sna->kgem);
 			gen6_emit_composite_state(sna, op);
 			nbox_this_time = gen6_get_rectangles(sna, op, nbox);
 			assert(nbox_this_time);
@@ -2071,7 +2069,6 @@ gen6_render_video(struct sna *sna,
 		r.y2 = box->y2 + pix_yoff;
 
 		if (unlikely(!gen6_get_rectangles(sna, &tmp, 1))) {
-			_kgem_submit(&sna->kgem);
 			gen6_emit_video_state(sna, &tmp, frame);
 			gen6_get_rectangles(sna, &tmp, 1);
 		}
@@ -2953,7 +2950,6 @@ gen6_render_composite_spans_box(struct sna *sna,
 	     box->y2 - box->y1));
 
 	if (unlikely(gen6_get_rectangles(sna, &op->base, 1) == 0)) {
-		_kgem_submit(&sna->kgem);
 		gen6_emit_composite_state(sna, &op->base);
 		gen6_get_rectangles(sna, &op->base, 1);
 	}
@@ -2978,7 +2974,6 @@ gen6_render_composite_spans_boxes(struct sna *sna,
 
 		nbox_this_time = gen6_get_rectangles(sna, &op->base, nbox);
 		if (unlikely(nbox_this_time == 0)) {
-			_kgem_submit(&sna->kgem);
 			gen6_emit_composite_state(sna, &op->base);
 			nbox_this_time = gen6_get_rectangles(sna, &op->base, nbox);
 			assert(nbox_this_time);
@@ -3378,7 +3373,6 @@ fallback_blt:
 		float *v;
 		int n_this_time = gen6_get_rectangles(sna, &tmp, n);
 		if (unlikely(n_this_time == 0)) {
-			_kgem_submit(&sna->kgem);
 			gen6_emit_copy_state(sna, &tmp);
 			n_this_time = gen6_get_rectangles(sna, &tmp, n);
 		}
@@ -3432,7 +3426,6 @@ gen6_render_copy_blt(struct sna *sna,
 		     int16_t dx, int16_t dy)
 {
 	if (unlikely(!gen6_get_rectangles(sna, &op->base, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen6_emit_copy_state(sna, &op->base);
 		gen6_get_rectangles(sna, &op->base, 1);
 	}
@@ -3707,7 +3700,6 @@ gen6_render_fill_boxes(struct sna *sna,
 	do {
 		int n_this_time = gen6_get_rectangles(sna, &tmp, n);
 		if (unlikely(n_this_time == 0)) {
-			_kgem_submit(&sna->kgem);
 			gen6_emit_fill_state(sna, &tmp);
 			n_this_time = gen6_get_rectangles(sna, &tmp, n);
 		}
@@ -3744,7 +3736,6 @@ gen6_render_op_fill_blt(struct sna *sna,
 	DBG(("%s: (%d, %d)x(%d, %d)\n", __FUNCTION__, x, y, w, h));
 
 	if (unlikely(!gen6_get_rectangles(sna, &op->base, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen6_emit_fill_state(sna, &op->base);
 		gen6_get_rectangles(sna, &op->base, 1);
 	}
@@ -3771,7 +3762,6 @@ gen6_render_op_fill_box(struct sna *sna,
 	     box->x1, box->y1, box->x2, box->y2));
 
 	if (unlikely(!gen6_get_rectangles(sna, &op->base, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen6_emit_fill_state(sna, &op->base);
 		gen6_get_rectangles(sna, &op->base, 1);
 	}
@@ -3801,7 +3791,6 @@ gen6_render_op_fill_boxes(struct sna *sna,
 	do {
 		int nbox_this_time = gen6_get_rectangles(sna, &op->base, nbox);
 		if (unlikely(nbox_this_time == 0)) {
-			_kgem_submit(&sna->kgem);
 			gen6_emit_fill_state(sna, &op->base);
 			nbox_this_time = gen6_get_rectangles(sna, &op->base, nbox);
 		}
@@ -3999,7 +3988,6 @@ gen6_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo,
 	gen6_align_vertex(sna, &tmp);
 
 	if (unlikely(!gen6_get_rectangles(sna, &tmp, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen6_emit_fill_state(sna, &tmp);
 		gen6_get_rectangles(sna, &tmp, 1);
 	}
@@ -4098,7 +4086,6 @@ gen6_render_clear(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo)
 	gen6_align_vertex(sna, &tmp);
 
 	if (unlikely(!gen6_get_rectangles(sna, &tmp, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen6_emit_fill_state(sna, &tmp);
 		gen6_get_rectangles(sna, &tmp, 1);
 	}
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index c872c63..d039a48 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -1691,6 +1691,7 @@ flush:
 		gen7_vertex_flush(sna);
 		gen7_magic_ca_pass(sna, op);
 	}
+	_kgem_submit(&sna->kgem);
 	return 0;
 }
 
@@ -1801,7 +1802,6 @@ gen7_render_composite_blt(struct sna *sna,
 			  const struct sna_composite_rectangles *r)
 {
 	if (unlikely(!gen7_get_rectangles(sna, op, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen7_emit_composite_state(sna, op);
 		gen7_get_rectangles(sna, op, 1);
 	}
@@ -1817,7 +1817,6 @@ gen7_render_composite_box(struct sna *sna,
 	struct sna_composite_rectangles r;
 
 	if (unlikely(!gen7_get_rectangles(sna, op, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen7_emit_composite_state(sna, op);
 		gen7_get_rectangles(sna, op, 1);
 	}
@@ -1845,7 +1844,6 @@ gen7_render_composite_boxes(struct sna *sna,
 	do {
 		int nbox_this_time = gen7_get_rectangles(sna, op, nbox);
 		if (unlikely(nbox_this_time == 0)) {
-			_kgem_submit(&sna->kgem);
 			gen7_emit_composite_state(sna, op);
 			nbox_this_time = gen7_get_rectangles(sna, op, nbox);
 		}
@@ -2097,7 +2095,6 @@ gen7_render_video(struct sna *sna,
 		r.y2 = box->y2 + pix_yoff;
 
 		if (unlikely(!gen7_get_rectangles(sna, &tmp, 1))) {
-			_kgem_submit(&sna->kgem);
 			gen7_emit_video_state(sna, &tmp, frame);
 			gen7_get_rectangles(sna, &tmp, 1);
 		}
@@ -2945,7 +2942,6 @@ gen7_render_composite_spans_box(struct sna *sna,
 	     box->y2 - box->y1));
 
 	if (unlikely(gen7_get_rectangles(sna, &op->base, 1) == 0)) {
-		_kgem_submit(&sna->kgem);
 		gen7_emit_composite_state(sna, &op->base);
 		gen7_get_rectangles(sna, &op->base, 1);
 	}
@@ -2970,7 +2966,6 @@ gen7_render_composite_spans_boxes(struct sna *sna,
 
 		nbox_this_time = gen7_get_rectangles(sna, &op->base, nbox);
 		if (unlikely(nbox_this_time == 0)) {
-			_kgem_submit(&sna->kgem);
 			gen7_emit_composite_state(sna, &op->base);
 			nbox_this_time = gen7_get_rectangles(sna, &op->base, nbox);
 		}
@@ -3363,7 +3358,6 @@ fallback_blt:
 		float *v;
 		int n_this_time = gen7_get_rectangles(sna, &tmp, n);
 		if (unlikely(n_this_time == 0)) {
-			_kgem_submit(&sna->kgem);
 			gen7_emit_copy_state(sna, &tmp);
 			n_this_time = gen7_get_rectangles(sna, &tmp, n);
 		}
@@ -3417,7 +3411,6 @@ gen7_render_copy_blt(struct sna *sna,
 		     int16_t dx, int16_t dy)
 {
 	if (unlikely(!gen7_get_rectangles(sna, &op->base, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen7_emit_copy_state(sna, &op->base);
 		gen7_get_rectangles(sna, &op->base, 1);
 	}
@@ -3689,7 +3682,6 @@ gen7_render_fill_boxes(struct sna *sna,
 	do {
 		int n_this_time = gen7_get_rectangles(sna, &tmp, n);
 		if (unlikely(n_this_time == 0)) {
-			_kgem_submit(&sna->kgem);
 			gen7_emit_fill_state(sna, &tmp);
 			n_this_time = gen7_get_rectangles(sna, &tmp, n);
 		}
@@ -3726,7 +3718,6 @@ gen7_render_fill_op_blt(struct sna *sna,
 	DBG(("%s: (%d, %d)x(%d, %d)\n", __FUNCTION__, x, y, w, h));
 
 	if (unlikely(!gen7_get_rectangles(sna, &op->base, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen7_emit_fill_state(sna, &op->base);
 		gen7_get_rectangles(sna, &op->base, 1);
 	}
@@ -3753,7 +3744,6 @@ gen7_render_fill_op_box(struct sna *sna,
 	     box->x1, box->y1, box->x2, box->y2));
 
 	if (unlikely(!gen7_get_rectangles(sna, &op->base, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen7_emit_fill_state(sna, &op->base);
 		gen7_get_rectangles(sna, &op->base, 1);
 	}
@@ -3783,7 +3773,6 @@ gen7_render_fill_op_boxes(struct sna *sna,
 	do {
 		int nbox_this_time = gen7_get_rectangles(sna, &op->base, nbox);
 		if (unlikely(nbox_this_time == 0)) {
-			_kgem_submit(&sna->kgem);
 			gen7_emit_fill_state(sna, &op->base);
 			nbox_this_time = gen7_get_rectangles(sna, &op->base, nbox);
 		}
@@ -3979,7 +3968,6 @@ gen7_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo,
 	gen7_align_vertex(sna, &tmp);
 
 	if (unlikely(!gen7_get_rectangles(sna, &tmp, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen7_emit_fill_state(sna, &tmp);
 		gen7_get_rectangles(sna, &tmp, 1);
 	}
@@ -4078,7 +4066,6 @@ gen7_render_clear(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo)
 	gen7_align_vertex(sna, &tmp);
 
 	if (unlikely(!gen7_get_rectangles(sna, &tmp, 1))) {
-		_kgem_submit(&sna->kgem);
 		gen7_emit_fill_state(sna, &tmp);
 		gen7_get_rectangles(sna, &tmp, 1);
 	}


More information about the xorg-commit mailing list