Commit Graph

1929 Commits

Author SHA1 Message Date
Andrea Canciani
a76b78c2da build-win32: Share targets and variables across win32 makefiles
The win32 build system repeatedly defines some basic variables
(notably program names and flags) and C sources compilation rules.

They can be factored out to a common Makefile, to be included in every
other Makefile.win32.
2011-09-14 07:03:35 -07:00
Andrea Canciani
efdf65c0c4 build: Reuse test sources
Makefile.am and Makefile.win32 should not duplicate content, as this
leads to breaking the build when they are not kept in sync.

This can be avoided by listing sources, headers and common build
variables/rules in a Makefile.sources file.

In order to further simplify the test makefiles, the utility functions
are now in a static library, which gets linked to all the tests and
benchmarks.
2011-09-14 07:03:34 -07:00
Andrea Canciani
a4f95d083b build: Reuse sources and pixman-combine build rules
Makefile.am and Makefile.win32 should not duplicate content, as this
leads to breaking the build when they are not kept in sync.

This can be avoided by listing sources, headers and common build
variables/rules in a Makefile.sources file.
2011-09-14 07:02:59 -07:00
Andrea Canciani
25bd96a3d0 test: Fix compilation on win32
Adding scaling-helpers-test to the testsuite on win32 makes MSVC
complain about int64_t being used as an expression:

scaling-helpers-test.c(27) : error C2275: 'int64_t' : illegal use of
this type as an expression
2011-09-14 07:02:59 -07:00
Søren Sandmann Pedersen
9882d832f6 Use pkg-config to determine the flags to use with libpng
Previously we would unconditionally link with -lpng leading to build
failures on systems without libpng.
2011-09-12 22:39:53 -04:00
Søren Sandmann Pedersen
99a53667da test: New function to save a pixman image to .png
When debugging it is often very useful to be able to save an image as
a png file. This commit adds a function "write_png()" that does that.

If libpng is not available, then the function becomes a noop.
2011-09-10 04:07:50 -04:00
Søren Sandmann Pedersen
1e1ae0bf6e Post-release version bump to 0.23.5 2011-09-09 23:59:20 -04:00
Søren Sandmann Pedersen
f901e3b58b Pre-release version bump to 0.23.4 2011-09-09 23:51:11 -04:00
Chris Wilson
f5da52b677 bits: optimise fetching width==1 repeats
Profiling ign.com, 20% of the entire render time was absorbed in this
single operation:

<< /content //COLOR_ALPHA /width 480 /height 800 >> surface context
<< /width 1 /height 677 /format //ARGB32 /source <|!!!@jGb!m5gD']#$jFHGWtZcK&2i)Up=!TuR9`G<8;ZQp[FQk;emL9ibhbEL&NTh-j63LhHo$E=mSG,0p71`cRJHcget4%<S\X+~> >> image pattern
  //EXTEND_REPEAT set-extend
  set-source
n 0 0 480 677 rectangle
fill+
pop

which is a simple composition of a single pixel wide image. Sadly this
is a workaround for lack of independent repeat-x/y handling in cairo and
pixman. Worse still is that the worst-case behaviour of the general repeat
path is for width 1 images...

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-09-09 23:43:16 -04:00
Taekyun Kim
7ef44cae6b ARM: NEON better instruction scheduling of over_n_8888
New head, tail, tail/head blocks are added and instructions
are reordered to eliminate pipeline stalls

Performance numbers of before/after

- cortex a8 -
before : L1: 375.39  L2: 391.93  M:114.39 ( 40.99%)  HT: 99.37  VT: 98.20  R: 90.24  RT: 32.87 ( 240Kops/s)
after  : L1: 481.90  L2: 483.46  M:114.29 ( 40.69%)  HT:106.91  VT: 93.38  R: 90.74  RT: 29.51 ( 236Kops/s)

- cortex a9 -
before : L1: 324.50  L2: 332.79  M:155.55 ( 47.51%)  HT:111.93  VT: 93.58  R: 71.92  RT: 28.21 ( 233Kops/s)
after  : L1: 355.87  L2: 364.49  M:156.90 ( 47.59%)  HT:111.52  VT: 91.76  R: 72.16  RT: 28.22 ( 234Kops/s)
2011-09-07 11:01:50 +09:00
Taekyun Kim
6aa82b7a72 ARM: NEON better instruction scheduling of over_n_8_8888
tail/head block is expanded and reordered to eliminate stalls

Performance numbers of before/after

- cortex a8 -
before : L1: 201.35  L2: 190.48  M:101.94 ( 54.85%)  HT: 78.41  VT: 63.83  R: 58.25  RT: 21.74 ( 191Kops/s)
after  : L1: 257.65  L2: 255.49  M:102.04 ( 55.33%)  HT: 79.19  VT: 65.46  R: 59.23  RT: 21.12 ( 189Kops/s)

- cortex a9 -
before : L1: 157.35  L2: 159.81  M:133.00 ( 60.94%)  HT: 82.44  VT: 63.64  R: 51.66  RT: 19.15 ( 179Kops/s)
after  : L1: 216.83  L2: 219.40  M:135.83 ( 61.80%)  HT: 85.60  VT: 64.80  R: 52.23  RT: 19.16 ( 179Kops/s)
2011-09-07 11:01:47 +09:00
Andrea Canciani
4ffa077487 Workaround bug in llvm-gcc
llvm-gcc (shipped in Apple XCode 4.1.1 as the default compiler or in
the 2.9 release of LLVM) performs an invalid optimization which
unifies the empty_region and the bad_region structures because they
have the same content.

A bugreport has been filed against Apple Developers Tool for this
issue. This commit works around this bug by making one of the two
structures volatile, so that it cannot be merged.

Fixes region-contains-test.
2011-08-29 07:38:37 +02:00
Andrea Canciani
a1ebff0dcb win32: Build benchmarks
Add the makefile rules needed to compile lowlevel-blt-bench on win32
and fix the compilation errors.
2011-08-29 07:37:46 +02:00
Søren Sandmann Pedersen
2644d5a947 Move bilinear interpolation to pixman-inlines.h 2011-08-19 20:01:40 -04:00
Søren Sandmann Pedersen
12ad42dd32 Use repeat() function from pixman-inlines.h in pixman-bits-image.c
The repeat() functionality was duplicated between pixman-bits-image.c
and pixman-inlines.h
2011-08-19 20:01:40 -04:00
Søren Sandmann Pedersen
2f443466bb Rename pixman-fast-path.h to pixman-inlines.h
It is not really specific to pixman-fast-path.c.
2011-08-19 20:01:36 -04:00
Søren Sandmann Pedersen
e58b208958 In pixman_image_create_bits() allow images larger than 2GB
There is no reason for pixman_image_create_bits() to check that the
image size fits in int32_t. The correct check is against size_t since
that is what the argument to calloc() is.

This patch fixes this by adding a new _pixman_multiply_overflows_size()
and using it in create_bits(). Also prepend an underscore to the names
of other similar functions since they are internal to pixman.

V2: Use int, not ssize_t for the arguments in create_bits() since
width/height are still limited to 32 bits, as pointed out by Chris
Wilson.
2011-08-15 09:37:49 -04:00
Søren Sandmann Pedersen
bdfb5944ff Don't include stdint.h in lowlevel-blt-bench.c
Some systems don't have the file, and the types are already defined in
pixman.h.

https://bugs.freedesktop.org//show_bug.cgi?id=37422
2011-08-11 03:32:14 -04:00
Søren Sandmann Pedersen
e5d85ce662 Use find_box_for_y() in pixman_region_contains_point() too
The same binary search from the previous commit can be used in this
function too.

V2: Remove check from loop that is not needed anymore, pointed out by
Andrea Canciani.
2011-08-11 03:32:14 -04:00
Søren Sandmann Pedersen
04bd4bdca6 Speed up pixman_region{,32}_contains_rectangle()
When someone selects some text in Firefox under a non-composited X
server and initiates a drag, a shaped window is created with a complex
shape corresponding to the outline of the text. Then, on every mouse
movement pixman_region_contains_rectangle() is called many times on
that complicated region. And pixman_region_contains_rectangle() is
doing a linear scan through the rectangles in the region, although the
scan does exit when it finds the first box that can't possibly
intersect the passed-in rectangle.

This patch changes the loop so that it uses a binary search to skip
boxes that don't overlap the current y position.  The performance
improvement for the text dragging case is easily noticable.

V2: Use the binary search for the "getting up to speed or skippping
remainder of band" as well.
2011-08-11 03:32:14 -04:00
Søren Sandmann Pedersen
795ec5af2f New test of pixman_region_contains_{rectangle,point}
This test generates random regions and checks whether random boxes and
points are contained within them. The results are combined and a CRC32
value is computed and compared to a known-correct one.
2011-08-11 03:32:14 -04:00
Søren Sandmann Pedersen
842591d9d1 Fix lcg_rand_u32() to return 32 random bits.
The lcg_rand() function only returns 15 random bits, so lcg_rand_u32()
would always have 0 in bit 31 and bit 15. Fix that by calling
lcg_rand() three times, to generate 15, 15, and 2 random bits
respectively.

V2: Use the 10/11 most significant bits from the 3 lcg results and mix
them with the low ones from the adjacent one, as suggested by Andrea
Canciani.
2011-08-11 03:32:14 -04:00
Taekyun Kim
12da53f81c ARM NEON: Standard fast path out_reverse_8_8888
This fast path is frequently used by cairo to do polygon rendering.
Existing NEON code generation framework is used.
2011-08-04 23:38:45 +09:00
Andrea Canciani
b395c3c5a2 radial: Fix typos and trailing whitespace
Correct a typo reported by James Cloos and some reported by automatic
spellchecking.

Remove trailing whitespace.
2011-07-29 12:25:39 +02:00
Siarhei Siamashka
b8d6babc91 ARM: workaround binutils bug #12931 (code sections alignment)
More details in binutils bugtracker:
  http://sourceware.org/bugzilla/show_bug.cgi?id=12931

The problem was encountered in the wild by Mozilla:
  https://bugzilla.mozilla.org/show_bug.cgi?id=672787
2011-07-27 17:07:19 +03:00
Siarhei Siamashka
5754e5689d C fast path for scaled src_x888_8888 with nearest filter
The necessity is justified by a message in the pixman mailing list:
  http://lists.freedesktop.org/archives/pixman/2011-July/001330.html

NONE repeat is not supported, but could be added by tweaking
the interpretation and making use of 'fully_transparent_src'
scanline function argument.
2011-07-22 23:03:36 +03:00
Andrea Canciani
c06af10454 radial: Improve documentation and naming
Add a comment to explain why the tests guarantee that the code always
computes the greatest valid root.

Rename "det" as "discr" to make it match the mathematical name
"discriminant".

Based on a patch by Jeff Muizelaar <jmuizelaar@mozilla.com>.
2011-07-15 22:05:11 +02:00
Cyril Brulebois
69b4ffdbc9 Upload to experimental. 2011-07-05 01:37:39 +02:00
Cyril Brulebois
351ed700c3 Enable parallel building (by passing --parallel to dh $@). 2011-07-05 01:36:48 +02:00
Cyril Brulebois
af6efdfd20 Bump changelogs. 2011-07-04 22:47:03 +02:00
Cyril Brulebois
ff92434b39 Merge branch 'upstream-experimental' into debian-experimental 2011-07-04 22:45:55 +02:00
Søren Sandmann Pedersen
e814b50877 Makefile.am: Add pixman@lists.freedesktop.org to RELEASE_ANNOUNCE_LIST 2011-07-04 15:58:41 -04:00
Søren Sandmann Pedersen
ed6d2f1cec Post-release version bump to 0.23.3 2011-07-04 15:35:17 -04:00
Søren Sandmann Pedersen
6c4001a0e1 Pre-release version bump to 0.23.2 2011-07-04 08:13:19 -04:00
Taekyun Kim
eff7c8efab Bilinear REPEAT_NORMAL source line extension for too short src_width
To avoid function call and other calculation overhead, extend source
scanline into temporary buffer when source width is too small.
Temporary buffer will be repeatedly accessed, so extension cost is
very small due to cache effect.
2011-06-28 23:20:32 +09:00
Taekyun Kim
828794d328 Enable REPEAT_NORMAL bilinear fast path entries 2011-06-28 23:20:29 +09:00
Taekyun Kim
1161b3f9ed ARM: Add REPEAT_NORMAL functions to bilinear BIND macros
Now bilinear template support REPEAT_NORMAL, so functions for that
is added to PIXMAN_ARM_BIND_SCALED_BILINEAR_ macros. Fast path
entries are not enabled yet.
2011-06-28 23:20:27 +09:00
Taekyun Kim
ebd2f06d96 sse2: Declare bilinear src_8888_8888 REPEAT_NORMAL composite function
Now bilinear template support REPEAT_NORMAL, so declare composite
functions using it. Function is just declared not used yet.
2011-06-28 23:20:25 +09:00
Taekyun Kim
7e22b2f782 REPEAT_NORMAL support for bilinear fast path template
The basic idea is to break down normal repeat into a set of
non-repeat scanline compositions and stitching them together.

Bilinear may interpolate last and first pixels of source scanline.
In this case, we can use temporary wrap around buffer.
2011-06-28 23:20:23 +09:00
Taekyun Kim
2f025bad43 Replace boolean arguments with flags for bilinear fast path template
By replacing boolean arguments with flags, the code can be more
readable and flags can be extended to do some more things later.

Currently following flags are defined.

FLAG_NONE
    - No flags are turned on.

FLAG_HAVE_SOLID_MASK
    - Template will generate solid mask composite functions.

FLAG_HAVE_NON_SOLID_MASK
    - Template will generate bits mask composite functions.

FLAG_HAVE_SOLID_MASK and FLAG_NON_SOLID_MASK should be mutually
exclusive.
2011-06-28 23:20:21 +09:00
Søren Sandmann
4d4d1760e8 test: Make fuzzer-find-diff.pl executable 2011-06-25 10:17:50 -04:00
Søren Sandmann
ece8d13bf7 ARM: Fix two bugs in neon_composite_over_n_8888_0565_ca().
The first bug is that a vmull.u8 instruction would store its result in
the q1 register, clobbering the d2 register used later on. The second
is that a vraddhn instruction would overwrite d25, corrupting the q12
register used later.

Fixing the second bug caused a pipeline bubble where the d18 register
would be unavailable for a clock cycle. This is fixed by swapping the
instruction with its successor.
2011-06-25 10:17:05 -04:00
Søren Sandmann Pedersen
5715a394c4 blitters-test: Make common formats more likely to be tested.
Move the eight most common formats to the top of the list of image
formats and make create_random_image() much more likely to select one
of those eight formats.

This should help catch more bugs in SIMD optimized operations.
2011-06-25 10:17:05 -04:00
Andrea Canciani
d815a1c54a Silence autoconf warnings
Autoconf 2.86 reports:

warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body

Every code fragment must be wrapped in [AC_LANG_SOURCE([...])]
2011-06-23 10:47:43 +02:00
Søren Sandmann Pedersen
a89f8cfaf1 Replace argumentxs to composite functions with a pointer to a struct
This allows more information, such as flags or the composite region,
to be passed to the composite functions.
2011-06-20 02:03:23 -04:00
Søren Sandmann Pedersen
99e7d8fab5 In pixman-general.c rename image_parameters to {src, mask, dest}_image
All the fast paths generally use these names as well.
2011-06-12 16:45:57 -04:00
Søren Sandmann Pedersen
4d713e3120 Replace instances of "dst_*" with "dest_*"
The variables in question were dst_x, dst_y, dst_image. The majority
of _x and _y uses were already dest_x and dest_y, while the majority
of _image uses were dst_image.
2011-06-12 16:45:57 -04:00
Julien Cristau
9d5bef2fcf Upload to unstable 2011-06-12 17:02:08 +02:00
Julien Cristau
90f71ced40 Bump changelogs 2011-06-12 17:01:38 +02:00
Julien Cristau
045dd15b6a Merge tag 'pixman-0.22.0' into debian-unstable 2011-06-12 17:00:36 +02:00