Commit graph

7028 commits

Author SHA1 Message Date
Uli Schlachter
3c4e0f0f1a push_group: Refuse working with unusable surface
Make cairo_push_group() fail when the context's target surface is finished.

This fixes the api-special-cases for the xcb backend:

   Detected error during xcb run: error=9, seqno=0x13c, major=53, minor=0

The problem was that the Pixmap for the cairo surface was already freed and
cairo still tried to use it again as the drawable in a CreatePixmap request.

Signed-off-by: Uli Schlachter <psychon@znc.in>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-08-13 19:21:57 +02:00
Uli Schlachter
18633b0810 surface: Error out on finished surfaces
Finished surfaces and surfaces with an error status must not be usable anymore,
so refuse to work on them.

This improves the result for api-special-cases.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=68014

Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-08-13 19:21:02 +02:00
Behdad Esfahbod
46d9db96d4 [ft] Ensure alignment of bitmaps received from FreeType 2013-08-04 20:12:06 -04:00
Behdad Esfahbod
34a747e7bd [ft] Fix alignment 2013-08-04 20:11:51 -04:00
Behdad Esfahbod
0554d76402 [ft] Add missing include 2013-07-29 22:41:46 -04:00
Behdad Esfahbod
7d26341072 [ft] Fix math 2013-07-29 19:20:33 -04:00
Behdad Esfahbod
9444ef09cc Support 2bit and 4bit embedded bitmaps 2013-07-29 19:10:46 -04:00
Adrian Johnson
274863be08 type1-subset: Don't try to rename non winansi glyphs
When the latin subset contains glyphs that use the seac operator to
combine two glyphs, additional non winansi glyphs are added to the
subset.  These extra glyphs do not have a winansi name so they can't
be renamed.

Based on a patch by Salvador Ortiz.

Bug 67324
2013-07-28 09:30:05 +09:30
Henry Song
03c81d414d gl/msaa: Always use scissor when clipping
Even when using the stencil buffer for clipping, always scissor the clip
extents. This simplifies the code a bit.
2013-07-15 19:27:29 -07:00
Henry Song
8c710ed872 gl/msaa: Disable stencil and scissor during framebuffer blit
When blitting the framebuffer during transitions to and from
multi-sampling mode, we need to disable the stencil and scissor test so
that the entire surface is preserved. This fixes the bitmap-font test
for the MSAA compositor.
2013-07-15 19:27:24 -07:00
Henry Song
be2c09a1f5 gl/msaa: Properly destroy stencil buffer clip cache
When replacing the stencil buffer clip cache or destroying a surface,
destroy the cached clip. This prevents the clip from leaking.
2013-07-15 19:27:19 -07:00
Behdad Esfahbod
2cc353c3db Towards support loading color glyphs from FreeType
See comments.
2013-07-05 16:03:25 -06:00
Behdad Esfahbod
e738079302 [ft] Fix wrong assumptions
If subpixel rendering is enabled, but FT returns a 8bit gray bitmap
(perhaps because the font has 8bit embedded bitmaps) we were hitting
the assertions because the assumptions made were wrong.  Fix up.
2013-07-05 15:59:45 -06:00
Behdad Esfahbod
a0f556f37f [ft] Fix memory bug in copying bitmaps 2013-07-05 15:59:45 -06:00
Uli Schlachter
9f9796920f xcb: Fix some uninitialized variable warnings
Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-07-04 21:57:12 +02:00
Uli Schlachter
2170bdbb12 image compositor: Always finish the span renderer
In some obscure conditions that I don't really understand, the image compositor
did not finish a span renderer that it created. This could then cause the last
row of the span to be ignored.

Fixes: clip-complex-bug61492

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=61592
Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-07-04 21:57:12 +02:00
Eric Anholt
7b8fc77bb9 gl: Move glGetUniformLocation to shader compile time.
The lookup of the string names has significant overhead, which is why GL
gives you glGetUniformLocation so that you reference uniforms by
constant integers in your high performance path.

Reduces cairo-perf-trace runtime of firefox-planet-gnome by 1.06767% +/-
0.289265% (n=72) on my IVB macbook air.

Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-28 11:53:04 +01:00
Chris Wilson
4d9439132d check: Fix check-def.sh for variations in GCC's linker
We now need to exclude bss and data sections from the symbol list.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-21 20:18:40 +01:00
Chris Wilson
7b80613d6d test: Use the highest precision rendering for shapes for generating ref results
The test-traps and test-base surfaces are used for generating the
reference results, and so they should opt for using the best rendering
paths through the traps- and base-compositors.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-21 17:30:47 +01:00
Chris Wilson
5589e80e2b xml: Handle clip-boxes in the updated cairo_clip_t
Edward Zimmerman pointed out that the xml surface had bitrotted slightly
and no longer understand the new clip layout - in particular that we can
have clips without a path, but just with boxes instead.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-21 12:01:32 +01:00
Chris Wilson
2bfb9e9001 svg: Unwrap recording surfaces
As a first step towards bring SVG uptodate with the various new
patterns, first we need to prevent SVG crashing when it mishandles an
unknown recording surface.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-20 20:47:18 +01:00
Chris Wilson
b7331f0c52 gstate: Speed up stroked path extents
We can skip the intermediate evaluation of the trapezoids for
determining the extents of a stroked path by using the relatively new
functions for computing the contours of the stroke. Then we can simply
use the bbox of the points within the contours to retrieve the path
extents - which is already provided by the polygon holding the contours
of the stroke. This provides a faster result with less numerical
inaccuracy due to fewer stages required in the computation

References: https://bugs.freedesktop.org/show_bug.cgi?id=62375
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-20 14:26:21 +01:00
Chris Wilson
e079e4e229 image: Mark the data as owned after stealing the snapshot's image
Victor Goya found that we ended up leaking memory after reading a PNG
into an image surface and drawing that onto a PDF surface. In
particular, he discovered that

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

introduced a path to steal the image data for a snapshot (and thereby
avoid a redundant copy), but that path then lead to the leak of the
"owned" data.

Reported-by: Victor Goya <victor.goya@af83.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-20 14:02:14 +01:00
Chris Wilson
f39eef8524 pdf: Fix compiler warning for use of unitialised variable along error path
cairo-pdf-surface.c: In function '_cairo_pdf_surface_add_source_surface.isra.20':
cairo-pdf-surface.c:1461:10: warning: 'unique_id' may be used uninitialized in this function [-Wmaybe-uninitialized]

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-20 11:11:20 +01:00
Chris Wilson
80641f4adc pdf: Improve consistency in use of cairo_int_status_t
Suppress several compiler warning for mixing
cairo_status_t/cairo_int_status_t enums.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-20 11:09:53 +01:00
Bryce W. Harrington
982f288460 gl: Quell warning about incompatible pointer type
mask is a cairo_surface_t pointer, and is cast to a cairo_gl_surface_t
pointer in the _cairo_gl_surface_draw_image() call.
texture.owns_surface also expects mask to be a cairo_gl_surface_t
pointer, so apply the same cast here as well.

Fixes the following warning:

 cairo-gl-traps-compositor.c:370:35: warning: assignment from
  incompatible pointer type [enabled by default]

Ref.: 38bf7a65

Signed-off-by: Bryce Harrington <b.harrington@samsung.com>
2013-06-20 11:00:37 +01:00
Bryce W. Harrington
aa764a3bbc pdf: Assure compiler that data, data_size will always be initialized
There are only three possible color states:  COLOR, GRAYSCALE, or
MONOCHROME thus data and data_size will always be set to some value,
so assert the default is never reached.

Fixes these warning:
  cairo-pdf-surface.c:2517:32: warning: ‘data_size’ may be used
   uninitialized in this function [-Wuninitialized]
  cairo-pdf-surface.c:2338:19: note: ‘data_size’ was declared here
  cairo-pdf-surface.c:2446:11: warning: ‘data’ may be used uninitialized
   in this function [-Wuninitialized]
  cairo-pdf-surface.c:2337:11: note: ‘data’ was declared here

Signed-off-by: Bryce Harrington <b.harrington@samsung.com>
2013-06-20 11:00:23 +01:00
Bryce W. Harrington
27cb80b848 type1-subset: Fix typos in function comment
Signed-off-by: Bryce Harrington <b.harrington@samsung.com>
2013-06-20 10:58:52 +01:00
Bryce W. Harrington
f893acd60d type1-subset: Quell warning about uninitialized array_start
Since we explicitly set font->subset_subrs to false, there's no way the
warned code will be executed, but perhaps the compiler is confused by
the goto jump.

Signed-off-by: Bryce Harrington <b.harrington@samsung.com>
2013-06-20 10:57:57 +01:00
Chris Wilson
519dff51db scaled-font: Prevent a recursive mutex lock for removing a failed glyph
If we fail to create a glyph, and it is the only one in the glyph page,
we then pluck that page out of the global glyph cache. The cache destroy
callback tries to take the scaled_font lock again, causing a lockup.
Rework the error path to avoid taking that lock in this case - still a
potential lock ordering issue remains.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-18 16:08:27 +01:00
Chris Wilson
df1ca22ada recording: Prevent invalid memory access with zero length command array
If we try to sort a zero length array, we access invalid memory.
However, for a zero length command array, we can trivially compute the
number of visible indices, 0.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-18 15:48:26 +01:00
Chris Wilson
e519d6f986 recording: Fix inconsistent usage of types for indices
We were wantonly mixing unsigned/signed integers for our index and
counters, leading to compiler warnings. Be bold, and use unsigned
consistently.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-11 10:02:13 +01:00
Bryce W. Harrington
b45c79ff8a image: Quell warning about signed/unsigned int comparison.
Restore (int) cast that was dropped in e7e1ac23.

Signed-off-by: Bryce Harrington <b.harrington@samsung.com>
2013-06-11 10:02:13 +01:00
Chris Wilson
85c2a0d76a xlib: Unlike the visual when destroying it
Otherwise we leave dangling pointers in the visual list, leading to
memory corruption when using low bitdepth servers.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-06-03 13:56:00 +01:00
Chris Wilson
41bef0fc38 traps: Ensure that we correctly clip when using multiple clip boxes
We need to be more careful when trying to discard a clip to be sure that
it is truly not required. In particular, we need to not throw a way a
clip region when it has more than one box intersecting the mask.

Reported-by: Alexander Larsson
Bugzilla: https://bugzilla.gnome.org/show_bug.cgi?id=697357
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-05-30 21:05:23 +01:00
Chris Wilson
631bf29925 directfb: Correctly chain up map-to-image/unmap to the image backend
Fixes the infinite recursion reported by jojo.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-05-14 11:36:27 +01:00
Martin Robinson
728e58e60f gles: Switch default framebuffer destinations properly
Make _cairo_gl_context_bind_framebuffer handle different types of GLES
surfaces properly Since, the multisampling setting of a surface never changes
in for GLES, so the first thing we do when setting the destination is to
ignore the requested multisampling setting. This simplifies all
following logic.
2013-05-13 15:24:55 -07:00
Martin Robinson
1704292e49 gl: Fix compiler warnings in the GL backend 2013-05-07 12:01:17 -07:00
Martin Robinson
e83943ec9a gl: Bind the default framebuffer before calling gl{Read|Draw}Buffer
Fix more fallout from separating framebuffer binding from setting the
destination. In some cases it is sufficient to call
glDrawBuffer/glReadBuffer before binding the framebuffer, but the
masking-filling-stroking test of cairo-gl-smoke-tests fails if the order
is incorrect.
2013-05-06 10:56:26 -07:00
Martin Robinson
32bd6aa46d gl: Update transformation when surface size changes
In my previous commit I mistakenly removed the transformation matrix
update when cairo_gl_surface_set_size is called. This change restores
it.
2013-04-26 15:22:48 -07:00
Martin Robinson
8da704ca7c gl: Separate framebuffer bind from destination selection
Disentangle the action of binding the framebuffer from setting the
destination. This straightens up the code a bit and avoids some redundant
operations (such as reacquiring the context) when simply switching from
the multi-sample framebuffer to the single-sample framebuffer and vice
versa.
2013-04-26 15:03:46 -07:00
egag
793f8223d4 xlib: Aquire display before using it in DEBUG message. 2013-04-25 09:03:02 +01:00
Henry Song
498421bec9 gl/msaa: Resolve multisampling on surface flush
When flushing a surface, we must resolve multisampling for desktop GL.
This allows use of the original surface texture in any following raw GL
operations. This fixes accelerated canvas with WebKitGTK+ using the MSAA
compositor.
2013-04-17 10:27:58 -07:00
Chris Wilson
2dd2c826a5 png: Avoid marking the surface as in error after a png warning
It turns out that libpng will continue to load an image after throwing a
warning, and that libpng16 now throws warnings for images that libpng15
and earlier loaded without error. As we were happily loading those
images into cairo surfaces before, we are therefore being overzealous
in throwing an error now - so just squelch the warning.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-04-16 11:07:03 +01:00
Chris Wilson
a64ce09715 xlib: Trim uploads for surfaces extended by PAD
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-04-06 09:09:23 +01:00
Chris Wilson
04b9d5d9b1 xlib: Wrap errors generating sources in an error surface
Once upon a time the wrapping was provided by the caller, but the
current requirement is that the error is propagated back as an error
surface.

Bugzilla: http://bugs.freedesktop.org/show_bug.cgi?id=63196
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-04-06 09:07:24 +01:00
Marc-André Lureau
e66e9ac12e win32: fix corrupted drawing
Fix src bitmap coordinates, which origin is bottom-left. This is
apparently a bug in StretchDIBits(), according to some comments on
MSDN API documentation.

The backend used to have this coordinate change in the past:

            if (!StretchDIBits (dst->dc,
                                /* dst x,y,w,h */
                                dst_r.x, dst_r.y + dst_r.height - 1,
                                dst_r.width, - (int) dst_r.height,
                                /* src x,y,w,h */
                                src_r.x, src_extents.height - src_r.y + 1,
                                src_r.width, - (int) src_r.height,
                                src_image->data,
                                &bi,
                                DIB_RGB_COLORS,
                                SRCCOPY))

https://bugs.freedesktop.org/show_bug.cgi?id=61876
2013-04-02 08:39:05 +01:00
Michael Hutchinson
fdec6b3759 quartz: Don't release memory we don't own
This was causing crashes due to double frees.

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

Signed-off-by: Benjamin Otte <otte@redhat.com>
2013-03-29 02:40:13 +01:00
Adrian Johnson
9e0748e223 pdf: fix typo in bbox check
http://lists.cairographics.org/archives/cairo/2013-March/024186.html
2013-03-27 08:08:32 +10:30
Uli Schlachter
be5eabb66a xcb: Clear temporary replay image in recording playback
This gets rid of random noise that we got from the X11 server due to
uninitialized memory.

Fixes: pdf-surface-source, ps-surface-source, svg-surface-source

Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-03-22 18:19:00 +01:00