Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
|
|
Since otherwise the workaround won't take effect when you call
pixman_image_composite32() directly.
|
|
|
|
|
|
This fast path function improves performance of 'poppler' cairo-perf trace.
Benchmark from ARM Cortex-A8 @720MHz
before:
[ # ] backend test min(s) median(s) stddev. count
[ 0] image poppler 38.986 39.158 0.23% 6/6
after:
[ # ] backend test min(s) median(s) stddev. count
[ 0] image poppler 24.981 25.136 0.28% 6/6
|
|
This fast path function improves performance of 'gnome-system-monitor'
cairo-perf trace.
Benchmark from ARM Cortex-A8 @720MHz
before:
[ # ] backend test min(s) median(s) stddev. count
[ 0] image gnome-system-monitor 68.838 68.899 0.05% 5/6
after:
[ # ] backend test min(s) median(s) stddev. count
[ 0] image gnome-system-monitor 53.336 53.384 0.09% 6/6
|
|
This fast path function improves performance of 'firefox-talos-gfx'
cairo-perf trace.
Benchmark from ARM Cortex-A8 @720MHz
before:
[ # ] backend test min(s) median(s) stddev. count
[ 0] image firefox-talos-gfx 139.969 141.176 0.35% 6/6
after:
[ # ] backend test min(s) median(s) stddev. count
[ 0] image firefox-talos-gfx 111.810 112.196 0.23% 6/6
|
|
Restructure the code to use switches instead of ifs. This saves a few
comparisons and make the code slightly easier to follow. Also add some
comments.
|
|
It is more natural to put it where all the other flags are computed.
|
|
Instead of storing it as a boolean in the image struct, just use
another flag for it.
|
|
The new FAST_PATH_IS_OPAQUE flag is computed along with the others in
_pixman_image_validate().
|
|
Instead of calling this function in compute_image_info(), just do the
relevant checks when the extended format is computed.
Move computation of solidness to validate
|
|
Instead of computing the extended format on every composite, just
compute it once and store it in the image.
|
|
This flags indicates that the image is untransformed an
repeating. Such images can be composited quickly by simply repeating
the composite operation.
|
|
Instead of computing all the image flags at composite time, we compute
them once in _pixman_image_validate() and cache them in the image.
|
|
|
|
|
|
|
|
|
|
When a trapezoid sample point is exactly on a polygon edge, the rule
is that it is considered inside the trapezoid if the edge is a top or
left edge, but outside for bottom and right edges.
This program tests that for a1 trapezoids.
|
|
That way they don't confuse the indenting algorithm in editors such as
Emacs.
|
|
Conflicts:
pixman/pixman-sse2.c
|
|
Rather than the region code having its own little debug system, move
all of it into pixman-private where there is already return_if_fail()
macros etc. These macros are now enabled in development snapshots and
nowhere else. Previously they were never enabled unless you modified
the code.
At the same time, remove all the asserts from the region code since we
can never turn them on anyway, and replace them with
critical_if_fail() macros that will print spew to standard error when
DEBUG is defined.
Finally, also change the debugging spew in pixman-bits-image.c to use
return_val_if_fail() instead of its own fprintf().
|
|
|
|
This creates a region from an image in PIXMAN_a1 format.
|
|
This is needed for later use in other code.
|
|
Although we added MMX emulation for Microsoft Visual C++ compiler for x64,
USE_SSE2 still requires USE_MMX. So we remove dependency of USE_MMX
for Windows x64.
Signed-off-by: Makoto Kato <m_kato@ga2.so-net.ne.jp>
|
|
The NULL check is only necessary for masks, so there is no reason to
do it for destinations and sources.
|
|
In the common case where there is no repeating, the loop in
walk_region_internal() reduces to just walking of the boxes involved
and calling the composite function.
|
|
Specifically,
- the src_ and mask_repeat computations
- the check for whether the involved images cover the composite
region.
|
|
We only need to compute the composite region once, not on every
iteration.
|
|
The computation of image formats and flags is invariant to the loop,
so it can all be moved out.
|
|
Move all of the code into do_composite().
|
|
_pixman_run_fast_path() and pixman_compute_composite_region() are both
moved to pixman-image, since at this point that's the only place they
are being called from.
|
|
|
|
In the common case no images need the workaround, so we check for that
first, and only if an image does need a workaround do we check which
one of the images actually need it.
|
|
They are no longer necessary because we will just walk the fast path
tables, and the general composite path is treated as another fast
path.
This unfortunately means that sse2_composite() can no longer be
responsible for realigning the stack to 16 bytes, so we have to move
that to pixman_image_composite().
|
|
|
|
Instead just call _pixman_run_fast_path(). Since we view
general_composite() as a fast path now, we know that it will find
*some* compositing routine.
|
|
|
|
Also add an empty fast path table to the vmx implementation, so that
we can assume sure the pointer is never NULL.
|
|
This requires another couple of flags
FAST_PATH_SCALE_TRANSFORM
FAST_PATH_NEAREST_FILTER
|
|
We introduce a new PIXMAN_OP_any fake operator and a PIXMAN_any fake
format that match anything. Then general_composite_rect() can be used
as another fast path.
Because general_composite_rect() does not require the sources to cover
the clip region, we add a new flag FAST_PATH_COVERS_CLIP which is part
of the set of standard flags for fast paths.
Because this flag cannot be computed until after the clip region is
available, we have to call pixman_compute_composite_region32() before
checking for fast paths. This will resolve itself when we get to the
point where _pixman_run_fast_path() is only called once per composite
operation.
|
|
|
|
|
|
Separate out the fetching and combining code in two inline
functions. Then do two pixels per iteration.
|
|
- Make it work for PIXMAN_OP_OVER
- Split repeat computation for x and y, and only the x part in the
inner loop.
- Move stride multiplication outside of inner loop
|
|
|
|
It's already included in distcheck.
|