xf86-video-intel: 2 commits - src/sna/sna_accel.c
Chris Wilson
ickle at kemper.freedesktop.org
Thu Jan 19 01:55:33 PST 2012
src/sna/sna_accel.c | 65 ++++++++++++++++++++++++++++++----------------------
1 file changed, 38 insertions(+), 27 deletions(-)
New commits:
commit ff2eb116ef85182eea9ed06daaa1e9a4f7bdbad3
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Jan 18 00:56:07 2012 +0000
sna: Micro-optimise line extents for zero line width
Handling zero line widths is the common case, so avoid the extra work.
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 79555e5..08889f8 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -5192,19 +5192,11 @@ sna_poly_line_extents(DrawablePtr drawable, GCPtr gc,
BoxPtr out)
{
BoxRec box;
- int extra = gc->lineWidth >> 1;
bool clip, blt = true;
if (n == 0)
return 0;
- if (n > 1) {
- if (gc->joinStyle == JoinMiter)
- extra = 6 * gc->lineWidth;
- else if (gc->capStyle == CapProjecting)
- extra = gc->lineWidth;
- }
-
box.x2 = box.x1 = pt->x;
box.y2 = box.y1 = pt->y;
if (mode == CoordModePrevious) {
@@ -5234,11 +5226,20 @@ sna_poly_line_extents(DrawablePtr drawable, GCPtr gc,
box.x2++;
box.y2++;
- if (extra) {
- box.x1 -= extra;
- box.x2 += extra;
- box.y1 -= extra;
- box.y2 += extra;
+ if (gc->lineWidth) {
+ int extra = gc->lineWidth >> 1;
+ if (n > 1) {
+ if (gc->joinStyle == JoinMiter)
+ extra = 6 * gc->lineWidth;
+ else if (gc->capStyle == CapProjecting)
+ extra = gc->lineWidth;
+ }
+ if (extra) {
+ box.x1 -= extra;
+ box.x2 += extra;
+ box.y1 -= extra;
+ box.y2 += extra;
+ }
}
clip = trim_and_translate_box(&box, drawable, gc);
commit 3c010745076204ed3b66e947c9eab6de84f670fe
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jan 19 09:46:52 2012 +0000
sna: filter out degenerate segments whilst drawing unclipped PolySegment
The damage layer was detecting that we were asking it to accumulate a
degenerate box emanating from PolySegment, as the unclipped paths made
the fatal assumption that it would not need to filter out degenerate
boxes. However, a degenerate line becomes a point, does the same apply
to a degenerate segment?
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 0f21ffa..79555e5 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -5534,18 +5534,25 @@ sna_poly_segment_blt(DrawablePtr drawable,
b->x2--;
}
- b->x1 += dx;
- b->x2 += dx;
- b->y1 += dy;
- b->y2 += dy;
- b++;
+ /* XXX does a degenerate segment
+ * become a point?
+ */
+ if (b->y2 > b->y1 && b->x2 > b->x1) {
+ b->x1 += dx;
+ b->x2 += dx;
+ b->y1 += dy;
+ b->y2 += dy;
+ b++;
+ }
seg++;
} while (--nbox);
- fill.boxes(sna, &fill, boxes, b-boxes);
- if (damage)
- sna_damage_add_boxes(damage, boxes, b-boxes, 0, 0);
- b = boxes;
+ if (b != boxes) {
+ fill.boxes(sna, &fill, boxes, b-boxes);
+ if (damage)
+ sna_damage_add_boxes(damage, boxes, b-boxes, 0, 0);
+ b = boxes;
+ }
} while (n);
} else {
do {
@@ -5580,14 +5587,17 @@ sna_poly_segment_blt(DrawablePtr drawable,
b->x2--;
}
- b++;
+ if (b->y2 > b->y1 && b->x2 > b->x1)
+ b++;
seg++;
} while (--nbox);
- fill.boxes(sna, &fill, boxes, b-boxes);
- if (damage)
- sna_damage_add_boxes(damage, boxes, b-boxes, 0, 0);
- b = boxes;
+ if (b != boxes) {
+ fill.boxes(sna, &fill, boxes, b-boxes);
+ if (damage)
+ sna_damage_add_boxes(damage, boxes, b-boxes, 0, 0);
+ b = boxes;
+ }
} while (n);
}
} else {
More information about the xorg-commit
mailing list