xf86-video-intel: 6 commits - src/sna/sna_accel.c src/sna/sna_composite.c src/sna/sna_dri.c src/sna/sna.h src/sna/sna_trapezoids.c
Chris Wilson
ickle at kemper.freedesktop.org
Thu Jan 17 05:19:01 PST 2013
src/sna/sna.h | 1
src/sna/sna_accel.c | 115 +++++++++++++++--------------------------------
src/sna/sna_composite.c | 2
src/sna/sna_dri.c | 2
src/sna/sna_trapezoids.c | 3 -
5 files changed, 40 insertions(+), 83 deletions(-)
New commits:
commit 1ee00c408d8142cfaf4202393c2364c9ae73cb6e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jan 17 13:09:47 2013 +0000
sna/trapezoids: Fix horizontal offset for inplace operation
Remember that for an inplace operation we are not dealing with an a8
mask, but rather a x8r8g8b8 surface and so need to step accordingly.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index 266983e..2a51598 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -5193,7 +5193,7 @@ trapezoid_span_inplace__x8r8g8b8(CARD8 op,
struct inplace inplace;
inplace.ptr = pixmap->devPrivate.ptr;
- inplace.ptr += dst_y * pixmap->devKind + dst_x;
+ inplace.ptr += dst_y * pixmap->devKind + dst_x * 4;
inplace.stride = pixmap->devKind;
inplace.color = color;
commit 0d749f93ea52161e59da1adca1a22e96ba293551
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jan 17 12:28:18 2013 +0000
sna: Drop the MOVE_WHOLE_HINT for PutImage
It is not as clearly beneficial as for GetImage, as for example toolkits
may only push the shadows around a window.
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 e485248..1e6289d 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -3403,8 +3403,6 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
int x, int y, int w, int h, char *bits, int stride)
{
PixmapPtr pixmap = get_drawable_pixmap(drawable);
- struct sna *sna = to_sna_from_pixmap(pixmap);
- struct sna_pixmap *priv = sna_pixmap(pixmap);
BoxRec *box;
int16_t dx, dy;
int n;
@@ -3414,21 +3412,12 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
if (gc->alu != GXcopy)
return false;
- if (priv) {
- unsigned flags = MOVE_WRITE;
- if (w == pixmap->drawable.width) {
- flags |= MOVE_WHOLE_HINT;
- if (h != pixmap->drawable.height)
- flags |= MOVE_READ;
- }
+ if (drawable->depth < 8)
+ return false;
- if (!sna_drawable_move_region_to_cpu(&pixmap->drawable,
- region, flags))
- return false;
- } else {
- if (drawable->depth < 8)
- return false;
- }
+ if (!sna_drawable_move_region_to_cpu(&pixmap->drawable,
+ region, MOVE_WRITE))
+ return false;
get_drawable_deltas(drawable, pixmap, &dx, &dy);
x += dx + drawable->x;
commit dc643ef753bcfb69685f1eb10828d0c8f830c30e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jan 17 12:27:55 2013 +0000
sna: Apply read-only synchronization hints for move-to-cpu
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 0294170..e485248 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1607,7 +1607,8 @@ skip_inplace_map:
if (priv->mapped) {
assert(!priv->shm);
- pixmap->devPrivate.ptr = NULL;
+ pixmap->devPrivate.ptr = PTR(priv->ptr);
+ pixmap->devKind = priv->stride;
priv->mapped = false;
}
@@ -1637,7 +1638,8 @@ skip_inplace_map:
priv->clear = false;
}
- kgem_bo_sync__cpu_full(&sna->kgem, priv->gpu_bo, flags & MOVE_WRITE);
+ kgem_bo_sync__cpu_full(&sna->kgem,
+ priv->gpu_bo, flags & MOVE_WRITE);
assert_pixmap_damage(pixmap);
DBG(("%s: operate inplace (CPU)\n", __FUNCTION__));
return true;
@@ -1729,11 +1731,11 @@ skip_inplace_map:
done:
if (flags & MOVE_WRITE) {
+ assert(DAMAGE_IS_ALL(priv->cpu_damage));
priv->source_count = SOURCE_BIAS;
assert(priv->gpu_bo == NULL || priv->gpu_bo->proxy == NULL);
if (priv->gpu_bo && priv->gpu_bo->domain != DOMAIN_GPU) {
DBG(("%s: discarding inactive GPU bo\n", __FUNCTION__));
- assert(DAMAGE_IS_ALL(priv->cpu_damage));
sna_pixmap_free_gpu(sna, priv);
}
}
@@ -1741,7 +1743,8 @@ done:
if (priv->cpu_bo) {
if ((flags & MOVE_ASYNC_HINT) == 0) {
DBG(("%s: syncing CPU bo\n", __FUNCTION__));
- kgem_bo_sync__cpu(&sna->kgem, priv->cpu_bo);
+ kgem_bo_sync__cpu_full(&sna->kgem,
+ priv->cpu_bo, flags & MOVE_WRITE);
}
if (flags & MOVE_WRITE) {
DBG(("%s: discarding GPU bo in favour of CPU bo\n", __FUNCTION__));
@@ -2263,7 +2266,8 @@ out:
}
if ((flags & MOVE_ASYNC_HINT) == 0 && priv->cpu_bo) {
DBG(("%s: syncing cpu bo\n", __FUNCTION__));
- kgem_bo_sync__cpu(&sna->kgem, priv->cpu_bo);
+ kgem_bo_sync__cpu_full(&sna->kgem,
+ priv->cpu_bo, flags & MOVE_WRITE);
assert(!kgem_bo_is_busy(priv->cpu_bo));
}
priv->cpu = (flags & MOVE_ASYNC_HINT) == 0;
commit 18035a21e147788bea03ab2175ca03ae951701ce
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jan 17 11:52:10 2013 +0000
sna: Remove the confusion of the pixmap->undamaged
This was to track a pixmap that had been used for migration (i.e had in
the past been used for mixed rendering). It is no longer used so remove
it.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna.h b/src/sna/sna.h
index 112af35..8304f42 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -130,7 +130,6 @@ struct sna_pixmap {
uint8_t mapped :1;
uint8_t shm :1;
uint8_t clear :1;
- uint8_t undamaged :1;
uint8_t header :1;
uint8_t cpu :1;
};
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 70dedd1..0294170 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -530,7 +530,6 @@ static inline uint32_t default_tiling(PixmapPtr pixmap,
DBG(("%s: entire source is damaged, using Y-tiling\n",
__FUNCTION__));
sna_damage_destroy(&priv->gpu_damage);
- priv->undamaged = false;
return I915_TILING_Y;
}
@@ -1532,7 +1531,6 @@ _sna_pixmap_move_to_cpu(PixmapPtr pixmap, unsigned int flags)
pixmap->drawable.width,
pixmap->drawable.height);
sna_damage_destroy(&priv->cpu_damage);
- priv->undamaged = false;
priv->clear = false;
priv->cpu = false;
list_del(&priv->list);
@@ -1547,6 +1545,7 @@ _sna_pixmap_move_to_cpu(PixmapPtr pixmap, unsigned int flags)
skip_inplace_map:
sna_damage_destroy(&priv->gpu_damage);
+ priv->clear = false;
if (priv->cpu_bo && !priv->cpu_bo->flush &&
__kgem_bo_is_busy(&sna->kgem, priv->cpu_bo)) {
DBG(("%s: discarding busy CPU bo\n", __FUNCTION__));
@@ -1554,7 +1553,6 @@ skip_inplace_map:
assert(priv->gpu_bo == NULL || priv->gpu_damage == NULL);
sna_damage_destroy(&priv->cpu_damage);
- priv->undamaged = false;
sna_pixmap_free_gpu(sna, priv);
sna_pixmap_free_cpu(sna, priv);
@@ -1596,7 +1594,6 @@ skip_inplace_map:
sna_damage_destroy(&priv->cpu_damage);
sna_pixmap_free_cpu(sna, priv);
list_del(&priv->list);
- priv->undamaged = false;
priv->clear = false;
}
@@ -1637,7 +1634,6 @@ skip_inplace_map:
sna_damage_destroy(&priv->cpu_damage);
sna_pixmap_free_cpu(sna, priv);
list_del(&priv->list);
- priv->undamaged = false;
priv->clear = false;
}
@@ -1648,7 +1644,8 @@ skip_inplace_map:
}
}
- if (priv->clear && priv->cpu_bo && !priv->cpu_bo->flush &&
+ if (((flags & MOVE_READ) == 0 || priv->clear) &&
+ priv->cpu_bo && !priv->cpu_bo->flush &&
__kgem_bo_is_busy(&sna->kgem, priv->cpu_bo)) {
assert(!priv->shm);
sna_pixmap_free_cpu(sna, priv);
@@ -1685,7 +1682,7 @@ skip_inplace_map:
pixmap->drawable.width,
pixmap->drawable.height);
sna_pixmap_free_gpu(sna, priv);
- priv->undamaged = false;
+ assert(priv->gpu_damage == NULL);
priv->clear = false;
}
@@ -1715,7 +1712,6 @@ skip_inplace_map:
__sna_damage_destroy(DAMAGE_PTR(priv->gpu_damage));
priv->gpu_damage = NULL;
- priv->undamaged = true;
}
if (flags & MOVE_WRITE || priv->create & KGEM_CAN_CREATE_LARGE) {
@@ -1724,7 +1720,6 @@ skip_inplace_map:
pixmap->drawable.width,
pixmap->drawable.height);
sna_pixmap_free_gpu(sna, priv);
- priv->undamaged = false;
if (priv->flush) {
assert(!priv->shm);
@@ -1740,7 +1735,6 @@ done:
DBG(("%s: discarding inactive GPU bo\n", __FUNCTION__));
assert(DAMAGE_IS_ALL(priv->cpu_damage));
sna_pixmap_free_gpu(sna, priv);
- priv->undamaged = false;
}
}
@@ -1752,7 +1746,6 @@ done:
if (flags & MOVE_WRITE) {
DBG(("%s: discarding GPU bo in favour of CPU bo\n", __FUNCTION__));
sna_pixmap_free_gpu(sna, priv);
- priv->undamaged = false;
}
}
priv->cpu = (flags & MOVE_ASYNC_HINT) == 0;
@@ -1892,7 +1885,6 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
__FUNCTION__, pixmap->drawable.serialNumber));
sna_damage_destroy(&priv->gpu_damage);
- priv->undamaged = false;
if (flags & MOVE_WRITE)
sna_pixmap_free_gpu(sna, priv);
@@ -1953,7 +1945,6 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
DBG(("%s: replaced entire pixmap, destroying CPU shadow\n",
__FUNCTION__));
sna_damage_destroy(&priv->cpu_damage);
- priv->undamaged = false;
list_del(&priv->list);
} else
sna_damage_subtract(&priv->cpu_damage,
@@ -1992,7 +1983,6 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
sna_damage_all(&priv->gpu_damage,
pixmap->drawable.width,
pixmap->drawable.height);
- priv->undamaged = false;
sna_pixmap_free_cpu(sna, priv);
}
}
@@ -2071,7 +2061,6 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
box, n);
}
sna_damage_destroy(&priv->gpu_damage);
- priv->undamaged = true;
}
if (priv->gpu_damage &&
@@ -2183,7 +2172,6 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
}
sna_damage_destroy(&priv->gpu_damage);
- priv->undamaged = true;
} else if (DAMAGE_IS_ALL(priv->gpu_damage) ||
sna_damage_contains_box__no_reduce(priv->gpu_damage,
&r->extents)) {
@@ -2208,7 +2196,6 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
box, n);
sna_damage_subtract(&priv->gpu_damage, r);
- priv->undamaged = true;
} else {
RegionRec need;
@@ -2235,7 +2222,6 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
box, n);
sna_damage_subtract(&priv->gpu_damage, r);
- priv->undamaged = true;
RegionUninit(&need);
}
}
@@ -2259,7 +2245,6 @@ done:
__FUNCTION__));
sna_pixmap_free_gpu(sna, priv);
}
- priv->undamaged = false;
}
if (priv->flush) {
assert(!priv->shm);
@@ -2410,7 +2395,6 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
pixmap->drawable.width,
pixmap->drawable.height)) {
sna_damage_destroy(&priv->cpu_damage);
- priv->undamaged = false;
list_del(&priv->list);
goto done;
}
@@ -2422,7 +2406,6 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
assert_pixmap_damage(pixmap);
if (priv->cpu_damage == NULL) {
- priv->undamaged = false;
list_del(&priv->list);
return sna_pixmap_move_to_gpu(pixmap, flags);
}
@@ -2504,7 +2487,6 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
sna_damage_destroy(&priv->cpu_damage);
list_del(&priv->list);
- priv->undamaged = true;
} else if (DAMAGE_IS_ALL(priv->cpu_damage) ||
sna_damage_contains_box__no_reduce(priv->cpu_damage, box)) {
bool ok = false;
@@ -2537,7 +2519,6 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
return false;
sna_damage_subtract(&priv->cpu_damage, &r);
- priv->undamaged = true;
} else if (sna_damage_intersect(priv->cpu_damage, &r, &i)) {
int n = REGION_NUM_RECTS(&i);
bool ok;
@@ -2573,7 +2554,6 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
return false;
sna_damage_subtract(&priv->cpu_damage, &r);
- priv->undamaged = true;
RegionUninit(&i);
}
@@ -2594,7 +2574,6 @@ done:
sna_damage_all(&priv->gpu_damage,
pixmap->drawable.width,
pixmap->drawable.height);
- priv->undamaged = false;
}
}
@@ -2731,7 +2710,6 @@ sna_drawable_use_bo(DrawablePtr drawable, unsigned flags, const BoxRec *box,
sna_damage_subtract(&priv->cpu_damage, ®ion);
if (priv->cpu_damage == NULL) {
list_del(&priv->list);
- priv->undamaged = false;
priv->cpu = false;
}
}
@@ -2824,7 +2802,6 @@ done:
pixmap->drawable.height)) {
sna_damage_destroy(&priv->cpu_damage);
list_del(&priv->list);
- priv->undamaged = false;
*damage = NULL;
} else
*damage = &priv->gpu_damage;
@@ -3049,7 +3026,6 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
DBG(("%s: already all-damaged\n", __FUNCTION__));
sna_damage_destroy(&priv->cpu_damage);
list_del(&priv->list);
- priv->undamaged = false;
assert(priv->cpu == false || IS_CPU_MAP(priv->gpu_bo->map));
goto active;
}
@@ -3182,7 +3158,6 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
__sna_damage_destroy(DAMAGE_PTR(priv->cpu_damage));
priv->cpu_damage = NULL;
- priv->undamaged = true;
if (priv->shm) {
assert(!priv->flush);
@@ -3207,10 +3182,8 @@ done:
sna_damage_reduce_all(&priv->gpu_damage,
pixmap->drawable.width,
pixmap->drawable.height);
- if (DAMAGE_IS_ALL(priv->gpu_damage)) {
- priv->undamaged = false;
+ if (DAMAGE_IS_ALL(priv->gpu_damage))
sna_pixmap_free_cpu(sna, priv);
- }
active:
if (flags & MOVE_WRITE)
@@ -3428,8 +3401,6 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
PixmapPtr pixmap = get_drawable_pixmap(drawable);
struct sna *sna = to_sna_from_pixmap(pixmap);
struct sna_pixmap *priv = sna_pixmap(pixmap);
- char *dst_bits;
- int dst_stride;
BoxRec *box;
int16_t dx, dy;
int n;
@@ -3461,9 +3432,6 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
DBG(("%s: upload(%d, %d, %d, %d)\n", __FUNCTION__, x, y, w, h));
- dst_stride = pixmap->devKind;
- dst_bits = pixmap->devPrivate.ptr;
-
/* Region is pre-clipped and translated into pixmap space */
box = REGION_RECTS(region);
n = REGION_NUM_RECTS(region);
@@ -3487,9 +3455,9 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
assert(box->x2 - x <= w);
assert(box->y2 - y <= h);
- memcpy_blt(bits, dst_bits,
+ memcpy_blt(bits, pixmap->devPrivate.ptr,
pixmap->drawable.bitsPerPixel,
- stride, dst_stride,
+ stride, pixmap->devKind,
box->x1 - x, box->y1 - y,
box->x1, box->y1,
box->x2 - box->x1, box->y2 - box->y1);
@@ -4545,7 +4513,6 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
dst_pixmap->drawable.width,
dst_pixmap->drawable.height);
list_del(&dst_priv->list);
- dst_priv->undamaged = false;
} else
sna_damage_add(&dst_priv->gpu_damage,
region);
@@ -9340,7 +9307,6 @@ sna_poly_fill_rect_blt(DrawablePtr drawable,
pixmap->drawable.height);
sna_damage_destroy(&priv->cpu_damage);
list_del(&priv->list);
- priv->undamaged = false;
priv->clear = true;
priv->clear_color = gc->alu == GXcopy ? pixel : 0;
@@ -11801,7 +11767,6 @@ sna_poly_fill_rect(DrawablePtr draw, GCPtr gc, int n, xRectangle *rect)
sna_damage_all(&priv->gpu_damage,
pixmap->drawable.width,
pixmap->drawable.height);
- priv->undamaged = false;
}
}
if (priv->cpu_damage == NULL) {
diff --git a/src/sna/sna_composite.c b/src/sna/sna_composite.c
index fd5acf9..7898b2c 100644
--- a/src/sna/sna_composite.c
+++ b/src/sna/sna_composite.c
@@ -849,7 +849,6 @@ sna_composite_rectangles(CARD8 op,
sna_damage_all(&priv->gpu_damage,
pixmap->drawable.width,
pixmap->drawable.height);
- priv->undamaged = false;
}
}
if (priv->cpu_damage == NULL) {
@@ -887,7 +886,6 @@ sna_composite_rectangles(CARD8 op,
pixmap->drawable.height);
sna_damage_destroy(damage == &priv->gpu_damage ?
&priv->cpu_damage : &priv->gpu_damage);
- priv->undamaged = false;
}
if (op <= PictOpSrc && bo == priv->gpu_bo) {
diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c
index 35457ac..e972537 100644
--- a/src/sna/sna_dri.c
+++ b/src/sna/sna_dri.c
@@ -457,7 +457,6 @@ damage_all:
pixmap->drawable.width,
pixmap->drawable.height);
sna_damage_destroy(&priv->cpu_damage);
- priv->undamaged = false;
} else {
sna_damage_subtract(&priv->cpu_damage, region);
if (priv->cpu_damage == NULL)
@@ -493,7 +492,6 @@ static void set_bo(PixmapPtr pixmap, struct kgem_bo *bo)
sna_damage_destroy(&priv->cpu_damage);
list_del(&priv->list);
priv->cpu = false;
- priv->undamaged = false;
assert(bo->refcnt);
if (priv->gpu_bo != bo) {
diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index 95e7d4f..266983e 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -5988,7 +5988,6 @@ static void mark_damaged(PixmapPtr pixmap, struct sna_pixmap *priv,
pixmap->drawable.width,
pixmap->drawable.height);
list_del(&priv->list);
- priv->undamaged = false;
} else {
sna_damage_add_box(&priv->gpu_damage, box);
sna_damage_subtract_box(&priv->cpu_damage, box);
commit 46141d277f326ae78f7b0e927a500e0eb1987f1b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jan 17 10:16:24 2013 +0000
sna: Consider fill style for XPolyRectangle
The rectangle outline is not always solid...
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 8c7daa2..70dedd1 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -8481,6 +8481,7 @@ sna_poly_rectangle_extents(DrawablePtr drawable, GCPtr gc,
Box32Rec box;
int extra = gc->lineWidth >> 1;
bool clipped;
+ bool zero = false;
if (n == 0)
return 0;
@@ -8489,9 +8490,13 @@ sna_poly_rectangle_extents(DrawablePtr drawable, GCPtr gc,
box.y1 = r->y;
box.x2 = box.x1 + r->width;
box.y2 = box.y1 + r->height;
+ zero |= (r->width | r->height) == 0;
- while (--n)
- box32_add_rect(&box, ++r);
+ while (--n) {
+ r++;
+ zero |= (r->width | r->height) == 0;
+ box32_add_rect(&box, r);
+ }
box.x2++;
box.y2++;
@@ -8501,13 +8506,15 @@ sna_poly_rectangle_extents(DrawablePtr drawable, GCPtr gc,
box.x2 += extra;
box.y1 -= extra;
box.y2 += extra;
- }
+ zero = !zero;
+ } else
+ zero = true;
clipped = box32_trim_and_translate(&box, drawable, gc);
if (!box32_to_box16(&box, out))
return 0;
- return 1 | clipped << 1;
+ return 1 | clipped << 1 | zero << 2;
}
static bool
@@ -8546,7 +8553,7 @@ zero:
xRectangle rr = *r++;
if ((rr.width | rr.height) == 0)
- continue;
+ continue; /* XXX -> PolyLine */
DBG(("%s - zero : r[%d] = (%d, %d) x (%d, %d)\n", __FUNCTION__,
n, rr.x, rr.y, rr.width, rr.height));
@@ -8615,7 +8622,7 @@ zero_clipped:
n, rr.x, rr.y, rr.width, rr.height));
if ((rr.width | rr.height) == 0)
- continue;
+ continue; /* XXX -> PolyLine */
rr.x += drawable->x;
rr.y += drawable->y;
@@ -8679,7 +8686,7 @@ zero_clipped:
n, rr.x, rr.y, rr.width, rr.height));
if ((rr.width | rr.height) == 0)
- continue;
+ continue; /* XXX -> PolyLine */
rr.x += drawable->x;
rr.y += drawable->y;
@@ -8759,7 +8766,7 @@ wide_clipped:
int count;
if ((rr.width | rr.height) == 0)
- continue;
+ continue; /* XXX -> PolyLine */
rr.x += drawable->x;
rr.y += drawable->y;
@@ -8924,7 +8931,7 @@ wide:
xRectangle rr = *r++;
if ((rr.width | rr.height) == 0)
- continue;
+ continue; /* XXX -> PolyLine */
rr.x += dx;
rr.y += dy;
@@ -9022,8 +9029,9 @@ sna_poly_rectangle(DrawablePtr drawable, GCPtr gc, int n, xRectangle *r)
goto fallback;
}
- DBG(("%s: line=%d [%d], join=%d [%d], mask=%lu [%d]\n",
+ DBG(("%s: fill=_%d [%d], line=%d [%d], join=%d [%d], mask=%lu [%d]\n",
__FUNCTION__,
+ gc->fillStyle, gc->fillStyle == FillSolid,
gc->lineStyle, gc->lineStyle == LineSolid,
gc->joinStyle, gc->joinStyle == JoinMiter,
gc->planemask, PM_IS_SOLID(drawable, gc->planemask)));
@@ -9031,7 +9039,7 @@ sna_poly_rectangle(DrawablePtr drawable, GCPtr gc, int n, xRectangle *r)
if (!PM_IS_SOLID(drawable, gc->planemask))
goto fallback;
- if (gc->lineStyle == LineSolid && gc->joinStyle == JoinMiter) {
+ if (flags & 4 && gc->fillStyle == FillSolid && gc->lineStyle == LineSolid && gc->joinStyle == JoinMiter) {
DBG(("%s: trying blt solid fill [%08lx] paths\n",
__FUNCTION__, gc->fgPixel));
if ((bo = sna_drawable_use_bo(drawable, PREFER_GPU,
commit d5c8d38afaba04281157bafe212e93f010ae00f5
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jan 17 10:10:54 2013 +0000
sna: Refactor to remove a goto from sna_put_zpixmap_blt()
The complexity of the function has been moved to move-to-cpu so we can
take further advantage of the simplified logic in put_zpixmap to clean
up the code by removing an unwanted goto.
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 4bb50cd..8c7daa2 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -3428,7 +3428,6 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
PixmapPtr pixmap = get_drawable_pixmap(drawable);
struct sna *sna = to_sna_from_pixmap(pixmap);
struct sna_pixmap *priv = sna_pixmap(pixmap);
- unsigned flags;
char *dst_bits;
int dst_stride;
BoxRec *box;
@@ -3440,24 +3439,22 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
if (gc->alu != GXcopy)
return false;
- if (!priv) {
+ if (priv) {
+ unsigned flags = MOVE_WRITE;
+ if (w == pixmap->drawable.width) {
+ flags |= MOVE_WHOLE_HINT;
+ if (h != pixmap->drawable.height)
+ flags |= MOVE_READ;
+ }
+
+ if (!sna_drawable_move_region_to_cpu(&pixmap->drawable,
+ region, flags))
+ return false;
+ } else {
if (drawable->depth < 8)
return false;
-
- goto blt;
- }
-
- flags = MOVE_WRITE;
- if (w == pixmap->drawable.width) {
- flags |= MOVE_WHOLE_HINT;
- if (h != pixmap->drawable.height)
- flags |= MOVE_READ;
}
- if (!sna_drawable_move_region_to_cpu(&pixmap->drawable, region, flags))
- return false;
-
-blt:
get_drawable_deltas(drawable, pixmap, &dx, &dy);
x += dx + drawable->x;
y += dy + drawable->y;
More information about the xorg-commit
mailing list