xf86-video-intel: 3 commits - src/sna/sna_accel.c
Chris Wilson
ickle at kemper.freedesktop.org
Tue Apr 3 01:19:31 PDT 2012
src/sna/sna_accel.c | 55 ++++++++++++++++++++++++++++++++++++----------------
1 file changed, 39 insertions(+), 16 deletions(-)
New commits:
commit 87a672dafd9d6f47f31b77b406b7f0fb2b4030ac
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Apr 3 09:24:06 2012 +0100
sna: Apply CoordMode when computing point extents
Reported-by: Patrick Truebe <eko-priv at gmx.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=48220
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 6eee977..f1d4d00 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -5556,9 +5556,19 @@ sna_poly_point_extents(DrawablePtr drawable, GCPtr gc,
box.x2 = box.x1 = pt->x;
box.y2 = box.y1 = pt->y;
- while (--n) {
- pt++;
- box_add_pt(&box, pt->x, pt->y);
+ if (mode == CoordModePrevious) {
+ DDXPointRec last = *pt++;
+ while (--n) {
+ last.x += pt->x;
+ last.y += pt->y;
+ pt++;
+ box_add_pt(&box, last.x, last.y);
+ }
+ } else {
+ while (--n) {
+ ++pt;
+ box_add_pt(&box, pt->x, pt->y);
+ }
}
box.x2++;
box.y2++;
commit 0a0ee491ea18dc59748ff4419ae73bd1a369ae79
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Apr 3 09:23:49 2012 +0100
sna: Debugging flil spans and their clipping
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 32eae52..6eee977 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -4291,14 +4291,18 @@ sna_fill_spans__fill_clip_extents(DrawablePtr drawable,
extents->x2, extents->y2));
while (n--) {
+ DBG(("%s: [%d] pt=(%d, %d), width=%d\n",
+ __FUNCTION__, n, pt->x, pt->y, *width));
*(DDXPointRec *)b = *pt++;
b->x2 = b->x1 + (int)*width++;
b->y2 = b->y1 + 1;
if (box_intersect(b, extents)) {
- b->x1 += data->dx;
- b->x2 += data->dx;
- b->y1 += data->dy;
- b->y2 += data->dy;
+ DBG(("%s: [%d] clipped=(%d, %d), (%d, %d)\n",
+ __FUNCTION__, n, b->x1, b->y1, b->x2, b->y2));
+ if (data->dx|data->dy) {
+ b->x1 += data->dx; b->x2 += data->dx;
+ b->y1 += data->dy; b->y2 += data->dy;
+ }
if (++b == last_box) {
op->boxes(data->sna, op, box, last_box - box);
b = box;
@@ -8578,6 +8582,9 @@ sna_poly_fill_polygon(DrawablePtr draw, GCPtr gc,
(gc->fillStyle == FillTiled && gc->tileIsPixel)),
gc->fillStyle, gc->tileIsPixel,
gc->alu));
+ DBG(("%s: draw=%d, offset=(%d, %d), size=%dx%d\n",
+ __FUNCTION__, draw->serialNumber,
+ draw->x, draw->y, draw->width, draw->height));
data.flags = sna_poly_point_extents(draw, gc, mode, n, pt,
&data.region.extents);
commit ec1267df746512c2e262ef0bd9e9527bc5efe6f4
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Apr 2 16:16:24 2012 +0100
sna: Use the solid spans fast paths for dashed zero-width lines as well
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 9829ada..32eae52 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -4499,10 +4499,10 @@ no_damage_clipped:
b->y2 = b->y1 + 1;
if (box_intersect(b, &clip.extents)) {
- b->x1 += dx;
- b->x2 += dx;
- b->y1 += dy;
- b->y2 += dy;
+ if (dx|dy) {
+ b->x1 += dx; b->x2 += dx;
+ b->y1 += dy; b->y2 += dy;
+ }
if (++b == last_box) {
fill.boxes(sna, &fill, box, last_box - box);
b = box;
@@ -6598,7 +6598,6 @@ spans_fallback:
sna_gc(gc)->priv = &data;
if (gc->lineWidth == 0 &&
- gc->lineStyle == LineSolid &&
gc_is_solid(gc, &color)) {
struct sna_fill_op fill;
@@ -6628,12 +6627,19 @@ spans_fallback:
assert(gc->miTranslate);
gc->ops = &sna_gc_ops__tmp;
- miZeroLine(drawable, gc, mode, n, pt);
+ if (gc->lineStyle == LineSolid) {
+ DBG(("%s: miZeroLine (solid fill)\n", __FUNCTION__));
+ miZeroLine(drawable, gc, mode, n, pt);
+ } else {
+ DBG(("%s: miZeroDashLine (solid fill)\n", __FUNCTION__));
+ miZeroDashLine(drawable, gc, mode, n, pt);
+ }
fill.done(data.sna, &fill);
} else {
- /* Note that the WideDash functions alternate between filling
- * using fgPixel and bgPixel so we need to reset state between
- * FillSpans.
+ /* Note that the WideDash functions alternate
+ * between filling using fgPixel and bgPixel
+ * so we need to reset state between FillSpans and
+ * cannot use the fill fast paths.
*/
sna_gc_ops__tmp.FillSpans = sna_fill_spans__gpu;
gc->ops = &sna_gc_ops__tmp;
More information about the xorg-commit
mailing list