DirectFB - Home of the pragmatist


2012-10-23   DirectFB Demo running on R-CarH1

We proudly present the latest DirectFB and ilixi developments in this new demo video.

This video runs on the R-CarH1 SoC and shows an automotive appliance with a status bar including output from the nagivation app, several web based apps, classic demos, ilixi based applications, and more...

The work on improvements, sample applications, integration, compositor development and optimisations has been sponsored by Renesas.

This was the first major activity carried out by the new DirectFB integrated media GmbH. If you are interested in collaboration or engagement in product development, please contact us at

For technical information about this work, please see our presentation from ALS 2012.


2012-10-07   First Raspberry PI binaries for Raspbian

There are Raspbian packages available at a very early and experimental stage, please see the README here.

Click on the news header for some benchmarking results

df_dok results:

Benchmarking 256x256 on 800x580 ARGB (32bit)...

Anti-aliased Text                              3.100 secs (*  88.258 KChars/sec) [ 85.1%]
Anti-aliased Text (blend)                      3.087 secs (*  89.795 KChars/sec) [ 85.7%]
Fill Rectangle                                 3.185 secs (* 479.431 MPixel/sec) [ 96.5%]
Fill Rectangle (blend)                         3.187 secs (* 407.158 MPixel/sec) [ 81.7%]
Fill Rectangles [10]                           4.132 secs (* 682.005 MPixel/sec) [ 34.8%]
Fill Rectangles [10] (blend)                   3.930 secs (* 617.005 MPixel/sec) [ 30.7%]
Fill Triangles                                 3.201 secs (* 233.399 MPixel/sec) [ 96.2%]
Fill Triangles (blend)                         3.195 secs (* 242.042 MPixel/sec) [ 96.5%]
Draw Rectangle                                 3.195 secs (*   7.230 KRects/sec) [ 96.5%]
Draw Rectangle (blend)                         3.241 secs (*   7.374 KRects/sec) [ 94.7%]
Draw Lines [10]                                3.362 secs (*  24.092 KLines/sec) [ 76.7%]
Draw Lines [10] (blend)                        3.312 secs (*  23.852 KLines/sec) [ 75.8%]
Fill Spans                                     5.126 secs (*   6.392 MPixel/sec) [ 40.6%]
Fill Spans (blend)                             4.975 secs (*   6.586 MPixel/sec) [ 40.8%]
Blit                                           3.437 secs (* 299.364 MPixel/sec) [ 67.6%]
Blit colorkeyed                                3.536 secs (* 227.967 MPixel/sec) [ 50.7%]
Blit with colorizing                           3.252 secs (* 237.799 MPixel/sec) [ 67.3%]
Blit from 32bit (blend)                        3.840 secs (* 237.226 MPixel/sec) [ 52.3%]
Blit from 32bit (blend) with colorizing        3.477 secs (* 241.259 MPixel/sec) [ 66.8%]
Blit SrcOver (premultiplied source)            3.424 secs (* 300.500 MPixel/sec) [ 67.8%]
Blit SrcOver (premultiply source)              4.263 secs (* 213.687 MPixel/sec) [ 47.4%]
Stretch Blit                                   3.676 secs (* 413.765 MPixel/sec) [ 53.1%]
Stretch Blit colorkeyed                        5.238 secs (* 258.960 MPixel/sec) [ 32.8%]


2012-09-13   linux-fusion 8.10.4

This release fixes a bug with reference counting that can lead to a memory leak. We recommend you to upgrade.

As usual, this release is compatible with all DirectFB versions.

Please find it in the download section


2012-07-25   linux-fusion 8.10.3

This release fixes two bugs which could lead to a kernel oops

Please find it in the download section


2012-06-29   DirectFB 1.6.1, linux-fusion 8.10.2

This is the first maintainance release for the new DirectFB 1.6 series. It includes some bugfixes and many improvements to the (still experimental) android system and the gles2 driver. It also adds an always-indirect mode for the single application core, which uses a dispatcher thread and is needed for most systems using the gles2 gfxdriver.

Please find in the download section the following releases:

  • DirectFB 1.6.1
  • linux-fusion 8.10.2

The photo on the right shows the compositor with four applications, ALL running 2D accelerated at 60 fps (720p) on Broadcom 97425 SoC. Compositor output is synced to display. Total CPU load is only 22%!

For detailed info click on the news title

Changes for DirectFB 1.6.1


  • Set async attribute for CoreSurfaceClient::FrameAck(). This helps especially in always-indirect mode
  • Call InitIDirectFB_Async() synchronously if 'always-indirect' is not used, fixes calls from non-main in master
  • Fix preclipping for rotated text
  • Check surface identity when looking up surface.
  • Fix pointer being used instead of ID when comparing current with last allocation in acceleration code


  • Fix single app dispatch cleanup by calling it. (Fixes cursor motion in single app mode)
  • Add dispatcher thread for single-app which makes always-indirect mode work
  • Add reference counting for synchronous call pending in despatcher to avoid freeing call buffers too early

Default WM

  • Allow fullscreen updates when wm-fullscreen-updates option is set


  • workaround for interface loading problems with gcc-4.6 on x86 and x86-64 with no debug

Android System

  • Add gralloc surface pool (disabled by default, does not work on adreno based devices)
  • Add more examples, cleanup makefiles
  • Fixes to the android imageprovider
  • no longer hardcode pixelformat (ARGB/ABGR) and resolution
  • Use extra fbo for primary if ANDROID_USE_FBO_FOR_PRIMARY is set
  • force always-indirect
  • fix event handling (button up/down need to be prefixed by motion x/y)
  • Added update region callback to layer
  • handle all possible keycodes

PVR2D System

  • Fix error by making sure source rectangle is at least 1x1 in pvr2DStretchBlit

EGL System

  • allow other buffer modes than DLBM_FRONTONLY

GLES2 gfxdriver

  • Mirror y-coordinates for primary
  • Invert clipping coordinates when not rendering to an FBO.
  • Put color multiplication onto same line with gl_FragColor assignment, blending speed up by factor four!
  • Various fixes, optimizations and cleanups


  • Include GLES2_CFLAGS/LIBS also with EGL system.


  • dfbtest_flip: Add test for frame or time based animation using double/triple buffering.

Changes for linux-fusion 8.10.2

  • Cache up to 10 executions, do not free them, reuse valloc'ed memory (this fixes performance regressions introduced in linux-fusion
  • Fix severe memory alloc/free bug, moving waiters_list freeing BEFORE entry freeing!

You can find the release in the "Core" tab on the "Downloads" page.


2012-06-28   Compositor demo on Broadcom 97425

Check out the new video showing ilixi compositor running on Broadcom's 97425 SoC!

It's all 2D hardware accelerated and running at 1280x720 with DirectFB 1.6.0.


2012-06-14   First release of DirectFB 1.6 series!

This is the long awaited first release of the DirectFB 1.6 series.

It has lots of Secure Fusion updates, performance/security improvements, Compositor support, better Mesa support and initial Android support.

Please find in the download section the following releases:

  • DirectFB 1.6.0
  • DirectFB-examples 1.6.0
  • SaWMan 1.6.0
  • FusionDale 1.6.0
  • FusionSound 1.6.0
  • linux-fusion 8.10.1
  • flux 1.4.1

For detailed info click on the news title

Changes for DirectFB 1.6.0

New APIs

  • DWOP_STEREO_SIDE_BY_SIDE_HALF to have stereo output without changing buffers
  • Increase number of preallocated entries in DFBSurfaceDescription to 3
  • Add IDirectFBInputDevice::SetConfiguration() with DFBInputDeviceConfiguration featuring sensitivity setting
  • Add IDirectFBFont::GetDescription() to retrieve the font description with which the font had been created
  • Add IDirectFBWindow::SetGeometry() to set src and dst geometry in one call
  • Add supported HDMI signaling modes (all_framing) to DFBScreenEncoderDescription
  • Add DSOR_960_540 to DFBScreenOutputResolution
  • Add IDirectFBSurface::GetID() to retrieve the object id of the CoreSurface
  • Add IDirectFBSurface::AllowAccess() to allow other process identified by an executable name access to the surface in secure fusion mode
  • Add "primary-id" option for CreateSurface(PRIMARY)
  • Add IDirectFB::GetSurface(ID)
  • Add DFBSurfaceEventType with DSEVT_DESTROYED and DSEVT_UPDATE
  • Add DFBSurfaceEvent with type, surface_id and update region for left and right buffer
  • Add IDirectFBSurface::CreateEventBuffer, AttachEventBuffer and DetachEventBuffer
  • Add DSOR_1440_540 to DFBScreenOutputResolution
  • Add IDirectFBSurface::MakeClient() and FrameAck()
  • Fixed DFBInputDeviceCapabilities naming, there was a naming clash with DFBImageCapabilities enum
  • Add IDirectFBSurface::GetColorSpace()
  • Add IDirectFBImageProvider::SetRenderFlags()
  • Add DSCAPS_GL to indicate surface data is stored in memory that can be accessed by a GL accelerator
  • Add DFBDisplayAspectRatio in caps and config of encoders
  • Add DSECAPS_ASPECT_RATIO to DFBScreenEncoderCapabilities
  • Add all_aspect_ratio in DFBScreenEncoderDescription
  • Add aspect_ratio in DFBScreenEncoderConfig
  • Add DSPF_LUT4 and DSPF_ALUT8, only definitions for now

Secure Fusion

  • In secure mode all skirmishs are gone
  • Performance improvements over non-secure mode

Compositor Support

  • New APIs allow compositor application to get access to surfaces and updates of other applications

Mesa incl multi app (experimental)

  • New system module with OpenGL based acceleration

Android (highly experimental)

  • New system module allowing DirectFB apps to run on Android

...many other changes, must read ChangeLog.


2012-05-25   DirectFB integrated media GmbH

We have signed the contract for our new company.

So DirectFB is represented and developed by a real company with employees now.

We have the majority in a joint venture with IGEL (Takanari Hayama).

That means we have someone with a lot of experience with his own company since 1998!

Visit our company web site which is still being filled with life...


2012-05-23   DirectFB 1.4.17, linux-fusion 8.9.0, SaWMan 1.4.17, flux 1.3.0 release

This is a maintainance release for the DirectFB 1.4 series. It includes bugfixes and some performance improvements. There are also some secure fusion fixes, backported from the upcoming 1.6 releases.

Please find in the download section the following releases:

  • DirectFB 1.4.17
  • SaWMan 1.4.17
  • linux-fusion 8.9.0
  • flux 1.3.0

For detailed info click on the news title

Changes for DirectFB 1.4.17


  • fix race condition between dfb_wm_close_all_stacks() and layer_context destructor
  • add function CoreDFB_CallMode() which determines whether calls should be direct, indirect or denied.
  • cleaner shutdown
  • Add CoreGraphicsState::ReleaseSource() to fix IDirectFBSurface::ReleaseSource() in secure fusion mode.
  • opimize single-app mode by forcing COREDFB_CALL_DIRECT
  • set_region: lock region buffer also on flags CLRCF_SRCKEY,CLRCF_DSTKEY,CLRCF_OPACITY,CLRCF_SOURCE,CLRCF_DEST
  • remove bogus asserts for optional output parameters in Core API and mark these parameters in .flux files


  • remove redundant checks
  • add missing locking to surface reaction (fix race-condition)


  • fix off-by one issues in 16-bit code


  • buffer async fusion calls in user space using one ioctl up to 512 calls or 20ms timeout (Increses performance)

Secure Fusion

  • fix CreatePalette(), SetColorIndex(), SetEntries()


  • add linux-one kernel module and libone from DirectFB 1.6, these are required when FusionDale with secure fusion


  • handle invalid images in various providers (thanks to Broadcom)


  • reworked signal handling (an extra thread is now dedicated to asychronous signal processing)
  • upport default-interface-implementation=interface_name/implementation_name in config
  • generic configuration extensions to support options unknown to the directfb core, but known to custom modules


  • remove bogus ASSERTS


  • Call dfb_surface_notify_diosplay() AFTER calling dfb_surface_flip()

Changes for SawMan 1.4.17


  • add update_region4 which is a complete rewrite of the sawman update code


  • the default for "--update-region-mode=" is now 4

You can find the release in the "Core" and "Extras" tabs on the "Downloads" page.


2012-05-17   1.6.0 prerelease demo

We managed to get the ilixi compositor demo running on Broadcom's 97425 SoC!

The framerate of all the applications and compositing is higher than in the software only video we have posted.

On this picture three applications are running plus compositor, the fourth application (gallery) is idle.


2012-04-14   1.6.0 prerelease demo

Check out the demo video showing ilixi compositor and home screen with several applications!

Turn up your volume and please wait until the video has been prebuffered to achieve the best impression! (high bitrate, download)

The input events were generated by spooky (of DiVine) using this script and the C preprocessor (cpp).

This video is a live capture and has not been edited in any way!
Frames were dumped within DirectFB's X11 backend (using this patch) to tmpfs (RAM) with current timestamp, converted to fixed frame rate and encoded using ffmpeg including the brilliant Bach-Step audio track.

Look at the penguins running around 50Hz all the time even after starting all other applications!

Compositing is absolutely tearing free, applications run at the same maximum speed asynchrously synchronised with the compositor.

If you see tearing it's your video playback. Look at each frame in pause mode!

Up to ten DirectFB processes (plus spooky and bb) were running on an Intel Quad Core 3.4GHz CPU desktop (all software rendered) with 8GB of RAM to store the 4.6GB of PPM files.

You might think OK, this was running on a fast PC. Right, but it is all software rendered. So on an embedded device it should all be hardware accelerated and 1GHz CPU should be enough, even single core!

We will prove this by using Raspberry PI or other Broadcom hardware.

We've spent a lot of time to create this piece of art. The prerelease and demo images should be ready this month.

This demo runs accelerated on DirectFB supported embedded platforms. We will have it running on Mesa/DRM and Raspberry PI soon.

Feedback, ideas and help are very welcome.
Join us now!


2012-04-01   Release date

The first prerelease of 1.6.0 will most likely be out by April 6th.

Update: This was no April Fool's Day joke, but after some last minute compositing enhancements we'll have it ready coming week!


2012-03-23   DirectFB 1.4.16, linux-fusion 8.8.1, SaWMan 1.4.16, flux 1.2.0 release

This is a maintainance release for the DirectFB 1.4 series. It includes a lot of bugfixes and some performance improvements. There are also some secure fusion fixes, backported from the upcoming 1.6 releases.

Please find in the download section the following releases:

  • DirectFB 1.4.16
  • SaWMan 1.4.16
  • linux-fusion 8.8.1
  • flux 1.2.0

For detailed info click on the news title

Changes for DirectFB 1.4.16


  • Add DFB_NOALLOCATION result used internally.


  • Allow DSCAPS_TRIPLE for windowed primary surface, thanks to Rob McConnell!
  • Do not mask out DSCAPS_FLIPPING when creating a windowed primary surface.


  • Allow DSCAPS_TRIPLE to be used for windows.
  • Fix LowerToBottom()!
  • Destroy the window explicitly on Release when interface is from CreateWindow.


  • Allow DSCAPS_STATIC_ALLOC to be used in combination with DSDESC_PREALLOCATED to request that any further Lock() will always return the original preallocated buffer pointer even if that requires lots of transfers back and forth. Otherwise, the allocation might be moved to shared memory. This especially requires the application to correctly use Lock() with the READ and WRITE flags as appropriate.


  • add TextureSurface() to the interface definition

Runtime Options

  • Add run time option "trace-ref" to print messages including stack dump when a certain ref is up/downed.


  • Remove early setting of num_buffers to zero, fixing buffer leakage!
  • Add PreAlloc() function to surface pool interface to check the surface description for a supported preallocation, e.g. DSCAPS_VIDEOONLY for a preallocation in an accelerated pool. This is called on the slave side!
  • Add preallocated_pool_id to the surface configuration that is filled by the slave to indicate in which pool it likes to create a preallocated surface. Also add more fields to the preallocated entries like offset or phys.
  • Add CoreSlave interface for master to call into slave processes. This contains methods for sending or receiving data, e.g. to or from preallocated memory areas. Access to such areas is checked against permissions, though the master should be a trusted process in the DirectFB session :-)
  • For preallocated surfaces allocate the buffers during their creation in the preallocated pool already to ensure this already exists as the first allocation.
  • Tweak dfb_surface_buffer_find_allocation() to implement DSCAPS_STATIC_ALLOC and to avoid locking non-shared preallocated allocations from other processes. It is possible to create a preallocated hardware buffer from a slave and use hardware accceleration with this in the master via secure fusion, if implemented by the surface pool(s) for the hardware accelerator.
  • Add dfb_core_memory_permissions_add/remove/check() for management of areas where the master may read/write within slave memory via CoreSlave interface.
  • Put secure/insecure mode into shared memory and fail in slave init when the configuration does not match.
  • In Core_GetIdentity() return local core identity if stack is empty.
  • In Core_PushIdentity() if argument is 0, push local identity on stack.
  • Use Core_PushIdentity(0) before locking surfaces for actual execution of software or hardware rendering functions.
  • Add new initialize/join calls for surface pools to pass context data.
  • Add dfb_surface_pools_lookup() for lookup by ID.
  • Implement priorities for surface pool bridges.
  • Fix missing return of permission handle in dfb_core_memory_permissions_add()
  • In resource manager code don't consult client interface when identity matches ours (master).
  • Fix missing Dispatch init for hotplug devices, thanks to Steven (Sheng-Chi) Chang!
  • Add dfb_surface_deallocate_buffers() that deallocates all surface buffers, called by unrealize_region() instead of destroying the buffers now.
  • When decoupling a buffer being unlocked, deallocate right away.
  • Fix assertion in error path of surface creation.
  • Add error handler for window object creation, e.g. OOM case.
  • Add CSF_SOURCE2_LOCKED to mask for calling dfb_state_update().
  • Use new "queue" property for rendering and state setting methods. Except surface setters because of out of order execution with references being dropped right after blitting from but before flushing.
  • Update dfb_gfxcard_check_state to check for full system memory support.
  • Replace FusionProperty in gfxcard by hybrid skirmish (simple mutex in secure fusion mode).
  • Add fusion_skirmish_init2() with 'local' argument to create a fake skirmish (simple mutex). Improves performance.
  • Make CoreSurfaceAllocation a FusionObject.
  • Change ISurface::PreLockBuffer() to return a CoreSurfaceAllocation instead of index.
  • Replace dfb_surface_buffer_locks() by dfb_surface_allocation_locks().
  • Add dfb_surface_allocation_decouple() for deallocating and setting surface and buffer pointers to NULL.
  • Use fusion_skirmish_init2() to make surface skirmish a plain mute in case of secure fusion, resulting in greater performance.
  • Fix local surface pool (single app) for new surface/buffer less allocation code.
  • Deallocate window surface buffers right away when a window is destroyed.
  • Fix munmap issue with modified lock.addr by keeping a copy in .handle (shared secure pool).
  • Deallocate buffers right away when deallocating a layer surface.
  • Don't set owner of layer surfaces until privileges are sorted out better.
  • Add dfb_surface_clear_buffers() to allocate/fill all surface buffers (unless new run-time option "no-layers-clear" is used).


  • Implement same flipping scheme as in SaWMan.


  • force recheck of DFXL_BLIT2 if source2 has been changed
  • allow DSBLIT_FLIP_HORIZONTAL and DSBLIT_FLIP_VERTICAL simultaniously in gStretchBlit()
  • Add planar YUV smooth scaling, only NV12 and NV21 for now.
  • backport various clipping fixes and improvements in the generic software rasterizer from 1.6
  • Use RGB accumulators only, adding YUV values does not work.
  • fixes for AYUV rendering, FillRect etc.
  • optimizations to the generic driver
  • Add dfb_gfx_clear() to fill buffer with fully transparent black.


  • Get lock state and other items from input device, not via events.
  • implement quitpipe also for the hotplug thread.


  • Remove bogus assertion from fusion_call_init and fusion_call_init3.
  • Implement fusion_reactor_attach/dispatch_channel() for single app mode.
  • use s64 instad of int to calculate number of free bytes to prevent wraparound when having more than 2GB free in tmpfs.
  • Add fusion_call_init_from() to initialize a FusionCall structure in local slave memory from call id returned by call to master.
  • Add fusion_call_get_owner() to get the FusionID of the call creator.
  • Add fusion_world_set_leave_callback() dummy for single app core.
  • Increase return size limit to 32MB for calls.
  • Add fusion_call_execute2() using new linux-fusion 8.3 ioctl.
  • Add handling of call payload appended to FusionCallMessage rather than a pointer in the message.
  • When MADV_REMOVE is supported use static ftruncate and no longer resize file in brk().
  • Provide fusion_skirmish_init2 on single app builds
  • Increase main shm pool (e.g. for objects) max size from 1 to 16 MB.
  • Replace linked list by hash table for objects, finally, *sigh*
  • Add fusion_hash_foreach() working like direct_list_foreach() via FusionHashIterator and inlined fusion_hash_iterator_init() and fusion_hash_iterator_next().

Secure Fusion

  • Remove unnecessary locking to improve performance.
  • Add fusion_skirmish_add_permissions().
  • Avoid mmap/munmap on each Lock/Unlock in shared surface pool when being the master. This restores rendering speed a lot for software fallbacks.
  • Convert two more dfb_layer_activate_context to CoreLayer_ActivateContext, thanks to Rob McConnell for spotting!


  • Init host with "" if NULL to fix strcmp crash.
  • No DataBuffer_Init_Dispatch when DIRECTFB_BUILD_PURE_VOODOO is defined.


  • Add secure IPC to (hardware) image providers.
  • IPC: CPP -> C!
  • PNG: add libpng 1.5 support.
  • JPEG: improve probe to recognize more valid jpeg formats.

PreAlloc Pool

  • Add preallocPrealloc() implemention in the preallocated surface pool to fill out the new surface configuration entries for the preallocated buffers before the CreateSurface call goes to master.
  • In preallocTestConfig() check the core identity against the buffer identity and reject allocation for other processes than the creator of the preallocated surface. This should not happen though.
  • In preallocAllocateBuffer() remove CSALF_VOLATILE flag from allocation to ensure the allocation will not be removed before the buffer is destroyed.
  • In preallocLock() check the core identity against the buffer identity and reject locking for other processes than the creator of the preallocated surface. This should not happen though.


  • Check for error in DIRECT_ALLOCATE_INTERFACE
  • never return an uninitialized value in direct_recursive_mutex_init()
  • Add D_UNUSED(param) macro for cancelling compiler warnings.


  • Fix surface pool for new surface/buffer less allocation code.


  • Choose config with depth buffer.
  • Work around crashing glDeleteTextures() by leaking it.
  • Force layer pixmap to 24 bit.


  • Add dfb_surface_notify_display() calls to primaryFlipRegion()
  • Fix broken expose event handling, many thanks to Loïc Yhuel!


  • Add loop mode "-l" to be used as secure master for example.


  • dfbtest_resize: Add threaded window resizing, surface locking test. Add Read/Write tests.
  • dfbtest_prealloc: Add dfbtest_prealloc for testing preallocated surfaces with and without the usage of DSCAPS_STATIC_ALLOC.
  • dfbtest_window_surface: Simple resource/reference counting test.
  • dfbtest_window_cursor: Add test for cursor flags and per window cursor shape.

Changes for SawMan 1.4.16


  • Fix dual source blit arguments for intersections of windows.
  • Add SaWMan::IsShowingWindow().
  • Add SaWMan::Activate() that sends initial window/process list and enables calls to the manager.
  • Fix for send_button_event() with input only windows.
  • HW Cursor fixes, e.g. source clipping.
  • When adding a window properly lookup the process by identity.
  • Fix mixup of dual source blit arguments.
  • Shutdown fixes.
  • restrict windows to optimize in update_region3 (work around a bug with black windows when more than two windows were optimized)
  • reintroduce update_region and update_region2 (default)


  • Add "--update-region-mode=" option which can be 1, 2(default) or 3.

Secure Fusion

  • avoid locking in secure-fusion mode


  • Add --enable-trace option like for DirectFB.
  • Allow overriding pkg-config by setting DIRECTFB_CFLAGS, DIRECTFB_LIBS and MODULEDIR.

You can find the release in the "Core" and "Extras" tabs on the "Downloads" page.


2012-02-12   Release schedule

The stabilization phase is still ongoing so that we expect the first release of DirectFB 1.6 in March.


2012-01-11   XDirectFB

XDirectFB is back!

Thanks to Ville Syrjala for updating the port to xorg-server-1.11!

dok / Main / News