xf86-video-intel: 2 commits - src/sna/sna_accel.c
Chris Wilson
ickle at kemper.freedesktop.org
Sun Apr 8 06:07:46 PDT 2012
src/sna/sna_accel.c | 120 +++++++++++++++++++++++++---------------------------
1 file changed, 59 insertions(+), 61 deletions(-)
New commits:
commit c5c01c13badeb7c2ead0c848b746d8d474277a77
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Apr 8 13:51:13 2012 +0100
sna: Remove the duplicated check for use-bo? in PolySegments
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 61710ad..8f02380 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -7458,6 +7458,13 @@ sna_poly_segment(DrawablePtr drawable, GCPtr gc, int n, xSegment *seg)
data.flags & 4));
if (!PM_IS_SOLID(drawable, gc->planemask))
goto fallback;
+
+ data.bo = sna_drawable_use_bo(drawable,
+ &data.region.extents,
+ &data.damage);
+ if (data.bo == NULL)
+ goto fallback;
+
if (gc->lineStyle != LineSolid || gc->lineWidth > 1)
goto spans_fallback;
if (gc_is_solid(gc, &color)) {
@@ -7465,10 +7472,7 @@ sna_poly_segment(DrawablePtr drawable, GCPtr gc, int n, xSegment *seg)
__FUNCTION__, (unsigned)color, data.flags));
if (data.flags & 4) {
- if ((data.bo = sna_drawable_use_bo(drawable,
- &data.region.extents,
- &data.damage)) &&
- sna_poly_segment_blt(drawable,
+ if (sna_poly_segment_blt(drawable,
data.bo, data.damage,
gc, color, n, seg,
&data.region.extents,
@@ -7476,9 +7480,6 @@ sna_poly_segment(DrawablePtr drawable, GCPtr gc, int n, xSegment *seg)
return;
} else {
if (use_zero_spans(drawable, gc, &data.region.extents) &&
- (data.bo = sna_drawable_use_bo(drawable,
- &data.region.extents,
- &data.damage)) &&
sna_poly_zero_segment_blt(drawable,
data.bo, data.damage,
gc, n, seg,
@@ -7488,70 +7489,67 @@ sna_poly_segment(DrawablePtr drawable, GCPtr gc, int n, xSegment *seg)
}
} else if (data.flags & 4) {
/* Try converting these to a set of rectangles instead */
- if ((data.bo = sna_drawable_use_bo(drawable, &data.region.extents, &data.damage))) {
- xRectangle *rect;
- int i;
-
- DBG(("%s: converting to rectagnles\n", __FUNCTION__));
+ xRectangle *rect;
+ int i;
- rect = malloc (n * sizeof (xRectangle));
- if (rect == NULL)
- return;
+ DBG(("%s: converting to rectagnles\n", __FUNCTION__));
- for (i = 0; i < n; i++) {
- if (seg[i].x1 < seg[i].x2) {
- rect[i].x = seg[i].x1;
- rect[i].width = seg[i].x2 - seg[i].x1 + 1;
- } else if (seg[i].x1 > seg[i].x2) {
- rect[i].x = seg[i].x2;
- rect[i].width = seg[i].x1 - seg[i].x2 + 1;
- } else {
- rect[i].x = seg[i].x1;
- rect[i].width = 1;
- }
- if (seg[i].y1 < seg[i].y2) {
- rect[i].y = seg[i].y1;
- rect[i].height = seg[i].y2 - seg[i].y1 + 1;
- } else if (seg[i].x1 > seg[i].y2) {
- rect[i].y = seg[i].y2;
- rect[i].height = seg[i].y1 - seg[i].y2 + 1;
- } else {
- rect[i].y = seg[i].y1;
- rect[i].height = 1;
- }
+ rect = malloc (n * sizeof (xRectangle));
+ if (rect == NULL)
+ return;
- /* don't paint last pixel */
- if (gc->capStyle == CapNotLast) {
- if (seg[i].x1 == seg[i].x2)
- rect[i].height--;
- else
- rect[i].width--;
- }
+ for (i = 0; i < n; i++) {
+ if (seg[i].x1 < seg[i].x2) {
+ rect[i].x = seg[i].x1;
+ rect[i].width = seg[i].x2 - seg[i].x1 + 1;
+ } else if (seg[i].x1 > seg[i].x2) {
+ rect[i].x = seg[i].x2;
+ rect[i].width = seg[i].x1 - seg[i].x2 + 1;
+ } else {
+ rect[i].x = seg[i].x1;
+ rect[i].width = 1;
}
-
- if (gc->fillStyle == FillTiled) {
- i = sna_poly_fill_rect_tiled_blt(drawable,
- data.bo, data.damage,
- gc, n, rect,
- &data.region.extents,
- data.flags & 2);
+ if (seg[i].y1 < seg[i].y2) {
+ rect[i].y = seg[i].y1;
+ rect[i].height = seg[i].y2 - seg[i].y1 + 1;
+ } else if (seg[i].x1 > seg[i].y2) {
+ rect[i].y = seg[i].y2;
+ rect[i].height = seg[i].y1 - seg[i].y2 + 1;
} else {
- i = sna_poly_fill_rect_stippled_blt(drawable,
- data.bo, data.damage,
- gc, n, rect,
- &data.region.extents,
- data.flags & 2);
+ rect[i].y = seg[i].y1;
+ rect[i].height = 1;
}
- free (rect);
- if (i)
- return;
+ /* don't paint last pixel */
+ if (gc->capStyle == CapNotLast) {
+ if (seg[i].x1 == seg[i].x2)
+ rect[i].height--;
+ else
+ rect[i].width--;
+ }
+ }
+
+ if (gc->fillStyle == FillTiled) {
+ i = sna_poly_fill_rect_tiled_blt(drawable,
+ data.bo, data.damage,
+ gc, n, rect,
+ &data.region.extents,
+ data.flags & 2);
+ } else {
+ i = sna_poly_fill_rect_stippled_blt(drawable,
+ data.bo, data.damage,
+ gc, n, rect,
+ &data.region.extents,
+ data.flags & 2);
}
+ free (rect);
+
+ if (i)
+ return;
}
spans_fallback:
- if (use_wide_spans(drawable, gc, &data.region.extents) &&
- (data.bo = sna_drawable_use_bo(drawable, &data.region.extents, &data.damage))) {
+ if (use_wide_spans(drawable, gc, &data.region.extents)) {
void (*line)(DrawablePtr, GCPtr, int, int, DDXPointPtr);
int i;
commit f5deea4f60433ee2b0c2d02fba682fff8b7829e8
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Apr 8 13:39:47 2012 +0100
sna: Correct partial-write flag for PolySegments fallback
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 6afd582..61710ad 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -7642,7 +7642,7 @@ fallback:
goto out;
if (!sna_drawable_move_region_to_cpu(drawable, &data.region,
drawable_gc_flags(drawable, gc,
- !(data.flags & 4 && n > 1))))
+ !(data.flags & 4 && n == 1))))
goto out;
/* Install FillSpans in case we hit a fallback path in fbPolySegment */
More information about the xorg-commit
mailing list