diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h index 75ebc7ed9..29b7b12b8 100644 --- a/glamor/glamor_utils.h +++ b/glamor/glamor_utils.h @@ -658,6 +658,24 @@ static inline void _glamor_dump_pixmap_byte(PixmapPtr pixmap, int x, int y, int } } +static inline void _glamor_dump_pixmap_sword(PixmapPtr pixmap, int x, int y, int w, int h) +{ + int i,j; + unsigned short * p = pixmap->devPrivate.ptr; + int stride = pixmap->devKind / 2; + + p = p + y * stride + x; + + for (i = 0; i < h; i++) + { + ErrorF("line %3d: ", i); + for(j = 0; j < w; j++) + ErrorF("%2x ", p[j]); + p += stride; + ErrorF("\n"); + } +} + static inline void _glamor_dump_pixmap_word(PixmapPtr pixmap, int x, int y, int w, int h) { int i,j; @@ -678,17 +696,25 @@ static inline void _glamor_dump_pixmap_word(PixmapPtr pixmap, int x, int y, int static inline void glamor_dump_pixmap(PixmapPtr pixmap, int x, int y, int w, int h) { + w = ((x + w) > pixmap->drawable.width) ? (pixmap->drawable.width - x) : w; + h = ((y + h) > pixmap->drawable.height) ? (pixmap->drawable.height - y) : h; + glamor_prepare_access(&pixmap->drawable, GLAMOR_ACCESS_RO); switch (pixmap->drawable.depth) { case 8: _glamor_dump_pixmap_byte(pixmap, x, y, w, h); break; + case 15: + case 16: + _glamor_dump_pixmap_sword(pixmap, x, y, w, h); + break; + case 24: case 32: _glamor_dump_pixmap_word(pixmap, x, y, w, h); break; default: - assert(0); + ErrorF("dump depth %d, not implemented.\n", pixmap->drawable.depth); } glamor_finish_access(&pixmap->drawable, GLAMOR_ACCESS_RO); }