From 65c5605c9693c8d30e597ac029be936495f23927 Mon Sep 17 00:00:00 2001 From: Zhigang Gong Date: Sun, 15 Apr 2012 23:16:51 +0800 Subject: [PATCH] glamor_getspans: Reuse glamor_download_sub_pixmap. Signed-off-by: Zhigang Gong --- glamor/glamor_getspans.c | 66 +++++----------------------------------- 1 file changed, 8 insertions(+), 58 deletions(-) diff --git a/glamor/glamor_getspans.c b/glamor/glamor_getspans.c index bd6a5ec19..22e2b7c6b 100644 --- a/glamor/glamor_getspans.c +++ b/glamor/glamor_getspans.c @@ -34,74 +34,26 @@ _glamor_get_spans(DrawablePtr drawable, Bool fallback) { PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - GLenum format, type; - int no_alpha, revert; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(drawable->pScreen); glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); - glamor_gl_dispatch *dispatch; - glamor_pixmap_fbo *temp_fbo = NULL; int i; uint8_t *readpixels_dst = (uint8_t *) dst; + void *data; int x_off, y_off; Bool ret = FALSE; - int swap_rb; - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { - glamor_fallback("pixmap has no fbo.\n"); + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) goto fail; - } - - if (glamor_get_tex_format_type_from_pixmap(pixmap, - &format, - &type, &no_alpha, - &revert, &swap_rb, 0)) { - glamor_fallback("unknown depth. %d \n", drawable->depth); - goto fail; - } - - if (revert > REVERT_NORMAL) - goto fail; - - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - glamor_validate_pixmap(pixmap); - - if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 - && ( swap_rb != SWAP_NONE_DOWNLOADING - || revert != REVERT_NONE)) { - - /* XXX prepare whole pixmap is not efficient. */ - temp_fbo = - glamor_es2_pixmap_read_prepare(pixmap, 0, 0, pixmap->drawable.width, pixmap->drawable.height, format, - type, no_alpha, - revert, swap_rb); - if (temp_fbo == NULL) - goto fail; - - } glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); - dispatch = glamor_get_dispatch(glamor_priv); for (i = 0; i < count; i++) { - if (glamor_priv->yInverted) { - dispatch->glReadPixels(points[i].x + x_off, - (points[i].y + y_off), - widths[i], 1, format, - type, readpixels_dst); - } else { - dispatch->glReadPixels(points[i].x + x_off, - pixmap->drawable.height - - 1 - (points[i].y + y_off), - widths[i], 1, format, - type, readpixels_dst); - } - readpixels_dst += - PixmapBytePad(widths[i], drawable->depth); + data = glamor_download_sub_pixmap_to_cpu(pixmap, points[i].x + x_off, + points[i].y + y_off, widths[i], 1, + PixmapBytePad(widths[i], drawable->depth), + readpixels_dst, 0, GLAMOR_ACCESS_RO); + assert(data == readpixels_dst); + readpixels_dst += PixmapBytePad(widths[i], drawable->depth); } - glamor_put_dispatch(glamor_priv); - if (temp_fbo) - glamor_destroy_fbo(temp_fbo); ret = TRUE; goto done; @@ -112,8 +64,6 @@ fail: goto done; ret = TRUE; - glamor_fallback("from %p (%c)\n", drawable, - glamor_get_drawable_location(drawable)); if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RO)) { fbGetSpans(drawable, wmax, points, widths, count, dst); glamor_finish_access(drawable, GLAMOR_ACCESS_RO);