[Pixman] FPU-based implementation of the core pixel pipeline

Soeren Sandmann sandmann at daimi.au.dk
Fri Oct 1 18:45:22 PDT 2010

Dmitri Vorobiev <dmitri.vorobiev at movial.com> writes:

> Finally I finished combing through the code that we had, and now the
> floating point-based core pixel pipeline is available from our Git
> server:
> http://sandbox.movial.com/gitweb?p=dmvo/pixman.git;a=shortlog;h=refs/heads/float
> Please review. Note, however, that this implementation should be
> considered far from final, it contains bugs, etc. We are willing to
> work further on this.

We need to figure out how a floating point implementation fits in
before it makes sense to review the code in detail, especially
considering that it clearly isn't yet close to being mergable (see

My opinion is still that the floating point implementation should

- be the fallback from the current general implementation

- replace the existing 64 bit pipeline

- handle transformations and gradients

- not be compile-time optional

At which point, deleting support for some of the more unusual
operators and formats from the general implementation would be
possible, and the general implemenetation could be renamed to
something like "narrow" or "integer" and the floating point one to

A few specific comments:

I tried enabling it by moving it to the front of the list in
pixman-cpu.c, and it's safe to say it contains bugs... [1].

Looking over the code briefly, I notice that:

- It generates a crazy number of fast paths that are unlikely to ever
  be hit in practice.

- The conversion table is still huge and per-process.

- There has been no attempt to follow the coding style.


[1] dhcp-100-3-184:~/vertigo/pixman% make check

Making check in pixman
make[1]: Entering directory `/home/ssp/vertigo/pixman/pixman'
make  check-am
make[2]: Entering directory `/home/ssp/vertigo/pixman/pixman'
make[2]: Nothing to be done for `check-am'.
make[2]: Leaving directory `/home/ssp/vertigo/pixman/pixman'
make[1]: Leaving directory `/home/ssp/vertigo/pixman/pixman'
Making check in test
make[1]: Entering directory `/home/ssp/vertigo/pixman/test'
make  check-TESTS
make[2]: Entering directory `/home/ssp/vertigo/pixman/test'
/bin/sh: line 5:  2831 Segmentation fault      ${dir}$tst
FAIL: a1-trap-test
/bin/sh: line 5:  2856 Segmentation fault      ${dir}$tst
FAIL: region-test
PASS: region-translate-test
lt-fetch-test: pixman-access-float.h:584: fetch_pixel_generic_ptr: Assertion `!"Can't handle this format yet!"' failed.
/bin/sh: line 5:  2902 Aborted                 ${dir}$tst
FAIL: fetch-test
PASS: oob-test
PASS: window-test
PASS: gradient-crash-test
PASS: trap-crasher
PASS: alpha-loop
PASS: scaling-crash-test

Wrong alpha value at (0, 0). Should be 0xff; got 0x33. Source was
0xcf, original dest was 0x33
src: a8r8g8b8, alpha: none, origin 0 0
dst: a8r8g8b8, alpha: a8, origin: 0 0

FAIL: alphamap
lt-blitters-test: pixman-access-float.h:246: build_pixel_generic: Assertion `!"Can't handle this format yet!"' failed.
/bin/sh: line 5:  3082 Aborted                 ${dir}$tst
FAIL: blitters-test
scaling test failed! (checksum=933AAAF4, expected 7F1AB59F)
FAIL: scaling-test
affine test failed! (checksum=EDFC62EF, expected 46EC3C6A)
FAIL: affine-test
lt-composite: pixman-access-float.h:619: fetch_pixel_generic: Assertion `!"Can't handle this format yet!"' failed.
/bin/sh: line 5:  3172 Aborted                 ${dir}$tst
FAIL: composite
8 of 15 tests failed
Please report to pixman at lists.freedesktop.org
make[2]: *** [check-TESTS] Error 1
make[2]: Leaving directory `/home/ssp/vertigo/pixman/test'
make[1]: *** [check-am] Error 2
make[1]: Leaving directory `/home/ssp/vertigo/pixman/test'
make: *** [check-recursive] Error 1

More information about the Pixman mailing list