[cairo] Question on DirectFB backend

Lionel Landwerlin llandwerlin at gmail.com
Fri Nov 20 01:39:11 PST 2009

Hi folks,

I'm working with buildroot (http://buildroot.org/) to generate rootfs for
embedded systems.
I'm trying to upgrade the current cairo package in buildroot to the  1.8.8
version. The current package uses cairo-1.6.4 + one patch.

Here is the patch :

I reapplied manually the patch and found that most of it has already been
applied in the 1.8.8 version, some other part has been rewritten and there
is only one part which bother me.

Here is the diff after rebasing the patch on top of 1.8.8 (differences on
traces has been dropped) :

diff --git a/src/cairo-directfb-surface.c b/src/cairo-directfb-surface.c
index bb02dbf..65f2d55 100644
--- a/src/cairo-directfb-surface.c
+++ b/src/cairo-directfb-surface.c
@@ -609,6 +609,8 @@ _cairo_directfb_surface_release_dest_image
(void                  *abstract_surf
                     surface->dfbsurface->Blit (surface->dfbsurface,
                                                buffer, NULL,
+    surface->dfbsurface->ReleaseSource (surface->dfbsurface);

     cairo_surface_destroy (&image->base);
@@ -848,6 +850,9 @@ _directfb_finish_composite (cairo_directfb_surface_t
                             cairo_surface_attributes_t *src_attr)
     _cairo_pattern_release_surface (src_pattern, src, src_attr);
+    if (dst->dfbsurface)
+         dst->dfbsurface->ReleaseSource( dst->dfbsurface );

@@ -1555,6 +1560,7 @@ _directfb_acquire_font_cache
(cairo_directfb_surface_t     *surface,

            new_cache->dfbsurface->Blit (new_cache->dfbsurface,
                                         cache->dfbsurface, NULL, 0, 0);
+        new_cache->dfbsurface->ReleaseSource (new_cache->dfbsurface);

            _directfb_destroy_font_cache (cache);
            scaled_font->surface_private = cache = new_cache;
@@ -1778,6 +1784,7 @@ _cairo_directfb_surface_show_glyphs
(void                *abstract_dst,
     RUN_CLIPPED (dst, NULL,
                 dst->dfbsurface->BatchBlit (dst->dfbsurface,
                                             cache->dfbsurface, rects,
points, num));
+    dst->dfbsurface->ReleaseSource (dst->dfbsurface);


Does someone know why theses ReleaseSource calls has been added ?
I guess this has something to do with the fact that cairo owns a lock on the
surfaces that requires frequent EngineSync calls when blitting (which slows
down the hardware acceleration), but I'm not really sure.

If someone has some comment on this, it will be greatly appreciated.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cairographics.org/archives/cairo/attachments/20091120/8681b99a/attachment.html 

More information about the cairo mailing list