xf86-video-intel: src/sna/sna_accel.c src/sna/sna.h
Chris Wilson
ickle at kemper.freedesktop.org
Thu May 3 15:57:41 PDT 2012
src/sna/sna.h | 11 +----------
src/sna/sna_accel.c | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 38 insertions(+), 10 deletions(-)
New commits:
commit 079b491ced2c9c3c73d938ef6025d040016ad3a7
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu May 3 23:52:17 2012 +0100
sna: Ensure drawables are clipped against the pixmap before migration
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna.h b/src/sna/sna.h
index 424738a..956a038 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -446,16 +446,7 @@ bool must_check sna_drawable_move_region_to_cpu(DrawablePtr drawable,
RegionPtr region,
unsigned flags);
-static inline bool must_check
-sna_drawable_move_to_cpu(DrawablePtr drawable, unsigned flags)
-{
- RegionRec region;
-
- pixman_region_init_rect(®ion,
- drawable->x, drawable->y,
- drawable->width, drawable->height);
- return sna_drawable_move_region_to_cpu(drawable, ®ion, flags);
-}
+bool must_check sna_drawable_move_to_cpu(DrawablePtr drawable, unsigned flags);
static inline bool must_check
sna_drawable_move_to_gpu(DrawablePtr drawable, unsigned flags)
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 6430de8..1bc34dc 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1697,6 +1697,43 @@ out:
return true;
}
+bool
+sna_drawable_move_to_cpu(DrawablePtr drawable, unsigned flags)
+{
+ RegionRec region;
+ PixmapPtr pixmap;
+ int16_t dx, dy;
+
+ if (drawable->type == DRAWABLE_PIXMAP)
+ return sna_pixmap_move_to_cpu((PixmapPtr)drawable, flags);
+
+ pixmap = get_window_pixmap((WindowPtr)drawable);
+ get_drawable_deltas(drawable, pixmap, &dx, &dy);
+
+ DBG(("%s: (%d, %d)x(%d, %d) + (%d, %d), flags=%x\n",
+ __FUNCTION__,
+ drawable->x, drawable->y,
+ drawable->width, drawable->height,
+ dx, dy, flags));
+
+ region.extents.x1 = drawable->x + dx;
+ region.extents.y1 = drawable->y + dy;
+ region.extents.x2 = region.extents.x1 + drawable->width;
+ region.extents.y2 = region.extents.y1 + drawable->height;
+ region.data = NULL;
+
+ if (region.extents.x1 < 0)
+ region.extents.x1 = 0;
+ if (region.extents.y1 < 0)
+ region.extents.y1 = 0;
+ if (region.extents.x2 > pixmap->drawable.width)
+ region.extents.x2 = pixmap->drawable.width;
+ if (region.extents.y2 > pixmap->drawable.height)
+ region.extents.y2 = pixmap->drawable.height;
+
+ return sna_drawable_move_region_to_cpu(&pixmap->drawable, ®ion, flags);
+}
+
static bool alu_overwrites(uint8_t alu)
{
switch (alu) {
More information about the xorg-commit
mailing list