xf86-video-intel: 5 commits - src/sna/sna_accel.c src/sna/sna_composite.c src/sna/sna_damage.c test/basic-copyarea.c test/basic-copyarea-size.c test/basic-fillrect.c test/basic-putimage.c test/basic-rectangle.c test/basic-stress.c test/basic-string.c test/mixed-stress.c test/render-composite-solid.c test/render-composite-solid-mask.c test/render-copy-alphaless.c test/render-copyarea.c test/render-copyarea-mask.c test/render-copyarea-size.c test/render-fill.c test/render-fill-copy.c test/render-trapezoid.c test/render-trapezoid-image.c test/test.h

Chris Wilson ickle at kemper.freedesktop.org
Mon Nov 18 04:34:34 PST 2013


 src/sna/sna_accel.c                |    7 +++++++
 src/sna/sna_composite.c            |    7 +++----
 src/sna/sna_damage.c               |    9 +++++----
 test/basic-copyarea-size.c         |    2 +-
 test/basic-copyarea.c              |    7 ++-----
 test/basic-fillrect.c              |    7 ++-----
 test/basic-putimage.c              |    7 ++-----
 test/basic-rectangle.c             |    6 +-----
 test/basic-stress.c                |    2 +-
 test/basic-string.c                |    6 +-----
 test/mixed-stress.c                |    2 +-
 test/render-composite-solid-mask.c |    6 +-----
 test/render-composite-solid.c      |    6 +-----
 test/render-copy-alphaless.c       |    6 +-----
 test/render-copyarea-mask.c        |    6 +-----
 test/render-copyarea-size.c        |    2 +-
 test/render-copyarea.c             |    6 +-----
 test/render-fill-copy.c            |    6 +-----
 test/render-fill.c                 |    6 +-----
 test/render-trapezoid-image.c      |    6 +-----
 test/render-trapezoid.c            |    6 +-----
 test/test.h                        |    3 +++
 22 files changed, 39 insertions(+), 82 deletions(-)

New commits:
commit 4194100691347ccec4b1863f3f62987d9286707b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Nov 18 12:33:05 2013 +0000

    sna: Process Damage relative to dst->pDrawable not its pixmap->drawable
    
    References: https://bugs.freedesktop.org/show_bug.cgi?id=32734
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_composite.c b/src/sna/sna_composite.c
index c5e2311..6078d52 100644
--- a/src/sna/sna_composite.c
+++ b/src/sna/sna_composite.c
@@ -902,15 +902,14 @@ sna_composite_rectangles(CARD8		 op,
 	     RegionExtents(&region)->x2, RegionExtents(&region)->y2,
 	     (long)RegionNumRects(&region)));
 
-	pixmap = get_drawable_pixmap(dst->pDrawable);
-
 	/* XXX xserver-1.8: CompositeRects is not tracked by Damage, so we must
 	 * manually append the damaged regions ourselves.
 	 *
 	 * Note that DamageRegionAppend() will apply the drawable-deltas itself.
 	 */
-	DamageRegionAppend(&pixmap->drawable, &region);
+	DamageRegionAppend(dst->pDrawable, &region);
 
+	pixmap = get_drawable_pixmap(dst->pDrawable);
 	if (get_drawable_deltas(dst->pDrawable, pixmap, &dst_x, &dst_y))
 		pixman_region_translate(&region, dst_x, dst_y);
 
@@ -1141,7 +1140,7 @@ fallback_composite:
 	}
 
 done:
-	DamageRegionProcessPending(&pixmap->drawable);
+	DamageRegionProcessPending(dst->pDrawable);
 
 cleanup_region:
 	pixman_region_fini(&region);
commit e99e643ed1f2856109426f791a7615ee122d7c42
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Nov 18 12:04:29 2013 +0000

    tests: Avoid dependence on undefined C
    
    Right-shifting by a negative value is undefined.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/test/basic-copyarea-size.c b/test/basic-copyarea-size.c
index 732bb81..5e3373d 100644
--- a/test/basic-copyarea-size.c
+++ b/test/basic-copyarea-size.c
@@ -57,7 +57,7 @@ int main(int argc, char **argv)
 
 		printf("size=%d\n", size);
 		for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-			int reps = 1 << i;
+			int reps = REPS(i);
 			do {
 				int sx = rand() % (2*size) - size;
 				int sy = rand() % (2*size) - size;
diff --git a/test/basic-copyarea.c b/test/basic-copyarea.c
index 025b884..8b64199 100644
--- a/test/basic-copyarea.c
+++ b/test/basic-copyarea.c
@@ -282,13 +282,10 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
+		int reps = REPS(i);
+		int sets = SETS(i);
 		enum target t;
 
-		if (sets < 2)
-			sets = 2;
-
 		for (t = TARGET_FIRST; t <= TARGET_LAST; t++) {
 			pixel_tests(&test, reps, sets, t);
 			area_tests(&test, reps, sets, t);
diff --git a/test/basic-fillrect.c b/test/basic-fillrect.c
index 67d7067..186604c 100644
--- a/test/basic-fillrect.c
+++ b/test/basic-fillrect.c
@@ -246,13 +246,10 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
+		int reps = REPS(i);
+		int sets = SETS(i);
 		enum target t;
 
-		if (sets < 2)
-			sets = 2;
-
 		for (t = TARGET_FIRST; t <= TARGET_LAST; t++) {
 			pixel_tests(&test, reps, sets, t);
 			area_tests(&test, reps, sets, t);
diff --git a/test/basic-putimage.c b/test/basic-putimage.c
index 5d68908..10053bc 100644
--- a/test/basic-putimage.c
+++ b/test/basic-putimage.c
@@ -262,13 +262,10 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
+		int reps = REPS(i);
+		int sets = SETS(i);
 		enum target t;
 
-		if (sets < 2)
-			sets = 2;
-
 		for (t = TARGET_FIRST; t <= TARGET_LAST; t++) {
 			pixel_tests(&test, reps, sets, t, 0);
 			area_tests(&test, reps, sets, t, 0);
diff --git a/test/basic-rectangle.c b/test/basic-rectangle.c
index 8f78bba..8de200c 100644
--- a/test/basic-rectangle.c
+++ b/test/basic-rectangle.c
@@ -204,13 +204,9 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
+		int reps = REPS(i), sets = SETS(i);
 		enum target t;
 
-		if (sets < 2)
-			sets = 2;
-
 		for (t = TARGET_FIRST; t <= TARGET_LAST; t++) {
 			zrect_tests(&test, reps, sets, t);
 			hrect_tests(&test, reps, sets, t);
diff --git a/test/basic-stress.c b/test/basic-stress.c
index 5657173..4b42865 100644
--- a/test/basic-stress.c
+++ b/test/basic-stress.c
@@ -147,7 +147,7 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int iterations = 1 << i;
+		int iterations = REPS(i);
 		rect_tests(&test, iterations, 0);
 		rect_tests(&test, iterations, 1);
 	}
diff --git a/test/basic-string.c b/test/basic-string.c
index 9f59c91..1e24b29 100644
--- a/test/basic-string.c
+++ b/test/basic-string.c
@@ -86,13 +86,9 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
+		int reps = REPS(i), sets = SETS(i);
 		enum target t;
 
-		if (sets < 2)
-			sets = 2;
-
 		for (t = TARGET_FIRST; t <= TARGET_LAST; t++) {
 			string_tests(&test, reps, sets, t);
 		}
diff --git a/test/mixed-stress.c b/test/mixed-stress.c
index 42e2c08..a315a9c 100644
--- a/test/mixed-stress.c
+++ b/test/mixed-stress.c
@@ -200,7 +200,7 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int iterations = 1 << i;
+		int iterations = REPS(i);
 		rect_tests(&test, iterations, 0);
 		rect_tests(&test, iterations, 1);
 	}
diff --git a/test/render-composite-solid-mask.c b/test/render-composite-solid-mask.c
index b86512c..925df3c 100644
--- a/test/render-composite-solid-mask.c
+++ b/test/render-composite-solid-mask.c
@@ -107,13 +107,9 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
+		int reps = REPS(i), sets = SETS(i);
 		enum target t;
 
-		if (sets < 2)
-			sets = 2;
-
 		for (t = TARGET_FIRST; t <= TARGET_LAST; t++)
 			ref_tests(&test, reps, sets, t);
 	}
diff --git a/test/render-composite-solid.c b/test/render-composite-solid.c
index 6609c4b..b4742af 100644
--- a/test/render-composite-solid.c
+++ b/test/render-composite-solid.c
@@ -238,13 +238,9 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
+		int reps = REPS(i), sets = SETS(i);
 		enum target t;
 
-		if (sets < 2)
-			sets = 2;
-
 		for (t = TARGET_FIRST; t <= TARGET_LAST; t++) {
 			pixel_tests(&test, reps, sets, t);
 			area_tests(&test, reps, sets, t);
diff --git a/test/render-copy-alphaless.c b/test/render-copy-alphaless.c
index b968704..5f1487e 100644
--- a/test/render-copy-alphaless.c
+++ b/test/render-copy-alphaless.c
@@ -270,11 +270,7 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
-
-		if (sets < 2)
-			sets = 2;
+		int reps = REPS(i), sets = SETS(i);
 
 		pixel_tests(&test, reps, sets, PIXMAP);
 		area_tests(&test, reps, sets, PIXMAP);
diff --git a/test/render-copyarea-mask.c b/test/render-copyarea-mask.c
index c8bb715..5116c16 100644
--- a/test/render-copyarea-mask.c
+++ b/test/render-copyarea-mask.c
@@ -149,13 +149,9 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
+		int reps = REPS(i), sets = SETS(i);
 		enum target t;
 
-		if (sets < 2)
-			sets = 2;
-
 		for (t = TARGET_FIRST; t <= TARGET_LAST; t++) {
 			rect_tests(&test, reps, sets, t, 0);
 			if (t != PIXMAP)
diff --git a/test/render-copyarea-size.c b/test/render-copyarea-size.c
index 65fb6ca..55e3b56 100644
--- a/test/render-copyarea-size.c
+++ b/test/render-copyarea-size.c
@@ -65,7 +65,7 @@ int main(int argc, char **argv)
 
 		printf("size=%d\n", size);
 		for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-			int reps = 1 << i;
+			int reps = REPS(i);
 			do {
 				int sx = rand() % (2*size) - size;
 				int sy = rand() % (2*size) - size;
diff --git a/test/render-copyarea.c b/test/render-copyarea.c
index bcab553..8c00b34 100644
--- a/test/render-copyarea.c
+++ b/test/render-copyarea.c
@@ -305,13 +305,9 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
+		int reps = REPS(i), sets = SETS(i);
 		enum target t;
 
-		if (sets < 2)
-			sets = 2;
-
 		for (t = TARGET_FIRST; t <= TARGET_LAST; t++) {
 			pixel_tests(&test, reps, sets, t);
 			area_tests(&test, reps, sets, t);
diff --git a/test/render-fill-copy.c b/test/render-fill-copy.c
index bc4a734..45551b2 100644
--- a/test/render-fill-copy.c
+++ b/test/render-fill-copy.c
@@ -262,13 +262,9 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
+		int reps = REPS(i), sets = SETS(i);
 		enum target t;
 
-		if (sets < 2)
-			sets = 2;
-
 		for (t = TARGET_FIRST; t <= TARGET_LAST; t++) {
 			pixel_tests(&test, reps, sets, t);
 			area_tests(&test, reps, sets, t);
diff --git a/test/render-fill.c b/test/render-fill.c
index 27d565b..54be1a3 100644
--- a/test/render-fill.c
+++ b/test/render-fill.c
@@ -230,13 +230,9 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
+		int reps = REPS(i), sets = SETS(i);
 		enum target t;
 
-		if (sets < 2)
-			sets = 2;
-
 		for (t = TARGET_FIRST; t <= TARGET_LAST; t++) {
 			pixel_tests(&test, reps, sets, t);
 			area_tests(&test, reps, sets, t);
diff --git a/test/render-trapezoid-image.c b/test/render-trapezoid-image.c
index c794cbb..c25661d 100644
--- a/test/render-trapezoid-image.c
+++ b/test/render-trapezoid-image.c
@@ -585,11 +585,7 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
-
-		if (sets < 2)
-			sets = 2;
+		int reps = REPS(i), SETS(i);
 
 		for (target = TARGET_FIRST; target <= TARGET_LAST; target++) {
 			pixel_tests(&test, reps, sets, target, 0);
diff --git a/test/render-trapezoid.c b/test/render-trapezoid.c
index f7fd5bb..811d909 100644
--- a/test/render-trapezoid.c
+++ b/test/render-trapezoid.c
@@ -414,11 +414,7 @@ int main(int argc, char **argv)
 	test_init(&test, argc, argv);
 
 	for (i = 0; i <= DEFAULT_ITERATIONS; i++) {
-		int reps = 1 << i;
-		int sets = 1 << (12 - i);
-
-		if (sets < 2)
-			sets = 2;
+		int reps = REPS(i), sets = SETS(i);
 
 		for (target = TARGET_FIRST; target <= TARGET_LAST; target++) {
 			pixel_tests(&test, reps, sets, target);
diff --git a/test/test.h b/test/test.h
index 7ef4dca..3cd9457 100644
--- a/test/test.h
+++ b/test/test.h
@@ -120,4 +120,7 @@ double test_timer_stop(struct test_display *t, struct timespec *tv);
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
 #endif
 
+#define REPS(I) (1 << (I))
+#define SETS(I) ((I) < 12 ? 1 << (12 - (I)) : 2)
+
 #endif
commit b6924161108214b4e50c25f4168564ead4000430
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Nov 18 11:58:43 2013 +0000

    sna/damage: Tidy up a tail return
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c
index fb161b5..b634c0b 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -901,9 +901,7 @@ __sna_damage_add_points(struct sna_damage *damage,
 		return damage;
 
 	damage_union(damage, &extents);
-	_sna_damage_create_elt_from_points(damage, p, n, dx, dy);
-
-	return damage;
+	return _sna_damage_create_elt_from_points(damage, p, n, dx, dy);
 }
 
 #if HAS_DEBUG_FULL
commit 52612185c60605542beb3745a2500ed65a8ffff0
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Nov 15 21:20:30 2013 +0000

    sna/damage: Guard against integer overflow before malloc
    
    Check that the multiplication to compute the allocation will not
    overflow.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c
index 5730a25..fb161b5 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -206,6 +206,9 @@ static bool _sna_damage_create_boxes(struct sna_damage *damage,
 
 	DBG(("    %s(%d->%d): new\n", __FUNCTION__, count, n));
 
+	if (n > (INT_MAX - sizeof(*box)) / sizeof(BoxRec))
+		return false;
+
 	box = malloc(sizeof(*box) + sizeof(BoxRec)*n);
 	if (box == NULL)
 		return false;
@@ -380,7 +383,7 @@ _sna_damage_create_elt_from_points(struct sna_damage *damage,
 
 	DBG(("    %s(): new elt\n", __FUNCTION__));
 
-	if (! _sna_damage_create_boxes(damage, count))
+	if (!_sna_damage_create_boxes(damage, count))
 		return damage;
 
 	for (i = 0; i < count; i++) {
commit 95c3892dd3911ba44ae3170573de1153857b15a8
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Nov 15 11:55:51 2013 +0000

    sna: Include valgrind leakchecks for --enable-debug=memory
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 30262c1..75a6b27 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -54,6 +54,11 @@
 #include <sys/mman.h>
 #include <unistd.h>
 
+#ifdef HAVE_VALGRIND
+#include <valgrind.h>
+#include <memcheck.h>
+#endif
+
 #define FAULT_INJECTION 0
 
 #define FORCE_INPLACE 0
@@ -16452,6 +16457,8 @@ static void sna_accel_debug_memory(struct sna *sna)
 	ErrorF("Allocated CPU bo: %d, %ld bytes\n",
 	       sna->debug_memory.cpu_bo_allocs,
 	       (long)sna->debug_memory.cpu_bo_bytes);
+
+	VG(VALGRIND_DO_ADDED_LEAK_CHECK);
 }
 
 #else


More information about the xorg-commit mailing list