Commit graph

8269 commits

Author SHA1 Message Date
Andrea Canciani
fe3ca9c36f Remove conditional compilation of freed-pools
Conditional compilation was needed to avoid warnings:
cairo-clip.c:51: warning: ‘clip_path_pool’ defined but not used
cairo.c:181: warning: ‘context_pool’ defined but not used

They can be avoided by making sure that _freed_pool_reset(ptr)
actually consumes its argument. This has the pleasant side-effect that
forgetting to properly reset a freed-pool now results in a warning if
atomic ops are disabled/not available.
2011-07-05 10:00:13 +02:00
Uli Schlachter
eea31cc4ee xlib-xcb: Don't call directly into the xcb backend
Instead, this now uses the surface wrapper functions for this job.
These functions make sure that e.g. snapshots are detached and that is_clear is
reset correctly.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-07-02 23:11:48 +02:00
Uli Schlachter
9e4c73a40d xlib-xcb: Fix some use-after-free
Also, this now sets surface->xcb to NULL after the dereference. Segfaults are
way more prominent anyway. :-)

All the backend callbacks shouldn't need any checks since the public entry point
already checks for finished surfaces. Only the public functions in xlib-xcb need
to do checks for finished surfaces.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-07-02 23:00:24 +02:00
Uli Schlachter
880566e14b xcb: Remove an unused function argument
Since commit f1d313e0, the 'force' argument to _copy_to_picture() isn't used
anymore. Said commit should have removed it. Whoops.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-07-02 17:40:36 +02:00
Uli Schlachter
7e1a9f1db0 xlib-xcb: Fix cairo_surface_flush()
This function called directly into the xcb's surface flush function. This means
that snapshots for that surface weren't detached since that's normally done in
cairo_surface_flush() before calling into the backend.

Fix this by using surface_flush() instead of calling into the backend directly.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=31931

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-07-01 21:58:42 +02:00
Uli Schlachter
26ee41435b xlib-xcb: Verify we really have an xcb surface
If the X11 server doesn't have the RENDER extension, the xcb backend falls back
to the image backend in some cases (e.g. create_similar). xlib-xcb didn't handle
this properly which means it used the result like a xcb surface.

Found while debugging https://bugs.freedesktop.org/show_bug.cgi?id=31931,
firefox died from a BadDrawable error when it tried to use the (bogous) result
from cairo_xlib_surface_get_drawable().

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-07-01 18:53:18 +02:00
Uli Schlachter
59fadcf7d9 xlib-xcb: Fix api-special-cases test
The functions cairo_xlib_surface_set_size and cairo_xlib_surface_set_drawable
didn't set the expected error when called with a finished surface.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-07-01 10:26:28 +02:00
Uli Schlachter
4495e08e9e xlib-xcb: Use slim_hidden_proto correctly
There are debug functions for setting the precision on a xlib device, so
xlib-xcb must redirect that to the xcb backend, too. However this means that
these public functions now are also called internally, thus we have to make them
go through the slim_hidden_* macros.

This commit fixes the following error from "make check":

Checking .libs/libcairo.so for local PLT entries
00000000002bb6d8  000001e300000007 R_X86_64_JUMP_SLOT     000000000006d8a0 cairo_xcb_device_debug_set_precision + 0
00000000002bb750  0000025e00000007 R_X86_64_JUMP_SLOT     000000000006d8b0 cairo_xcb_device_debug_get_precision + 0
FAIL: check-plt.sh

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-07-01 10:15:46 +02:00
Søren Sandmann Pedersen
ea645913ba Include pixman.h in cairo-xlib-private.h
Otherwise "make cairo-perf-trace" fails. Reported by Matt Turner on
IRC.
2011-06-27 23:12:51 -04:00
Chris Wilson
8996287d94 xlib: Create an exact match for the image surface if possible using Xrender
In order to defer the pixel conversion till as late in the pipeline as
possible, we want to try and preserve the pixman image format whilst
uploading the pixel data. To do this, we want to create an XRender
surface with a matching PictFormat to the source image. Then we need to
make sure we take the quick path through _draw_image_surface for none
and direct conversions.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-06-25 20:15:18 +01:00
Andrea Canciani
f46ba56d5b Do not open-code freed-pool
Reuse the freed-pool system to reduce allocation pressure of context
creation/destruction.

As a side effect, this removes the use of ffs() on Win32, cleaning up
some MSVC-specific code and fixing a mingw-related build issue.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=30277
2011-06-25 15:35:48 +02:00
Andrea Canciani
a468489270 win32: Fallback upon PDF blend operators
GDI does not support PDF blend modes, so they are implemented by
falling back.

Fixes extended-blend-solid, extended-blend-solid-alpha.

Bug pointed out by Peter Frentrup <peter_frentrup@gmx.de> in
http://lists.cairographics.org/archives/cairo/2011-April/021908.html
2011-06-25 10:19:36 +02:00
Andrea Canciani
a447e94979 clip: Fix boxes extents computation in intersect_with_boxes
The extents of the boxes were being computed by taking into account
just the first box instead of all of them.

Based on a patch by James Cloos.

Fixes clip-disjoint, clip-stroke-unbounded, clip-fill-nz-unbounded,
clip-fill-eo-unbounded, clip-fill, clip-stroke, trap-clip.

See https://bugs.freedesktop.org/show_bug.cgi?id=38641

Reviewed-by: James Cloos <cloos@jhcloos.com>
Tested-by: James Cloos <cloos@jhcloos.com>
2011-06-25 10:19:36 +02:00
Nis Martensen
1a4e9f1e91 Fix typos
Reported in
http://lists.cairographics.org/archives/cairo/2011-May/021921.html
2011-06-25 10:19:23 +02:00
Uli Schlachter
77b6563c21 xcb: Use defines instead of magic numbers
render.h gives us nice descriptive names for the precise/imprecise poly modes.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-06-24 15:59:08 +02:00
Uli Schlachter
144c912860 xcb: Initialize the new precision fields
In 63bdae27a8, new fields were added to cairo_xcb_connection_t and
cairo_xcb_surface_t. The same change was done in the xlib backend.

However, in the xlib backend these new fields were properly initialized. This
was forgotten in the xcb backend.

Hopefully-Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=38482

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-06-24 15:52:59 +02:00
Uli Schlachter
d246d97592 xcb: Prettify some code
Instead of having each case do the same thing, this code will now fall through
to the default case.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-06-24 15:24:09 +02:00
Uli Schlachter
cb3d91201c xcb: Don't hardcode the RENDER version number
This now uses the macros XCB_RENDER_{MAJOR,MINOR}_VERSION which xcb defines.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-06-24 15:24:09 +02:00
Uli Schlachter
d938e74446 xcb,xlib,surface: Check for too small sizes
This adds checks for negative sizes in cairo_surface_create_similar() and for
non-positive sizes in all public surface-creation functions in the xcb and xlib
backends.

X11 doesn't allow 0 as width/height, so if anyone claims to have a drawable of
that size, he can't be right. However, cairo allows such sizes which is why
create_similar doesn't reject 0.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-06-24 15:24:09 +02:00
Andrea Canciani
f21ac5b13b error: Do not define _cairo_error twice
cairo-perf-trace uses cairo-hash.c, which calls _cairo_error.

Instead of redefining it in cairo-perf-trace.c it can be abstracted in
a separate source which is directly included in the build of
cairo-perf-trace.

This avoids visibility issues when compiling cairo-perf-trace with a
statically linked cairo library on architectures which do not support
hidden visibility (example: win32).
2011-06-24 11:57:22 +02:00
Andrea Canciani
0740c8e4f3 Hide private symbols on MacOSX
gcc provides the hidden visibility attribute on Darwin, which can be
used to deny access to private cairo symbols.
2011-06-24 11:57:07 +02:00
Taekyun Kim
441f9c5037 Fix intersect_with_boxes() to produce tight clip extents
Previous code was intersecting extents with infinitely large rectangle.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-06-21 09:59:30 +01:00
Andrea Canciani
b6d593dc71 build: Clean up environment variables and flags for the win32 build
Avoid ovverriding LINK, as it has a special meaning for the MSVC build
tools.
2011-06-20 10:24:21 +02:00
Andrea Canciani
101fab7cd8 win32-font: Improve static data reset function
The hashtable is guaranteed to only contain font faces which are
currently referenced, hence there is no need to remove any font face
when it is reset (just like for toy-font).

This makes the function simpler and fixes the assertion

Assertion failed: predicate != NULL, file cairo-hash.c, line 373

hit by multiple tests (the first one being "clear").

See https://bugs.freedesktop.org/show_bug.cgi?id=38049
2011-06-20 10:24:21 +02:00
Andrea Canciani
94bc20da50 win32-font: Implement destroy function
Win32 font faces can be removed from the hashtable upon destruction.
Based on the toy-font destruction code.

See https://bugs.freedesktop.org/show_bug.cgi?id=38049
2011-06-20 10:24:20 +02:00
Andrea Canciani
94b14c929d win32-font: Do not return font in error status
If the hashtable cointains a font matching the font being created,
only reuse it if it is not in an error status. Otherwise, remove it
from teh hashtable and create a new one.
2011-06-20 10:24:20 +02:00
Andrea Canciani
b9d9ca281c Avoid deprecated functions on win32
Some POSIX functions are deprecated in MSVC and should instead be used
with an alternative name beginning with '_'.
2011-06-20 10:24:20 +02:00
Andrea Canciani
cbf11fa261 toy-font: Do not open-code cairo_font_face_reference ()
Since 03be41151d, it is safe to use
cairo_font_face_reference () to increment the reference count of a
font taken from the hashtable, because no mutex is being locked twice.
2011-06-20 10:24:20 +02:00
Andrea Canciani
5a79e9f536 script: Return status when flushing device
Since 92d7b1eee9 the flush vfunction
should return a cairo_status_t.

Silences the warning:

cairo-script-surface.c: At top level:
cairo-script-surface.c:3528:5: warning: initialization from
incompatible pointer type [enabled by default]
cairo-script-surface.c:3528:5: warning: (near initialization for
'_cairo_script_device_backend.flush') [enabled by default]
2011-06-20 09:44:49 +02:00
Andrea Canciani
ced061124d xlib-xcb: Implement cairo_xlib_device_debug_{g,s}et_precision
63bdae27a8 introduced a new public API
cairo_xlib_device_debug_set_precision(), exported by cairo-xlib.
cairo-xlib-xcb must implement it as well, because it must provide the
same public API.

Fixes the compilation of cairo-sphinx with --enable-tee
--enable-xlib-xcb --enable-script.

Reported-by: James Cloos <cloos@jhcloos.com>
2011-06-16 18:31:14 +02:00
Andrea Canciani
f409f74dec xlib: Fix build of xlib-xcb
45665c0d48 breaks the build of
cairo-xlib-xcb because it does not disable the compilation of
cairo-xlib implementation files when cairo-xlib-xcb is enable. This
results in collisions when linking.

Reported-by: James Cloos <cloos@jhcloos.com>
2011-06-16 15:11:24 +02:00
Andrea Canciani
a2cd83a986 toy-font-face: Do not assume hash != 0
The assumption that no font face will hash to 0 is not correct.
Moreover, no special value is needed to mark fonts in error status, as
they can simply be detected upon lookup and destruction.
2011-06-16 12:17:33 +02:00
Andrea Canciani
a06668fabe path-stroke: Avoid mixing cap and join values
Silence the warning:

cairo-path-stroke.c: In function '_cairo_stroker_add_caps':
cairo-path-stroke.c:861:29: warning: comparison between
'cairo_line_cap_t' and 'enum _cairo_line_join' [-Wenum-compare]

CAIRO_LINE_JOIN_ROUND and CAIRO_LINE_CAP_ROUND have the same value,
hence this defect went unnoticed so far.
2011-06-16 09:48:30 +02:00
Taekyun Kim
8e7589abcc tessellator: Fixed to produce an output box with x1 <= x2 for single box input
Winding of a box is toggled by swapping x1, x2 coordinates. So
we have to swap those coordinate rather than just copying.

Many routines assume that boxes are left-top to right-bottom
convention. So tessellator should produce such output boxes.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-06-15 16:13:15 +01:00
Andrea Canciani
45665c0d48 Remove if's from Makefile.sources
make on win32 complains that:

make[1]: Entering directory `/home/ranma42/Code/fdo/cairo/src'
../src/Makefile.sources:220: *** missing separator.  Stop.

Makefile.sources should not contain if's, which are aoutomake-only
conditionals.  The correct way to conditionally include files is to
enable/disable them using C preprocessor macros.
2011-06-14 15:25:08 +02:00
Uli Schlachter
9d256b7db9 xcb: Fallback to image surface for create similar
We can't use an X11 surface in create_similar if the specified coordinates are
too small/large. However, we can still use SHM-backed memory for the image
surface which will be used instead.

Thanks to Chris Wilson for the hint.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-06-12 15:42:01 +02:00
Uli Schlachter
fb0a40fc10 XCB: Implement PDF blend operators natively
The PDF blend operators, as offered by cairo, where added in RENDER 0.11. This
commit makes the XCB backend use them, if they are available.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-06-11 21:32:29 +02:00
Uli Schlachter
ad01d571dd Revert "xcb: Never return NULL from create_similar"
This reverts commit f6e6891b59.

Returning NULL in these cases is actually the right thing to do, because the
caller expects and handles this case.

cairo_surface_create_similar() won't return NULL due to this, because
_cairo_surface_create_similar_solid() will fall back to an image surface.

I think I missed that part when I wrote the bad commit.

This was found via the test suite's "zero-mask" test.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-06-11 20:18:27 +02:00
Dagobert Michelsen
753a4cdf30 Use detected EGREP instead of generic grep
https://bugs.freedesktop.org/show_bug.cgi?id=38069
2011-06-08 16:01:03 +02:00
Benjamin Otte
00de16b7ac image: Don't crash on weird pixman formats
_pixel_to_solid() used to assert that it got a known cairo_format_t.
However, this might not be the case when backends decide to use a pixman
format that is not representable by a cairo format (X and DirectFB are
examples for backends that do that).

This patch makes _pixel_to_solid() return NULL in that case and fixes
the callers to deal with it.

https://bugs.freedesktop.org/show_bug.cgi?id=37916
2011-06-08 16:01:03 +02:00
Murray Cumming
d0615633dc cairo: Remove trailing comma from cairo_format_t
Fixes warnings when building with C++.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=36989
2011-06-08 12:02:28 +02:00
Taekyun Kim
6edc5ca55f tessellator: Fix boxes tessellator to handle num_boxes <= 1 correctly
We cannot assume that parameter 'out' is empty. So we should make it
empty before returning CAIRO_STATUS_SUCCESS when 'in' contains no boxes.

When 'in' contains a single box, we should copy 'in' to 'out' rather
than just returning CAIRO_STATUS_SUCCESS.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-06-08 09:59:42 +01:00
Chris Wilson
72b6299c12 gl: Mark the use-once vertex buffers as DYNAMIC
As we write, use and then immediately discard the vertex buffers, our
usage pattern more closely matches DYNAMIC (as opposed to STREAM). This
improve performance by about 10% on intel.

firefox-talos-gfx(snb) 20.226 -> 18.402

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-06-02 08:57:19 +01:00
Chris Wilson
bf1b08d066 perf 2011-06-02 08:57:13 +01:00
Chris Wilson
63bdae27a8 xlib,xcb: Force strict adherence to the Render specification when testing
Introduce cairo_xlib_device_debug_set_precision() to override the
automatic selection of rendering precision and force the Xorg/DDX to
strictly adhere to the precise rendering mode of the Render
specification. This allows us to test drivers without worrying, too
much, about minor discrepancies in antialiasing.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-06-01 16:50:25 +01:00
Adrian Johnson
6936a2b417 PS: Use tight bounding box
Now that the page size is specified by %%DocumentMedia
we can make %%BoundingBox compliant.
2011-05-22 20:41:18 +09:30
Jeff Muizelaar
bdfd860ae7 Avoid implicit conversion to double when rounding 2011-05-19 14:43:34 -04:00
Alexandros Frantzis
4d96859ba5 gl: Add fallback path for GLES2 implementations not supporting GL_OES_mapbuffer
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-05-10 08:37:51 +01:00
Alexandros Frantzis
c2b4bc6dea gl: Fall back to dlsym() if *GetProcAddress() fails
In strictly conforming EGL implementations, eglGetProcAddress() can be used
only to get extension functions, but some of the functions we want belong to
core GL(ES). If the *GetProcAddress function provided by the context fails,
try to get the address of the wanted GL function using standard system
facilities (eg dlsym() in *nix systems).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-05-10 08:36:03 +01:00
Alexandros Frantzis
2001d20747 gl: Define the float precision in the fragment shader for GLES2
According to the GLSL ES standard, the precision of variables in the fragment
shader should be explicitly defined (although mesa's compiler is not that
strict).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-05-10 08:35:53 +01:00