void vivante_unaccel_GetSpans(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart) { vivante_prepare_drawable(pDrawable, ACCESS_RO); fbGetSpans(pDrawable, wMax, ppt, pwidth, nspans, pdstStart); vivante_finish_drawable(pDrawable, ACCESS_RO); }
static void radeon_glamor_get_spans(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart) { ScrnInfoPtr scrn = xf86ScreenToScrn(pDrawable->pScreen); PixmapPtr pixmap = get_drawable_pixmap(pDrawable); struct radeon_pixmap *priv = radeon_get_pixmap_private(pixmap); if (radeon_glamor_prepare_access_cpu_ro(scrn, pixmap, priv)) { fbGetSpans(pDrawable, wMax, ppt, pwidth, nspans, pdstStart); radeon_glamor_finish_access_cpu(pixmap); } }
void uxa_check_get_spans(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart) { ScreenPtr screen = pDrawable->pScreen; UXA_FALLBACK(("from %p (%c)\n", pDrawable, uxa_drawable_location(pDrawable))); if (uxa_prepare_access(pDrawable, UXA_ACCESS_RO)) { fbGetSpans(pDrawable, wMax, ppt, pwidth, nspans, pdstStart); uxa_finish_access(pDrawable, UXA_ACCESS_RO); } }
static Bool _glamor_get_spans(DrawablePtr drawable, int wmax, DDXPointPtr points, int *widths, int count, char *dst, Bool fallback) { PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); int i; uint8_t *readpixels_dst = (uint8_t *) dst; int x_off, y_off; Bool ret = FALSE; if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) goto fail; glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); for (i = 0; i < count; i++) { #ifdef DEBUG void *data = #endif 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); } ret = TRUE; goto done; fail: if (!fallback && glamor_ddx_fallback_check_pixmap(drawable)) goto done; ret = TRUE; if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RO)) { fbGetSpans(drawable, wmax, points, widths, count, dst); } glamor_finish_access(drawable); done: return ret; }