The following patch series changes the scanline access to be based on iterators instead of direct calls to virtual functions. There are several benefits to this:
- Since destination iterators are different from source iterators, we can fix the bug we have currently, where destination transformations and filters are not being ignored as they should. - The annoying "classify" virtual functions can be eliminated. Both of those are fixed in the patch series. There are some other potential benefits: - The initialization of the iterators is virtualized, so that a CPU specific implementation can plug in its own fetcher. This means we can have SIMD accelerated gradients and fetchers. - Fetchers for NONE-extended images would be able to reuse the generated scanlines for the initial and final zero-lines, and could avoid reinitializing the zero parts of most scanlines if there is no transformation. - A hypothetical polygon image couldn't support random access to scanlines, so it would need something like this, where the scanlines are guaranteed to be fetched in order. None of these are done yet, though. Comments appreciated. Thanks, Soren pixman/pixman-arm-common.h | 9 - pixman/pixman-bits-image.c | 230 ++++++++++++++++++++++++++----- pixman/pixman-conical-gradient.c | 45 ++++-- pixman/pixman-fast-path.c | 22 +- pixman/pixman-general.c | 288 +++++++++++++++++++-------------------- pixman/pixman-image.c | 92 +----------- pixman/pixman-implementation.c | 82 ++++++++++- pixman/pixman-linear-gradient.c | 86 ++++++++--- pixman/pixman-mmx.c | 22 +- pixman/pixman-private.h | 171 ++++++++++++++--------- pixman/pixman-radial-gradient.c | 44 ++++- pixman/pixman-solid-fill.c | 75 +++------- pixman/pixman-sse2.c | 30 ++-- pixman/pixman-utils.c | 6 test/alphamap.c | 11 - 15 files changed, 743 insertions(+), 470 deletions(-) _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pixman