Commit graph

359 commits

Author SHA1 Message Date
Chris Wilson
4790bbf596 boilerplate: Skip testing of null surfaces
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-09-26 11:51:27 +01:00
Dave Yeo
a7b2c28adf On OS/2, WIFSIGNALED and WTERMSIG are prototyped in sys/wait.h
boilerplate/cairo-boilerplate-pdf.c |    4 ++++
 boilerplate/cairo-boilerplate-ps.c  |    4 ++++
 boilerplate/cairo-boilerplate-svg.c |    4 ++++
 build/configure.ac.system           |    2 +-
 4 files changed, 13 insertions(+), 1 deletions(-)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-09-18 08:50:26 +01:00
Uli Schlachter
a1be14693b boilerplate-xcb: Print sequence numbers
The boilerplate code will now also print the low 16 bits of the sequence number
for errors and events. This should make it a lot easier to find errors in e.g.
a long xtrace output.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-09-16 17:45:27 +02:00
Uli Schlachter
7ba28ff563 cairo-xcb: Require libxcb 1.6
Since commit 968eb30bba, we use xcb_discard_reply(). This function was
added in libxcb 1.6.

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

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-09-16 17:45:27 +02:00
Chris Wilson
fcea0f8e08 test: Use the test-traps as the reference images for xlib/xcb
The test-traps provides a reference implementation of the
traps-compositor as used by xlib, so we can use it to generate the
reference images as well. (Of course checking that test-traps is itself
correct and only differs in the renderer! ;-)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-09-16 11:09:22 +01:00
Chris Wilson
1e67fb4490 test: Complete set of baseline reference images
test-base basically implements rendering ala cairo-1.0 and so serves as
a useful baseline for comparing enhancements and to regression test the
core libraries.
2011-09-15 13:10:25 +01:00
Chris Wilson
af9fbd176b Introduce a new compositor architecture
Having spent the last dev cycle looking at how we could specialize the
compositors for various backends, we once again look for the
commonalities in order to reduce the duplication. In part this is
motivated by the idea that spans is a good interface for both the
existent GL backend and pixman, and so they deserve a dedicated
compositor. xcb/xlib target an identical rendering system and so they
should be using the same compositor, and it should be possible to run
that same compositor locally against pixman to generate reference tests.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

P.S. This brings massive upheaval (read breakage) I've tried delaying in
order to fix as many things as possible but now this one patch does far,
far, far too much. Apologies in advance for breaking your favourite
backend, but trust me in that the end result will be much better. :)
2011-09-12 08:29:48 +01:00
Chris Wilson
2220693a40 Introduce cairo_mime_surface_t
The mime surface is a user-callback surface designed for interfacing
cairo with an opaque data source. For instance, in a web browser, the
incoming page may be laid out and rendered to a recording surface before
all the image data has finished being downloaded. In this circumstance
we need to pass a place holder to cairo and to supply the image data
later upon demand.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-15 00:16:09 +01:00
Chris Wilson
62e48b01b4 script: enable by default
I'm willing to make this a supported backend as I find it to be an
invaluable debugging tool...

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-14 21:01:29 +01:00
Chris Wilson
eee66899cd Introduce cairo_surface_observer_t for performance analysis
Another logging passthrough surface that records the style of operations
performed trying to categorise what is slow/fast/important.

In combination with perf/cairo-analyse-trace it is very useful for
understanding what a trace does. The next steps for this tool would be
to identify the slow operations that the trace does. Baby steps.

This should be generally useful in similar situations outside of perf/
and should be extensible to become an online performance probe.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-14 20:54:53 +01:00
Chris Wilson
7a17e4362e boilerplate: improve fidelity of surface extraction
Create an image surface of equivalent content to the original.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 11:08:58 +01:00
Uli Schlachter
83df0ab2b6 XCB: Store the flags per-connection only
Every xcb surface had its own copy of the flags from the time that it was
created. This means that, if you want to make use of
cairo_xcb_device_debug_cap_xrender_version() and
cairo_xcb_device_debug_cap_xshm_version(), you first had to create a dummy xcb
surface, use that to get access to the cairo_device_t so that you can use these
functions and only then create your real surface, because the change only
affected new surfaces.

This commit changes everything to use the connection's flag and removes the
per-surface flags. This avoids the dummy surfaces completely.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-07-21 16:51:26 +02:00
Chris Wilson
d5d4a0f240 xcb: Take advantage of clip-boxes
A demonstration of step 2, improves performance for selected benchmarks
on selected GPUs by up to 30%.

firefox-fishbowl on snb {i5-2520m): 42s -> 29s.
firefox-talos-gfx on snb: 7.6 -> 5.2s.
firefox-fishbowl on pnv (n450): 380 -> 360s.

Whist this looks like it is getting close to as good as we can achieve,
we are constrained by both our API and Xrender and fishbowl is about 50%
slower than peak performance (on snb).

And it fixes the older performance regression in firefox-planet-gnome.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-07-20 13:19:38 +01:00
Chris Wilson
507b8abcf6 Excise xcb-drm
The experiment was at best a pyrrhic victory. Whilst it did show that
you could successfully subvert cairo_xcb_surface_t and provide the
rendering locally faster (than the xlib driver at that time), any
performance benefits were lost in the synchronisation overheads and
server-side buffer allocation.

Once cairo-gl is mature, we need to look at how we can overcome these to
improve client-side rendering

In the meantime, cairo-xcb is no longer my playground for
experimentation and is shaping up to become a stable backend...

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-07-14 12:46:26 +01:00
Chris Wilson
5d9da3decf Excise DRM-Xr
I've since incorporated (nearly) all the features from cairo-drm into
xf86-video-intel, making this experiment defunct.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-07-14 12:35:19 +01:00
Uli Schlachter
b6c972897b Xlib: Fix boilerplate to work with xlib-xcb
Xlib boilerplate includes cairo-xlib-surface-private.h, so that it can cast the
xlib cairo_surface_t to cairo_xlib_surface_t and then mess with some internals
of that struct.

However, xlib-xcb doesn't use that struct and thus this results in random memory
corruption. "Luckily", all the fields that this messes with don't corrupt any
fields in cairo_xlib_xcb_surface_t, but instead this writes past the end of the
buffer that was returned from malloc.

This commit just adds an #if to disable this code section since I have no idea
what a proper fix would be. This means that the xlib-fallback backend doesn't
actually test any fallbacks with xlib-xcb, however it never did so anyway.

If you have any idea how to fix xlib-fallback with xlib-xcb, please speak up.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-07-03 15:16: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
Haithem Rahmani
8fb9a6727e boilerplate: Use correct flag type in DFBWindowDescription
The window description flag macros are prefixed with DWDESC_.

The issue was not noticed because DWDESC_CAPS and DSDESC_CAPS have the
same value.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=37049
2011-06-20 11:43:38 +02: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
00a5a13612 boilerplate: Silence MSVC warnings
On Win32 INT_MIN/MAX macros are defined in stdint.h, which makes MSVC
complain about the following redefinitions:

...\stdint.h(73) : warning C4005: 'INT16_MIN' : macro redefinition
...\boilerplate\cairo-boilerplate.h(64) : see previous definition of 'INT16_MIN'
...\stdint.h(77) : warning C4005: 'INT16_MAX' : macro redefinition
...\cairo-boilerplate.h(67) : see previous definition of 'INT16_MAX'
...\stdint.h(80) : warning C4005: 'UINT16_MAX' : macro redefinition
...\boilerplate\cairo-boilerplate.h(70) : see previous definition of 'UINT16_MAX'
2011-06-20 10:24:20 +02:00
Andrea Canciani
5cb18fcec7 test: Fix compilation on win32
The Microsoft C Compiler does not accept empty-initialized arrays:

cairo-boilerplate-win32-printing.c(373) : error C2059: syntax error : '}'
cairo-boilerplate-win32-printing.c(374) : warning C4034: sizeof returns 0
2011-06-14 16:46:32 +02:00
Andrea Canciani
510f0f391c boilerplate: Add generation of constructors on win32
cairo-boilerplate-constructors.c is one of the sources required to
build the boilerplate.

This file is generated by a script, invoked by the appropriate make
target during the build.
2011-06-14 16:46:32 +02:00
Chris Wilson
d673b9547f boilerplate: Introduce create_similar hook
A deficiency of cairo-perf-trace is that it currently always uses similar
surfaces for new surface which are kindly cleared by Cairo. This does
not accurately reflect the captured trace and introduces large bandwidth
overheads that distort the profiles.

So we introduce a new boilerplate hook so that the targets can create a
surface without incurring additional overheads.

[Fixes the broken partial commit of bf1b08d066e.]

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-06-02 09:11:32 +01:00
Chris Wilson
bf1b08d066 perf 2011-06-02 08:57:13 +01:00
Chris Wilson
9bdfae6e21 boilerplate/xcb: Fix silly cut'n'paste errors in previous commit
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-06-01 16:57:30 +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
Alexandros Frantzis
1595f20bb7 boilerplate/egl: Add GLES2 support
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-05-10 08:35:47 +01:00
Alexandros Frantzis
f84653422a gl: Add GLESv2 backend to build system
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-05-10 08:34:17 +01:00
Uli Schlachter
f934491125 xcb boilerplate: Handle device offsets correctly
When running cairo-test-suite with "-a", backends are also tested with a
non-zero device offset. However, for "xcb-window&" the boilerplate incorrectly
overwrote the device offset with a zero offset again.

This caused all test results to be offset by 25 pixels which obviously makes all
tests fail.

Just removing the call to cairo_surface_set_device_offset solves the problem.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-03-04 16:37:13 +01:00
Alexandros Frantzis
00ffb09593 boilerplate/egl: Ensure that we are using an RGBA32 egl config 2011-02-18 09:45:00 -05:00
Uli Schlachter
9e7ce0c352 xcb: Automatically enable the backend if the libs are available
It looks like the cairo-xcb backend is in a good shape and hopefully will be a
supported backend for cairo 1.12.0. Let's see if this causes lots of new bugs to
be uncovered. :-)

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-01-26 17:54:13 +01:00
Uli Schlachter
a87001c063 xcb: Fix premature pixmap free in boilerplate cleanup
A xcb surface has to be finished before the associated drawable can be freed or
there will be X11 errors when the surface is later finished or used again.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-01-05 22:04:45 +01:00
Uli Schlachter
673c44d3e8 xcb: Check the check for errors in boilerplate
We have to make sure we received all errors that the X server sent out before we
can be sure there are none. To do so, we just have to send some request and wait
for its reply, because that guarantees that the replies/errors to all previous
requests were received.

_cairo_boilerplate_xcb_synchronize doesn't need this, because the GetImage
request already makes sure we received everything.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-01-05 22:04:45 +01:00
Uli Schlachter
51626ed2ee xcb: Check harder for X11 errors in boilerplate
This commit makes the boilerplate code check for errors from the X server before
disconnecting and during synchronize. This should make sure no errors are ever
lost and silently ignored.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-01-05 22:04:45 +01:00
Uli Schlachter
f8277dfdaf xcb: Only print the first error and ignore subsequent ones
It is quite likely that following errors are caused by the previous ones. To
avoid flooding users we now silently discard all the errors and events after the
first one.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-01-05 22:04:45 +01:00
Uli Schlachter
8a65279ee1 xcb: Add a define for some magic number
In X11, errors look like events with response_type == 0. Using a define looks
better than just a "trust me!".

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-01-05 22:04:45 +01:00
Uli Schlachter
8957e50632 xcb: Handle events in boilerplate
Cairo shouldn't cause any events during a test run. Verify this by explicitly
handling events, too.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-01-05 22:04:45 +01:00
Adrian Johnson
126108a6ac Boilerplate: Set fallback resolution using force_fallbacks function
cairo_set_fallback_resolution() does not work when testing rgb24 surfaces
2010-11-28 03:38:42 +10:30
Uli Schlachter
6383e1442c XCB: Check screen size in boilerplate
Trying to create a window for drawing that is larger than the available screen
space is a bad idea. When the test finishes and tries to grab the resulting
image from the X server, the window's area that is outside of the screen will
have undefined content.

Signed-off-by: Uli Schlachter <psychon@znc.in>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-11-07 12:51:56 +00:00
Benjamin Otte
661f4859cd Add cairo-gobject library
This library is supposed to contain GType declarations for Cairo types.
It is also meant to support gobject-introspection binding creation.
2010-08-07 20:19:27 +02:00
Benjamin Otte
142df6f963 configure: Disable xml backend by default
We don't want to enable it by default when nobody uses it.
2010-07-30 22:27:28 +02:00
Benjamin Otte
9f33f8453b configure: Disable tee backend by default
We don't want to enable it by default when nobody uses it.
2010-07-30 22:27:27 +02:00
Chris Wilson
bac5c28a18 boilerplate: Offset the xlib window
An idea courtesy of Benjamin Otte is to stress the drivers a bit more by
not rendering to 0,0. Under various circumstances rendering to a Window
is mapped onto the Screen root Window with a collection of offsets and
clips by X. It is easy for the driver to make a mistake and misrender...
2010-07-17 10:09:14 +01:00
Benjamin Otte
51b0c21f02 build: Add explicit dependcy to cxx lib
Otherwise the build will fail because it doesn't add the dependency
manually.

https://bugs.freedesktop.org/show_bug.cgi?id=29114
2010-07-16 19:49:53 +02:00
M Joonas Pihlaja
0152db263b build: Sync up autogenerated win32 build files. 2010-07-12 10:39:18 +03:00
Benjamin Otte
120b78ada7 build: Split boilerplate lib generation into two so's
Same thing as what was previously done for libcairo.so: Build an
intermediate lib for the (potential) C++ stuff.
2010-07-11 18:53:42 +02:00
Benjamin Otte
59c83117d7 build: Commit new versions of autogenerate Windows build files
The recent commits to the build system changed a bunch of stuff in
there, so update the files.
2010-07-09 18:55:11 +02:00
Benjamin Otte
fcfe7c6724 boilerplate: Add describe string
Print the pixman version we're using
2010-07-03 02:55:52 +02:00
Benjamin Otte
0a7135148a gl: Add describe string 2010-07-03 02:55:52 +02:00
Benjamin Otte
a1c4b001a5 boilerplate: Add a describe vfunc
This function is supposed to describe the backend in use. The describe
function is optional - and therefore initialized as NULL everywhere.
Note:
It is well known that the xlib backend uses X. What is not known is what
version the server supports or what graphics card it is running on. That
is the information the describe vfunc is supposed to provide.
2010-07-03 02:55:52 +02:00