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