xf86-video-intel: 5 commits - src/sna/fb src/sna/sna_accel.c
Chris Wilson
ickle at kemper.freedesktop.org
Tue Jul 17 12:52:38 PDT 2012
src/sna/fb/fbblt.c | 39 ++++++++++++++++++---------------------
src/sna/fb/fbcopy.c | 41 +++++++++++++----------------------------
src/sna/sna_accel.c | 9 +++++----
3 files changed, 36 insertions(+), 53 deletions(-)
New commits:
commit 53ff19f45a3cc4863845c23e8d3c2c2b95e03fd9
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jul 17 19:40:16 2012 +0100
sna: Allow wedged CopyPlane to operate inplace on the destination
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 4321c21..d4b9f37 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -6051,7 +6051,7 @@ fallback:
if (!sna_gc_move_to_cpu(gc, dst, ®ion))
goto out;
if (!sna_drawable_move_region_to_cpu(dst, ®ion,
- MOVE_READ | MOVE_WRITE))
+ drawable_gc_flags(dst, gc, false)))
goto out_gc;
DBG(("%s: fbCopyPlane(%d, %d, %d, %d, %d,%d) %x\n",
commit d4fa4d5494db45b227c9ae7f7a90cd5dfd940027
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jul 17 19:29:32 2012 +0100
sna: Allow inplace copies for wedged CopyArea
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 7229f36..4321c21 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -4584,7 +4584,8 @@ sna_copy_area(DrawablePtr src, DrawablePtr dst, GCPtr gc,
if (!sna_gc_move_to_cpu(gc, dst, ®ion))
goto out;
- if (!sna_drawable_move_region_to_cpu(dst, ®ion, MOVE_READ | MOVE_WRITE))
+ if (!sna_drawable_move_region_to_cpu(dst, ®ion,
+ drawable_gc_flags(dst, gc, false)))
goto out_gc;
RegionTranslate(®ion,
commit 217eeadf81a8cbb43e495e1e937acdd95c703377
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jul 17 19:35:06 2012 +0100
sna: Allow operation inplace to scanout whilst wedged
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 ebf7a23..7229f36 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1048,7 +1048,7 @@ static inline bool pixmap_inplace(struct sna *sna,
if (FORCE_INPLACE)
return FORCE_INPLACE > 0;
- if (wedged(sna))
+ if (wedged(sna) && !priv->pinned)
return false;
if (priv->mapped)
@@ -1455,7 +1455,7 @@ static inline bool region_inplace(struct sna *sna,
if (FORCE_INPLACE)
return FORCE_INPLACE > 0;
- if (wedged(sna))
+ if (wedged(sna) && !priv->pinned)
return false;
if (priv->cpu) {
commit 40ff29480a0dbf458adf1a1b0d3275ad1361530e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jul 17 18:38:49 2012 +0100
sna: Tweak fast blt path
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/fb/fbblt.c b/src/sna/fb/fbblt.c
index 247a331..fd55c85 100644
--- a/src/sna/fb/fbblt.c
+++ b/src/sna/fb/fbblt.c
@@ -276,6 +276,7 @@ fbBlt(FbBits *srcLine, FbStride srcStride, int srcX,
if (alu == GXcopy && pm == FB_ALLONES && ((srcX|dstX|width) & 7) == 0) {
CARD8 *s = (CARD8 *) srcLine;
CARD8 *d = (CARD8 *) dstLine;
+ void *(*func)(void *, const void *, size_t);
int i;
srcStride *= sizeof(FbBits);
@@ -287,28 +288,24 @@ fbBlt(FbBits *srcLine, FbStride srcStride, int srcX,
DBG(("%s fast blt\n", __FUNCTION__));
if ((srcLine < dstLine && srcLine + width > dstLine) ||
- (dstLine < srcLine && dstLine + width > srcLine)) {
- if (!upsidedown)
- for (i = 0; i < height; i++)
- memmove(d + i * dstStride,
- s + i * srcStride,
- width);
- else
- for (i = height - 1; i >= 0; i--)
- memmove(d + i * dstStride,
- s + i * srcStride,
- width);
+ (dstLine < srcLine && dstLine + width > srcLine))
+ func = memmove;
+ else
+ func = memcpy;
+ if (!upsidedown) {
+ if (srcStride == dstStride && srcStride == width) {
+ width *= height;
+ height = 1;
+ }
+ for (i = 0; i < height; i++)
+ func(d + i * dstStride,
+ s + i * srcStride,
+ width);
} else {
- if (!upsidedown)
- for (i = 0; i < height; i++)
- memcpy(d + i * dstStride,
- s + i * srcStride,
- width);
- else
- for (i = height - 1; i >= 0; i--)
- memcpy(d + i * dstStride,
- s + i * srcStride,
- width);
+ for (i = height; i--; )
+ func(d + i * dstStride,
+ s + i * srcStride,
+ width);
}
return;
commit fce69c79c4840e7863d7c382da0d22be90a9f19a
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jul 17 18:28:24 2012 +0100
sna: prefer fbBlt over pixman_blt
It is currently much better optimised through memcpy.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/fb/fbcopy.c b/src/sna/fb/fbcopy.c
index a2b1ded..a486a5b 100644
--- a/src/sna/fb/fbcopy.c
+++ b/src/sna/fb/fbcopy.c
@@ -35,42 +35,27 @@ fbCopyNtoN(DrawablePtr src_drawable, DrawablePtr dst_drawable, GCPtr gc,
{
CARD8 alu = gc ? gc->alu : GXcopy;
FbBits pm = gc ? fb_gc(gc)->pm : FB_ALLONES;
- FbBits *src;
- FbStride srcStride;
- int srcBpp;
+ FbBits *src, *dst;
+ FbStride srcStride, dstStride;
+ int dstBpp, srcBpp;
int srcXoff, srcYoff;
- FbBits *dst;
- FbStride dstStride;
- int dstBpp;
int dstXoff, dstYoff;
fbGetDrawable(src_drawable, src, srcStride, srcBpp, srcXoff, srcYoff);
fbGetDrawable(dst_drawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
- while (nbox--) {
- if (pm == FB_ALLONES && alu == GXcopy && !reverse && !upsidedown) {
- if (!pixman_blt
- ((uint32_t *) src, (uint32_t *) dst, srcStride, dstStride,
- srcBpp, dstBpp, (box->x1 + dx + srcXoff),
- (box->y1 + dy + srcYoff), (box->x1 + dstXoff),
- (box->y1 + dstYoff), (box->x2 - box->x1),
- (box->y2 - box->y1)))
- goto fallback;
- else
- goto next;
- }
-fallback:
- fbBlt(src + (box->y1 + dy + srcYoff) * srcStride,
- srcStride,
- (box->x1 + dx + srcXoff) * srcBpp,
- dst + (box->y1 + dstYoff) * dstStride,
- dstStride,
+ src += (dy + srcYoff) * srcStride;
+ srcXoff += dx;
+ dst += dstYoff * dstStride;
+ do {
+ fbBlt(src + box->y1 * srcStride, srcStride,
+ (box->x1 + srcXoff) * srcBpp,
+ dst + box->y1 * dstStride, dstStride,
(box->x1 + dstXoff) * dstBpp,
(box->x2 - box->x1) * dstBpp,
- (box->y2 - box->y1), alu, pm, dstBpp, reverse, upsidedown);
-next:
- box++;
- }
+ (box->y2 - box->y1),
+ alu, pm, dstBpp, reverse, upsidedown);
+ } while (box++, --nbox);
}
void
More information about the xorg-commit
mailing list