This fixed a problem with libpixman getting the depth wrong for some 16bpp image formats but still render things correctly. Using surface->depth instead of image->depth for the ximage was a quick way to avoid this problem. It's not the appropriate fix and should probably not go upstream. libpixmap should be fixed if it hasn't already. ================================================================================ --- src/cairo-xlib-surface.c +++ src/cairo-xlib-surface.c @@ -796,7 +796,7 @@ ximage.bitmap_unit = 32; /* always for libpixman */ ximage.bitmap_bit_order = native_byte_order; ximage.bitmap_pad = 32; /* always for libpixman */ - ximage.depth = image->depth; + ximage.depth = surface->depth; ximage.bytes_per_line = image->stride; ximage.bits_per_pixel = bpp; ximage.red_mask = red;