TODO 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. - Go through things marked FIXME
  2. - Add calls to prepare and finish access where necessary. grep for
  3. ACCESS_MEM, and make sure they are correctly wrapped in prepare
  4. and finish.
  5. - restore READ/WRITE in the fbcompose combiners since they sometimes
  6. store directly to destination drawables.
  7. - It probably makes sense to move the more strange X region API
  8. into pixman as well, but guarded with PIXMAN_XORG_COMPATIBILITY
  9. - Reinstate the FbBits typedef? At the moment we don't
  10. even have the FbBits type; we just use uint32_t everywhere.
  11. Keith says in bug 2335:
  12. The 64-bit code in fb (pixman) is probably broken; it hasn't been
  13. used in quite some time as PCI (and AGP) is 32-bits wide, so
  14. doing things 64-bits at a time is a net loss. To quickly fix
  15. this, I suggest just using 32-bit datatypes by setting
  16. IC_SHIFT to 5 for all machines.
  17. - Consider whether calling regions region16 is really such a great
  18. idea Vlad wants 32 bit regions for Cairo. This will break X server
  19. ABI, but should otherwise be mostly harmless, though a
  20. pixman_region_get_boxes16() may be useful.
  21. - Make source clipping optional.
  22. - done: source clipping happens through an indirection.
  23. still needs to make the indirection settable. (And call it
  24. from X)
  25. - Consider optimizing the 8/16 bit solid fills in pixman-util.c by
  26. storing more than one value at a time.
  27. - Add an image cache to prevent excessive malloc/free. Note that pixman
  28. needs to be thread safe when used from cairo.
  29. - Review the pixman_format_code_t enum to make sure it will support
  30. future formats. Some formats we will probably need:
  31. ARGB/ABGR with 16/32/64 bit integer/floating channels
  32. YUV2,
  33. YV12
  34. Also we may need the ability to distinguish between PICT_c8 and
  35. PICT_x4c4. (This could be done by interpreting the A channel as
  36. the depth for TYPE_COLOR and TYPE_GRAY formats).
  37. A possibility may be to reserve the two top bits and make them
  38. encode "number of places to shift the channel widths given" Since
  39. these bits are 00 at the moment everything will continue to work,
  40. but these additional widths will be allowed:
  41. All even widths between 18-32
  42. All multiples of four widths between 33 and 64
  43. All multiples of eight between 64 and 128
  44. This means things like r21g22b21 won't work - is that worth
  45. worrying about? I don't think so. And of course the bpp field
  46. can't handle a depth of over 256, so > 64 bit channels arent'
  47. really all that useful.
  48. We could reserve one extra bit to indicate floating point, but
  49. we may also just add
  50. PIXMAN_TYPE_ARGB_FLOAT
  51. PIXMAN_TYPE_BGRA_FLOAT
  52. PIXMAN_TYPE_A_FLOAT
  53. image types. With five bits we can support up to 32 different
  54. format types, which should be enough for everybody, even if we
  55. decide to support all the various video formats here:
  56. http://www.fourcc.org/yuv.php
  57. It may make sense to have a PIXMAN_TYPE_YUV, and then use the
  58. channel bits to specify the exact subtype.
  59. What about color spaces such a linear vs. srGB etc.?
  60. done:
  61. - Run cairo test suite; fix bugs
  62. - one bug in source-scale-clip
  63. - Remove the warning suppression in the ACCESS_MEM macro and fix the
  64. warnings that are real
  65. - irrelevant now.
  66. - make the wrapper functions global instead of image specific
  67. - this won't work since pixman is linked to both fb and wfb
  68. - Add non-mmx solid fill
  69. - Make sure the endian-ness macros are defined correctly.
  70. - The rectangles in a region probably shouldn't be returned const as
  71. the X server will be changing them.
  72. - Right now we _always_ have a clip region, which is empty by default.
  73. Why does this work at all? It probably doesn't. The server
  74. distinguishes two cases, one where nothing is clipped (CT_NONE), and
  75. one where there is a clip region (CT_REGION).
  76. - Default clip region should be the full image
  77. - Test if pseudo color still works. It does, but it also shows that
  78. copying a pixman_indexed_t on every composite operation is not
  79. going to fly. So, for now set_indexed() does not copy the
  80. indexed table.
  81. Also just the malloc() to allocate a pixman image shows up pretty
  82. high.
  83. Options include
  84. - Make all the setters not copy their arguments
  85. - Possibly combined with going back to the stack allocated
  86. approach that we already use for regions.
  87. - Keep a cached pixman_image_t around for every picture. It would
  88. have to be kept uptodate every time something changes about the
  89. picture.
  90. - Break the X server ABI and simply have the relevant parameter
  91. stored in the pixman image. This would have the additional benefits
  92. that:
  93. - We can get rid of the annoying repeat field which is duplicated
  94. elsewhere.
  95. - We can use pixman_color_t and pixman_gradient_stop_t
  96. etc. instead of the types that are defined in
  97. renderproto.h