123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- - Go through things marked FIXME
- - Add calls to prepare and finish access where necessary. grep for
- ACCESS_MEM, and make sure they are correctly wrapped in prepare
- and finish.
- - restore READ/WRITE in the fbcompose combiners since they sometimes
- store directly to destination drawables.
- - It probably makes sense to move the more strange X region API
- into pixman as well, but guarded with PIXMAN_XORG_COMPATIBILITY
- - 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 Vlad wants 32 bit regions for Cairo. This will break X server
- ABI, but should otherwise be mostly harmless, though a
- pixman_region_get_boxes16() may be useful.
- - Make source clipping optional.
- - done: source clipping happens through an indirection.
- still needs to make the indirection settable. (And call it
- from X)
- - Consider optimizing the 8/16 bit solid fills in pixman-util.c by
- storing more than one value at a time.
- - Add an image cache to prevent excessive malloc/free. Note that pixman
- needs to be thread safe when used from cairo.
- - Review the pixman_format_code_t enum to make sure it will support
- future formats. Some formats we will probably need:
- ARGB/ABGR with 16/32/64 bit integer/floating channels
- YUV2,
- YV12
- Also we may need the ability to distinguish between PICT_c8 and
- PICT_x4c4. (This could be done by interpreting the A channel as
- the depth for TYPE_COLOR and TYPE_GRAY formats).
- A possibility may be to reserve the two top bits and make them
- encode "number of places to shift the channel widths given" Since
- these bits are 00 at the moment everything will continue to work,
- but these additional widths will be allowed:
- All even widths between 18-32
- All multiples of four widths between 33 and 64
- All multiples of eight between 64 and 128
- This means things like r21g22b21 won't work - is that worth
- worrying about? I don't think so. And of course the bpp field
- can't handle a depth of over 256, so > 64 bit channels arent'
- really all that useful.
- We could reserve one extra bit to indicate floating point, but
- we may also just add
- PIXMAN_TYPE_ARGB_FLOAT
- PIXMAN_TYPE_BGRA_FLOAT
- PIXMAN_TYPE_A_FLOAT
-
- image types. With five bits we can support up to 32 different
- format types, which should be enough for everybody, even if we
- decide to support all the various video formats here:
- http://www.fourcc.org/yuv.php
- It may make sense to have a PIXMAN_TYPE_YUV, and then use the
- channel bits to specify the exact subtype.
- What about color spaces such a linear vs. srGB etc.?
- done:
- - 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
- - irrelevant now.
- - make the wrapper functions global instead of image specific
- - this won't work since pixman is linked to both fb and wfb
- - 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
|