Commit graph

10604 commits

Author SHA1 Message Date
Chris Wilson
ef0b2e43ee composite-rectangles: Update unbounded (clip extents) after reducing clip
So that the composite-rectangles remains consistent with the reduced
clip in case the individual compositors try to optimise their rendering
strategies based on the reduced clip and the overall extents.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-27 11:35:40 +01:00
Chris Wilson
36536d3eb8 spans-compositor: Use the tight clip-boxes for polygon construction
If we will be reducing the clip intersection to a single clip box check
during construction, it helps if we use the tight clip box.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-27 11:14:18 +01:00
Chris Wilson
7e856071a2 polygon-intersect: Exclude non-overlapping clip boxes from consideration
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-27 11:13:23 +01:00
Chris Wilson
3969f2c687 test: Add clip-disjoint-quad
Exercises a bug in the polygon intersection code demonstrated by Søren
Sandmann.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-27 09:58:50 +01:00
Uli Schlachter
9735d1d716 mark_dirty: Check surface status
This problem was introduced in commit "xlib: Implement SHM fallbacks and fast
upload paths". Before, cairo_surface_mark_dirty() directly called
cairo_surface_mark_dirty_rectangle() with special "magical arguments" and thus
didn't need any checks on the surface status.

Fixes: api-special-cases

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-25 11:58:18 +02:00
Uli Schlachter
2be125817a surface: Check reference count right before free
This makes sure that nothing took a reference during finishing and during
detaching user and mime-data.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-25 11:44:54 +02:00
Uli Schlachter
f2720e2ba1 xcb: Add a missing check for FillRectangles
Fixes: big-empty-box big-little-box operator operator-alpha
surface-pattern-operator unbounded-operator

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-25 11:39:42 +02:00
Uli Schlachter
b264ae76bd xcb: Check if traps are supported before using them
This code tried to optimize the clip away by intersecting the boxes with the
clip polygon. However, it also did so when the server didn't support traps.

Fixes: clip-stroke-unbounded clip-fill-nz-unbounded clip-fill-eo-unbounded
clip-fill clip-fill-rule a1-clip-fill-rule clip-group-shapes-circles
clip-intersect clip-nesting clip-operator clip-push-group clip-polygons
clip-shape clip-text clip-twice inverted-clip mask random-clip
rotate-clip-image-surface-paint trap-clip unantialiased-shapes

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-25 11:34:52 +02:00
Uli Schlachter
0ccbb83eb8 xcb: Check the right flag for FillRectangles
Fixes: operator-source

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-25 11:31:04 +02:00
Uli Schlachter
b33d83ad49 xcb: Verify extension support before sending
This commit adds lots of asserts. These asserts verify for each extension
request that we send that the server really supports this.

Sadly, this causes 28 assertion failures in the test suite with xcb-render-0.0.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-25 11:27:59 +02:00
Uli Schlachter
de31018bdd xcb: Switch to compositor architecture
This commit removes the hand-written code in cairo-xcb-surface.c and instead
makes use of cairo_compositor_t. Surprisingly, this doesn't break a single test
case. :-)

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-24 09:44:10 +02:00
Uli Schlachter
6300579a8b xcb: Remove unimplemented cairo compositor
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-24 09:44:10 +02:00
Uli Schlachter
8d86ea4dcb xcb: Fix a warn_unused_result warning
cairo-xcb-surface.c: In function '_drawable_changed':
cairo-xcb-surface.c:1434:39: warning: ignoring return value of '_cairo_surface_begin_modification', declared with attribute warn_unused_result [-Wunused-result]

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-24 09:42:43 +02:00
Uli Schlachter
d6253dd531 Remove an unimplemented function declaration
This was added in commit 2458120dee.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-24 09:42:43 +02:00
Uli Schlachter
08e3f4614b Fix make check
The inline functions in cairo-backend-private.h tried to dereference a cairo_t,
which wasn't defined. Fix this by including cairo-private.h.

In cairo-mempool-private.h, size_t is used but stddef.h is not included.

Fixes:

  CHECK cairo-backend-private.h
In file included from headers-standalone-tmp.c:1:0:
./cairo-backend-private.h: In function ‘_cairo_backend_to_user’:
./cairo-backend-private.h:179:7: error: dereferencing pointer to incomplete type
./cairo-backend-private.h: In function ‘_cairo_backend_to_user_distance’:
./cairo-backend-private.h:185:7: error: dereferencing pointer to incomplete type
./cairo-backend-private.h: In function ‘_cairo_user_to_backend’:
./cairo-backend-private.h:191:7: error: dereferencing pointer to incomplete type
./cairo-backend-private.h: In function ‘_cairo_user_to_backend_distance’:
./cairo-backend-private.h:197:7: error: dereferencing pointer to incomplete type
  CHECK cairo-mempool-private.h
In file included from headers-standalone-tmp.c:1:0:
./cairo-mempool-private.h:61:5: error: unknown type name ‘size_t’
./cairo-mempool-private.h:62:5: error: unknown type name ‘size_t’
./cairo-mempool-private.h:68:8: error: unknown type name ‘size_t’
./cairo-mempool-private.h:73:44: error: unknown type name ‘size_t’

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-24 09:42:43 +02:00
Behdad Esfahbod
1054840d86 Fix malloc-stats for newer glibc 2012-09-22 15:59:36 -04:00
Behdad Esfahbod
38c6084758 [util/malloc-stats] Use tighter spacing. 2012-09-17 16:27:04 -04:00
Weng Xuetian
59248fb262 xlib: Reset fallback counter when discarding the fallback
References: https://bugs.freedesktop.org/show_bug.cgi?id=54657
2012-09-13 22:57:45 +01:00
Chris Wilson
5c59d989f9 xlib: Destroy the fallback damage along with the fallback surface
Whenever we discard the fallback surface, we need to destroy the
associated damage tracking, so move this into the common discard
routine.

This should fix the issue when trying to flush the fallback before
the user modifies any foreign Drawables. The current code issued the
flush and then explicitly discard the fallback, but unless it was idle
at the time of the flush the associated damage would not have also been
destroyed. Asserts followed.

References: https://bugs.freedesktop.org/show_bug.cgi?id=54657
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-13 22:54:18 +01:00
Chris Wilson
97282ef51a xlib: Do not call _cairo_xlib_surface_flush directly
Use the higher level layer to be sure we detach any snapshots and other
cached data that is invalidated along with the change of Drawable.

Pointed out by the eternally wise Uli Schlachter.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-13 17:00:24 +01:00
Chris Wilson
69d97d97be xlib: Force the fallback flush before updating the external Drawable
_cairo_surface_begin_modification() performs an internal flush, for
which the xlib backend skips flushing the fallback surface as it will
continue to use it for the subsequent operation. In the case where we
are flushing prior to updating the Drawable, we need to perform an
external flush which will trigger the posting of the damage from the
fallback surface.

Reported-by: Weng Xuetian <wengxt@gmail.com>
References: https://bugs.freedesktop.org/show_bug.cgi?id=54657
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-13 16:45:46 +01:00
Chris Wilson
6ee216000a xlib: Explicitly discard the fallback shm pixmap upon user modification
If the user changes the size of the underlying drawable, we much make
sure that we discard the current ShmPixmap in order to create a new
fallback pixmap of the correct size next time.

Reported-by: Weng Xuetian <wengxt@gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-13 15:30:27 +01:00
Chris Wilson
e2c4bb9465 xlib: Fix regression in cairo_xlib_surface_set_drawable()
In commit 0bfd2acd35
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Mon Aug 13 01:34:12 2012 +0100

    xlib: Implement SHM fallbacks and fast upload paths

I made the mistake of inverting the logic for
cairo_xlib_surface_set_drawable() causing it then to never update.

Thanks to Uli Schlachter for spotting my error.

References: https://bugs.freedesktop.org/show_bug.cgi?id=54657
Reported-by: Weng Xuetian <wengxt@gmail.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-13 12:40:49 +01:00
Chris Wilson
77330f6b84 xcb: Always flush the fallback damage to foreign drawables
We need to flush any fallback to a foreign drawable upon finish.
However, we must be careful not to attach the snapshot in that case or
else we end up with an expected reference. This is similar to the
treatment of xlib/shm in commit f864e2d70.

Reported-by: Henry Song <henry.song@samsung.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-11 18:24:33 +01:00
Andrea Canciani
93774ac034 test: Add degenerate closed path case to get-path-extents
This is a testcase to ensure that we do not regress
https://bugs.freedesktop.org/show_bug.cgi?id=54549 (which is already
fixed by b0c466e27a).
2012-09-10 23:16:08 +02:00
Chris Wilson
f34b87f6d7 path: Convert from backend coordinates back into user coordinates
Fixes regression from commit 83bfd85a13
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Fri Apr 23 19:45:26 2010 +0100

    Implement cairo_backend_t

As there exists no public API to perform the operation we needed, and we
failed to create one, the constructed path failed to correctly remove
the device offset.

Fixes copy-path under device translation.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=54732
Reported-by: Benjamin Berg <benjamin@sipsolutions.net>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-10 15:09:18 +01:00
Chris Wilson
df6780442f context: Add missing functions to transform between user and backend coordinates
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-10 15:09:15 +01:00
Chris Wilson
f864e2d70f xlib/shm: Explicitly release shm surface if we do not own the pixmap
In this case we want to prevent the short-circuiting of the flush of the
ShmPixmap that is ordinarily performed during finish().

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-08 16:41:23 +01:00
Chris Wilson
558f0a5ab4 image: Check for an error surface before dereferencing the backend
As the surface->backend will be NULL in such an error surface, and we
may be legitimately doing boundary checks to reject the error surface.
The alternative would be to set an explicit error surface backend.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=54664
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-08 15:12:58 +01:00
Chris Wilson
b0c466e27a path: Update last_move_point after move-to
Reported-and-tested-by: Jussi Kukkonen <jku@linux.intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=54549
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-05 14:55:55 +01:00
Chris Wilson
83759e7d59 default-context: Convert the relative path segments into the backend coordinates
When transforming the incoming paths, the goal is to transform them from
user space onto the target coordinate system. Currently for relative
paths we used user_to_device_distance as we presumed that there was no
backend scale factor. However, Alex Larsson noticed that these then
broke when playing around with such a device transform...

Reported-by: Alexander Larsson <alexl@redhat.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-09-04 14:47:22 +01:00
Chris Wilson
c0b1b17818 xlib/shm: Masquerade as an ordinary ShmCompletionEvent
Needs a bit of extra work to create the extension event, but this leaves
the application with only a single spurious event to filter.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-27 13:21:35 +01:00
Chris Wilson
be2973e405 bentley-ottmann: Cache the most recent edge colinearity check
We frequently compare neighbouring edges for their colinearity (in case
we can skip over them in the active list) so we can record the last
comparison and reuse the result next time.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:59:46 +01:00
Chris Wilson
637659fb51 bentley-ottmann: hint that the insertion compare function should be inlined
Albeit it too large for gcc to automatically inline, it is only used
from within a single function. Hopefully gcc can optimise better with
the hint.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:16:32 +01:00
Chris Wilson
3c6e4311fb bentley-ottmann: Only check the pairs of coordinates for equality.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:16:32 +01:00
Chris Wilson
535b4e970c bentley-ottman: Remove a few superfluous status propagation
For the traps it is simpler if we report the status at the end, and
no-op the accumulation of the trap after hitting the error condition.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:16:32 +01:00
Chris Wilson
b66065537c stroke: Compute bounds for fallback stroker (typically dashing)
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:15:53 +01:00
Chris Wilson
99593538a9 stroke: Convert fallback stroker to new pen vertex finder
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:14:17 +01:00
Chris Wilson
4eb8e9f861 stroke: Convert a very small round-join into a miter
Avoid adding a bevel join if the miter point is within tolerance.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:13:28 +01:00
Chris Wilson
fa93fc63b6 stroke: Precompute the line half-width
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:12:52 +01:00
Chris Wilson
3cf6551ac7 stroke: Use new pen vertex range finders
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:10:42 +01:00
Chris Wilson
74e9ae8cdf pen: Use bisection to speed up vertex finding
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:10:07 +01:00
Chris Wilson
aeb039b16d stroke: Skip spline evaluation when stroking to a polygon
If the spline is wholly outside the clip region, accounting for the
stroke width and additional rendering, then we can simplify that spline
with a straight line.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:08:02 +01:00
Chris Wilson
bdf83008f4 compositor: Skip invisible strokes
If the pen is reduced to a single point, it is effectively invisible
when rasterised, so skip the stroke composition.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-26 11:07:57 +01:00
Chris Wilson
fc38d7375d xlib/shm: Add missing release of the display after GetImage
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-24 17:39:35 +01:00
Chris Wilson
5355eab17d xlib/shm: Reduce the frequency at which we emit events
Flushing the shm operation is a fairly rare event, as it is typically
only involved with mixed rendering on a similar image, and should be
triggering its own events. Therefore we should be able to reduce our
event emission to the critical points in order to limit the amount of
extra overhead we generate.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-24 11:38:58 +01:00
Martin Robinson
5c4087af81 gl: Add a non-thread-aware mode for GL devices
GLX and EGL devices are thread-aware currently. This
is safe, but on certain GPUs can be very expensive. In
this patch, we expose a new API which turns off the
safety feature in cases where performance is a priority.
2012-08-22 13:49:14 -07:00
Martin Robinson
9741099093 gl: Remove the shader language version abstraction
Cairo only needs to support one version of the shader language API,
thanks to the dispatch table. This seems unlikely to change any time
soon. This makes the addition of new features, such as a uniform
location cache, simpler.
2012-08-22 10:42:18 -07:00
Chris Wilson
5c77b4df14 xlib/shm: Only check if we are expecting an event
As the XCheckWindowEvent() has the unwanted side-effect of flushing the
output queue when there is no event available (libX11 seems to be
entirely anti-performant), we need to roll our own that only checks the
already available event queue.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-21 22:20:02 +01:00
Chris Wilson
aa5c712309 xlib/shm: Use a genuine event rather than an open-ended request
Adding lots of requests without popping the replies causes xcb to
continually sort large lists of unprocessed data. Use an event instead
and regularly dequeue them.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-08-21 10:34:23 +01:00