xf86-video-intel: src/i830_render.c src/intel.h src/intel_uxa.c

Chris Wilson ickle at kemper.freedesktop.org
Thu Dec 23 11:43:31 PST 2010


 src/i830_render.c |   20 ++++++++++++++++----
 src/intel.h       |    3 ++-
 src/intel_uxa.c   |    1 +
 3 files changed, 19 insertions(+), 5 deletions(-)

New commits:
commit 875d4828352c501ec5d0169735fb078807e76f2e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Dec 23 19:36:12 2010 +0000

    i830: amalgamate consecutive composites into a single primitive
    
    Improve aa10text on i845 from 218kglyphs/s to 234kglyphs/s
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/i830_render.c b/src/i830_render.c
index 2c40b5d..3f3d2ef 100644
--- a/src/i830_render.c
+++ b/src/i830_render.c
@@ -669,7 +669,7 @@ i830_emit_composite_primitive(PixmapPtr dest,
 	ScrnInfoPtr scrn = xf86Screens[dest->drawable.pScreen->myNum];
 	intel_screen_private *intel = intel_get_screen_private(scrn);
 	Bool is_affine_src, is_affine_mask = TRUE;
-	int per_vertex, num_floats;
+	int per_vertex;
 	float src_x[3], src_y[3], src_w[3], mask_x[3], mask_y[3], mask_w[3];
 
 	per_vertex = 2;		/* dest x/y */
@@ -786,9 +786,10 @@ i830_emit_composite_primitive(PixmapPtr dest,
 		}
 	}
 
-	num_floats = 3 * per_vertex;
-
-	OUT_BATCH(PRIM3D_INLINE | PRIM3D_RECTLIST | (num_floats - 1));
+	if (intel->vertex_count == 0) {
+		intel->vertex_index = intel->batch_used;
+		OUT_BATCH(PRIM3D_INLINE | PRIM3D_RECTLIST);
+	}
 	OUT_BATCH_F(dstX + w);
 	OUT_BATCH_F(dstY + h);
 	OUT_BATCH_F(src_x[2] / intel->scale_units[0][0]);
@@ -833,6 +834,17 @@ i830_emit_composite_primitive(PixmapPtr dest,
 			OUT_BATCH_F(mask_w[0]);
 		}
 	}
+
+	intel->vertex_count += 3 * per_vertex;
+
+}
+
+void i830_vertex_flush(intel_screen_private *intel)
+{
+	if (intel->vertex_count) {
+		intel->batch_ptr[intel->vertex_index] |= intel->vertex_count - 1;
+		intel->vertex_count = 0;
+	}
 }
 
 /**
diff --git a/src/intel.h b/src/intel.h
index 8d31ac1..04c679f 100644
--- a/src/intel.h
+++ b/src/intel.h
@@ -570,9 +570,10 @@ Bool i830_check_composite_texture(ScreenPtr screen, PicturePtr picture);
 Bool i830_prepare_composite(int op, PicturePtr sourcec, PicturePtr mask,
 			    PicturePtr dest, PixmapPtr sourcecPixmap,
 			    PixmapPtr maskPixmap, PixmapPtr destPixmap);
-
 void i830_composite(PixmapPtr dest, int srcX, int srcY,
 		    int maskX, int maskY, int dstX, int dstY, int w, int h);
+void i830_vertex_flush(intel_screen_private *intel);
+
 /* i915_render.c */
 Bool i915_check_composite(int op,
 			  PicturePtr sourcec, PicturePtr mask, PicturePtr dest,
diff --git a/src/intel_uxa.c b/src/intel_uxa.c
index 2be26b2..3f231ad 100644
--- a/src/intel_uxa.c
+++ b/src/intel_uxa.c
@@ -1220,6 +1220,7 @@ Bool intel_uxa_init(ScreenPtr screen)
 		intel->uxa_driver->composite = i830_composite;
 		intel->uxa_driver->done_composite = i830_done_composite;
 
+		intel->vertex_flush = i830_vertex_flush;
 		intel->batch_commit_notify = i830_batch_commit_notify;
 	} else if (IS_GEN3(intel)) {
 		intel->uxa_driver->check_composite = i915_check_composite;


More information about the xorg-commit mailing list