- It probably makes sense to move the more strange X region API into pixman as well, but guarded with PIXMAN_XORG_COMPATIBILITY - Go through things marked FIXME - Reinstate the FbBits typedef? At the moment we don't even have the FbBits type; we just use uint32_t everywhere. Keith says in bug 2335: The 64-bit code in fb (pixman) is probably broken; it hasn't been used in quite some time as PCI (and AGP) is 32-bits wide, so doing things 64-bits at a time is a net loss. To quickly fix this, I suggest just using 32-bit datatypes by setting IC_SHIFT to 5 for all machines. - Consider whether calling regions region16 is really such a great idea - Run cairo test suite; fix bugs - one bug in source-scale-clip - Remove the warning suppression in the ACCESS_MEM macro and fix the warnings that are real - Add calls to prepare and finish access where necessary. grep for ACCESS_MEM, and make sure they are correctly wrapped in prepare and finish - Make source clipping optional. - done: source clipping happens through an indirection. still needs to make the indirection settable. - make the wrapper functions global instead of image specific - this won't work since pixman is linked to both fb and wfb - restore READ/WRITE in the fbcompose combiners since they sometimes store directly to destination drawables. - Consider optimizing the 8/16 bit solid fills in pixman-util.c by storing more than one value at a time. done: - Add non-mmx solid fill - Make sure the endian-ness macros are defined correctly. - The rectangles in a region probably shouldn't be returned const as the X server will be changing them. - Right now we _always_ have a clip region, which is empty by default. Why does this work at all? It probably doesn't. The server distinguishes two cases, one where nothing is clipped (CT_NONE), and one where there is a clip region (CT_REGION). - Default clip region should be the full image - Test if pseudo color still works. It does, but it also shows that copying a pixman_indexed_t on every composite operation is not going to fly. So, for now set_indexed() does not copy the indexed table. Also just the malloc() to allocate a pixman image shows up pretty high. Options include - Make all the setters not copy their arguments - Possibly combined with going back to the stack allocated approach that we already use for regions. - Keep a cached pixman_image_t around for every picture. It would have to be kept uptodate every time something changes about the picture. - Break the X server ABI and simply have the relevant parameter stored in the pixman image. This would have the additional benefits that: - We can get rid of the annoying repeat field which is duplicated elsewhere. - We can use pixman_color_t and pixman_gradient_stop_t etc. instead of the types that are defined in renderproto.h