diff options
author | Eric Anholt <eric@anholt.net> | 2010-04-12 13:44:31 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2010-04-12 13:46:24 -0700 |
commit | 6d50553e8f70d8f2142efdfd6c90bc27a599d0bc (patch) | |
tree | 93d607b3b5a6d822136e3645b71657c35a5a730b | |
parent | 28024f6c5f351ce4cb3434998d5dbfbeded7c606 (diff) |
Revert "uxa: Try using put_image when copying from a memory buffer."
This reverts commit 27195d7dba0f3ff08b92f3fd916cdf5113cbef58.
put_image often calls copy_area. Which calls put_image. Exhausting of
the stack follows.
-rw-r--r-- | uxa/uxa-accel.c | 51 |
1 files changed, 8 insertions, 43 deletions
diff --git a/uxa/uxa-accel.c b/uxa/uxa-accel.c index 4f7fd41c..cd3e477b 100644 --- a/uxa/uxa-accel.c +++ b/uxa/uxa-accel.c @@ -450,19 +450,18 @@ uxa_copy_n_to_n(DrawablePtr pSrcDrawable, goto fallback; } - if (!uxa_pixmap_is_offscreen(pDstPixmap)) - goto fallback; - - if (uxa_pixmap_is_offscreen(pSrcPixmap)) { - if (!(*uxa_screen->info->prepare_copy) (pSrcPixmap, pDstPixmap, + if (!uxa_pixmap_is_offscreen(pSrcPixmap) || + !uxa_pixmap_is_offscreen(pDstPixmap) || + !(*uxa_screen->info->prepare_copy) (pSrcPixmap, pDstPixmap, reverse ? -1 : 1, upsidedown ? -1 : 1, pGC ? pGC->alu : GXcopy, pGC ? pGC-> - planemask : FB_ALLONES)) + planemask : FB_ALLONES)) { goto fallback; + } - while (nbox--) { + while (nbox--) { (*uxa_screen->info->copy) (pDstPixmap, pbox->x1 + dx + src_off_x, pbox->y1 + dy + src_off_y, @@ -471,44 +470,10 @@ uxa_copy_n_to_n(DrawablePtr pSrcDrawable, pbox->x2 - pbox->x1, pbox->y2 - pbox->y1); pbox++; - } - - (*uxa_screen->info->done_copy) (pDstPixmap); - } else { - int stride, bpp; - char *src; - - if (!uxa_screen->info->put_image) - goto fallback; - - /* Don't bother with under 8bpp, XYPixmaps. */ - bpp = pSrcPixmap->drawable.bitsPerPixel; - if (bpp != pDstDrawable->bitsPerPixel || bpp < 8) - goto fallback; - - /* Only accelerate copies: no rop or planemask. */ - if (pGC && (!UXA_PM_IS_SOLID(pSrcDrawable, pGC->planemask) || pGC->alu != GXcopy)) - goto fallback; - - src = pSrcPixmap->devPrivate.ptr; - stride = pSrcPixmap->devKind; - bpp /= 8; - while (nbox--) { - if (!uxa_screen->info->put_image(pDstPixmap, - pbox->x1 + dst_off_x, - pbox->y1 + dst_off_y, - pbox->x2 - pbox->x1, - pbox->y2 - pbox->y1, - (char *) src + - (pbox->y1 + dy + src_off_y) * stride + - (pbox->x1 + dx + src_off_x) * bpp, - stride)) - goto fallback; - - pbox++; - } } + (*uxa_screen->info->done_copy) (pDstPixmap); + return; fallback: |