xf86-video-intel: 3 commits - src/sna/compiler.h 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 src/sna/sna_trapezoids.c

Chris Wilson ickle at kemper.freedesktop.org
Mon Feb 25 08:15:02 PST 2013


 src/sna/compiler.h       |    2 ++
 src/sna/gen3_render.c    |   12 +++++++++---
 src/sna/gen4_render.c    |   14 +++++++++++---
 src/sna/gen5_render.c    |   13 ++++++++++---
 src/sna/gen6_render.c    |   13 ++++++++++---
 src/sna/gen7_render.c    |   13 ++++++++++---
 src/sna/sna_trapezoids.c |    4 ++--
 7 files changed, 54 insertions(+), 17 deletions(-)

New commits:
commit 56fd91fc830d7a210e3a0e70ab41261a1f5baa83
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Feb 25 15:18:46 2013 +0000

    sna/gen3+: Restart vertex space checks after lock contention
    
    If we end up contending for the vertex lock, we need to double check
    there is sufficient vertex space left for us.
    
    Bugzill: https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/1124576
    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 ecf3e8a..9cc1349 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -1990,9 +1990,12 @@ start:
 			goto flush;
 	}
 
-	if (unlikely(sna->render.vertex_offset == 0 &&
-		     !gen3_rectangle_begin(sna, op)))
-		goto flush;
+	if (unlikely(sna->render.vertex_offset == 0)) {
+		if (!gen3_rectangle_begin(sna, op))
+			goto flush;
+		else
+			goto start;
+	}
 
 	assert(op->floats_per_rect >= vertex_space(sna));
 	assert(rem <= vertex_space(sna));
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 00518d4..d08d762 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -654,9 +654,12 @@ start:
 			goto flush;
 	}
 
-	if (unlikely(sna->render.vertex_offset == 0 &&
-		     !gen4_rectangle_begin(sna, op)))
-		goto flush;
+	if (unlikely(sna->render.vertex_offset == 0)) {
+		if (!gen4_rectangle_begin(sna, op))
+			goto flush;
+		else
+			goto start;
+	}
 
 	assert(op->floats_per_rect >= vertex_space(sna));
 	assert(rem <= vertex_space(sna));
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 483ca4b..f236877 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -640,9 +640,12 @@ start:
 			goto flush;
 	}
 
-	if (unlikely(sna->render.vertex_offset == 0 &&
-		     !gen5_rectangle_begin(sna, op)))
-		goto flush;
+	if (unlikely(sna->render.vertex_offset == 0)) {
+		if (!gen5_rectangle_begin(sna, op))
+			goto flush;
+		else
+			goto start;
+	}
 
 	assert(op->floats_per_rect >= vertex_space(sna));
 	assert(rem <= vertex_space(sna));
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 60958e1..fa4c47b 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -1189,9 +1189,12 @@ start:
 			goto flush;
 	}
 
-	if (unlikely(sna->render.vertex_offset == 0 &&
-		     !gen6_rectangle_begin(sna, op)))
-		goto flush;
+	if (unlikely(sna->render.vertex_offset == 0)) {
+		if (!gen6_rectangle_begin(sna, op))
+			goto flush;
+		else
+			goto start;
+	}
 
 	assert(op->floats_per_rect >= vertex_space(sna));
 	assert(rem <= vertex_space(sna));
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index d169388..bd14d90 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -1334,9 +1334,12 @@ start:
 			goto flush;
 	}
 
-	if (unlikely(sna->render.vertex_offset == 0 &&
-		     !gen7_rectangle_begin(sna, op)))
-		goto flush;
+	if (unlikely(sna->render.vertex_offset == 0)) {
+		if (!gen7_rectangle_begin(sna, op))
+			goto flush;
+		else
+			goto start;
+	}
 
 	assert(op->floats_per_rect >= vertex_space(sna));
 	assert(rem <= vertex_space(sna));
commit b12f0da0bedb7faf0c96e44ca2d02baec807ad51
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Feb 25 15:18:46 2013 +0000

    sna/gen3+: Assert that nbox is not 0
    
    Various assertions to track down a potential programming error.
    
    References: https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/1124576
    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 c9c18fe..ecf3e8a 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -1977,6 +1977,7 @@ inline static int gen3_get_rectangles(struct sna *sna,
 	DBG(("%s: want=%d, rem=%d\n",
 	     __FUNCTION__, want*op->floats_per_rect, vertex_space(sna)));
 
+	assert(want);
 	assert(sna->render.vertex_index * op->floats_per_vertex == sna->render.vertex_used);
 
 start:
@@ -1993,6 +1994,8 @@ start:
 		     !gen3_rectangle_begin(sna, op)))
 		goto flush;
 
+	assert(op->floats_per_rect >= vertex_space(sna));
+	assert(rem <= vertex_space(sna));
 	if (want > 1 && want * op->floats_per_rect > rem)
 		want = rem / op->floats_per_rect;
 	sna->render.vertex_index += 3*want;
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 64077a2..00518d4 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -642,6 +642,8 @@ inline static int gen4_get_rectangles(struct sna *sna,
 {
 	int rem;
 
+	assert(want);
+
 start:
 	rem = vertex_space(sna);
 	if (unlikely(rem < op->floats_per_rect)) {
@@ -656,6 +658,8 @@ start:
 		     !gen4_rectangle_begin(sna, op)))
 		goto flush;
 
+	assert(op->floats_per_rect >= vertex_space(sna));
+	assert(rem <= vertex_space(sna));
 	if (want > 1 && want * op->floats_per_rect > rem)
 		want = rem / op->floats_per_rect;
 
@@ -2034,6 +2038,7 @@ gen4_render_composite_spans_boxes__thread(struct sna *sna,
 	     __FUNCTION__, nbox,
 	     op->base.src.offset[0], op->base.src.offset[1],
 	     op->base.dst.x, op->base.dst.y));
+	assert(nbox);
 
 	sna_vertex_lock(&sna->render);
 	do {
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 6e11996..483ca4b 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -628,6 +628,8 @@ inline static int gen5_get_rectangles(struct sna *sna,
 {
 	int rem;
 
+	assert(want);
+
 start:
 	rem = vertex_space(sna);
 	if (unlikely(rem < op->floats_per_rect)) {
@@ -642,6 +644,8 @@ start:
 		     !gen5_rectangle_begin(sna, op)))
 		goto flush;
 
+	assert(op->floats_per_rect >= vertex_space(sna));
+	assert(rem <= vertex_space(sna));
 	if (want > 1 && want * op->floats_per_rect > rem)
 		want = rem / op->floats_per_rect;
 
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 3855f04..60958e1 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -1177,6 +1177,8 @@ inline static int gen6_get_rectangles(struct sna *sna,
 {
 	int rem;
 
+	assert(want);
+
 start:
 	rem = vertex_space(sna);
 	if (unlikely(rem < op->floats_per_rect)) {
@@ -1191,6 +1193,8 @@ start:
 		     !gen6_rectangle_begin(sna, op)))
 		goto flush;
 
+	assert(op->floats_per_rect >= vertex_space(sna));
+	assert(rem <= vertex_space(sna));
 	if (want > 1 && want * op->floats_per_rect > rem)
 		want = rem / op->floats_per_rect;
 
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index d9bb18d..d169388 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -1322,6 +1322,8 @@ inline static int gen7_get_rectangles(struct sna *sna,
 {
 	int rem;
 
+	assert(want);
+
 start:
 	rem = vertex_space(sna);
 	if (unlikely(rem < op->floats_per_rect)) {
@@ -1336,6 +1338,8 @@ start:
 		     !gen7_rectangle_begin(sna, op)))
 		goto flush;
 
+	assert(op->floats_per_rect >= vertex_space(sna));
+	assert(rem <= vertex_space(sna));
 	if (want > 1 && want * op->floats_per_rect > rem)
 		want = rem / op->floats_per_rect;
 
commit 6f9646f5beecca2972ef0299b5c7469008cb6fe4
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Feb 25 14:36:32 2013 +0000

    sna/trapezoids: Instruct the compiler to flatten the callees whilst rasterising
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/compiler.h b/src/sna/compiler.h
index 1d50118..23ec31c 100644
--- a/src/sna/compiler.h
+++ b/src/sna/compiler.h
@@ -38,6 +38,7 @@
 #define constant __attribute__((const))
 #define pure __attribute__((pure))
 #define __packed__ __attribute__((__packed__))
+#define flatten __attribute__((flatten))
 #else
 #define likely(expr) (expr)
 #define unlikely(expr) (expr)
@@ -48,6 +49,7 @@
 #define constant
 #define pure
 #define __packed__
+#define flatten
 #endif
 
 #ifdef HAVE_VALGRIND
diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index 9396baf..89f89db 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -1228,7 +1228,7 @@ tor_blt_empty(struct sna *sna,
 	span(sna, op, clip, &box, 0);
 }
 
-static void
+flatten static void
 tor_render(struct sna *sna,
 	   struct tor *converter,
 	   struct sna_composite_spans_op *op,
@@ -2213,7 +2213,7 @@ mono_step_edges(struct mono *c, int count)
 	}
 }
 
-static void
+flatten static void
 mono_render(struct mono *mono)
 {
 	struct mono_polygon *polygon = &mono->polygon;


More information about the xorg-commit mailing list