DirectFB - Home of the pragmatist


News

2007-12-15   DirectFB 1.1.1

The second development release of the 1.1.x branch brings affine transformations with a 3x2 matrix and anti-aliased edges. New embedded drivers have been added: TI Davinci with hardware accelerated blending and OSD format conversion and SH7722 which supports the new 3x2 transformation and anti-aliasing. The third one is for TI OMAP, but doesn't do any acceleration or overlay handling. All drivers have been ported to the new surface core. Major improvements also took place in the multi application core support using sockets and other IPC methods (builtin fusion).

API

  • Added 3x2 transformation for all drawing and blitting.
  • Added render option DSRO_MATRIX and IDirectFBSurface::SetMatrix(). The matrix consists of 3x2 fixed point 16.16 values. The order in the array is from left to right and from top to bottom. All drawing and blitting will be transformed:
    X' = X * v0 + Y * v1 + v2
    Y' = X * v3 + Y * v4 + v5
  • Added DSRO_ANTIALIAS to enable anti-aliasing for edges, lines...

API | IDirectFB

  • Added DSCAPS_SHARED for creating shared surfaces, not using local (malloced) memory pool.

API | IDirectFBDisplayLayer

  • Added DFBDisplayLayerSourceCaps featuring DDLSCAPS_SURFACE.
  • Added resource_id to DFBWindowDescription and DWDESC_RESOURCE_ID to specify the resource id to use for window surface creation, rather than using the window id for that.

API | IDirectFBFont

  • Fixed missing translation of characters to indices in GetKerning().

API | IDirectFBSurface

  • Added DSBLIT_COLORKEY_PROTECT to prohibit writing the color that the destination surface uses as a source color key.
  • Fixed GetFramebufferOffset() by adding CSAF_GPU_READ when Lock() is called on a DSCAPS_VIDEOONLY surface.

API | IDirectFBVideoProvider

  • Added DVPET_FINISHED, sent when playback is finished.
  • Added DVPET_SURFACECHANGE, sent when size/format change.

Runtime Options

  • Added "[no-]autoflip-window" to automatically flip non-flipping windowed primary surfaces. Previously, the default was to automatically Flip() in a thread. Now it's not.
  • Added "[no-]font-premult" for premultiplication in case of ARGB glyph images. Default is enabled.
  • Added "[no-]linux-input-grab" that will control whether linux_input will grab the devices. This is useful in cases where multiple processes want to receive input events.
  • Added "linux-input-devices" and "tslib-devices" options.
  • Added "no-init-layer [= <id>]" option to disable initialization of layers. Primary layer is initialized by default, use this option to avoid that.
  • Added "[no-]thread-block-signals".
  • Fix background color index support.
  • Fixed missing color key flags when only index is set via config file.
  • Reimplemented "thrifty-surface-buffers".

Build Options

  • Added "--with-smooth-scaling", turned off by default to avoid 100k+ binary size increase.

Display Core

  • Implemented defered region realization by adding CLRSF_FROZEN which is set initially on every region that is created.
  • As long as CLRSF_FROZEN is set, all SetRegion() calls to the driver (and buffer allocations due to it) are simply discarded.
  • Only when dfb_layer_region_flip_update() is called and the region is enabled and active, the flag is removed and the region is either realized or the config is just set if it was already/still realized.
  • Added GetMixerState() to screen driver API and dfb_screen_get_layer_dimension() to be used instead of the deprecated dfb_screen_get_screen_size().
  • Added capabilities for display layer sources. Check source capabilities if present when determining whether to allocate a surface for a layer region. This allows to add layer sources in addition to DLSID_SURFACE that have a surface without using DLCAPS_SURFACE which enables surfaces for all sources.
  • Deallocate layer region surface buffers if the region is being unrealized.
  • Made DisplayLayerFuncs const when being passed or used.
  • When switching to an indexed layer format, use dfb_surface_init_palette() if no palette exists already.

Graphics Core

  • Added dfb_gfxcard_get_driver_data().
  • If alpha is zero, still check for RGB when looking up the best match in a palette.
  • When resetting the 'checked' flags also reset the same in 'accel' flags. Fixes accidental hw usage.
  • Skip prechecking clip in FillRectangles() if DSRO_MATRIX is used. Other functions are also affected, but not fixed yet.

Surface Core

  • Fixes to CPU/GPU read/write access interlock management.
  • Added dfb_surface_buffer_dump() implementation.
  • Fixed lock+reconfig bug: fail when trying to reconfig a locked surface.
  • Added convenience functions dfb_surface_read/write_buffer() and dfb_surface_dump_buffer().
  • Moved surface palette creation from dfb_surface_create() into new dfb_surface_init_palette().
  • Added CSALF_PREALLOCATED. The "thrifty-surface-buffers" option is implemented by iterating through all allocations at the end of an update_allocation() and deallocate all other allocations, unless they have the CSALF_PREALLOCATED flag. In the latter case it would not be a benefit, but the disadvantage of losing an allocation that is still up to date and would probably be faster (CPU read) than others. The 'preallocated' surface pool sets CSALF_PREALLOCATED upon allocation.
  • Another flag CSALF_VOLATILE has been introduced. In case of a write access to one allocation, any other allocation is deallocated if it has the flag. This is independent of the "thrifty-surface-buffers" option. The 'local', 'shared' and 'preallocated' surface pools set CSALF_VOLATILE upon allocation.

Window Core

  • Refuse to set non-shared surfaces as a background image for a window stack.

Software Render

  • Added LUT8 -> ARGB4444 smooth scaling.
  • Made smooth scaling support source rectangles not starting at 0,0.
  • Fast RGB32/ARGB to RGB16 conversion (little endian).

Utilities

  • Added dfb_convert_to_a4() and added RGB32/ARGB support to dfb_convert_to_rgb16().
  • Added dfb_convert_to_uyvy() and dfb_convert_to_yuy2(), only copy supported yet.

libdirect

  • Added direct_cleanup_handler_{add/remove} to install a cleanup handler called upon exit.
  • Added direct_page_align().
  • Added mutex and condition for thread initialization to eliminate sched_yield()s.
  • Improved debug messages in thread code. Added "Direct/Thread/Init" domain to watch creation, wait, startup, initialization, notification ...
  • Initialize libdirect in DirectFBCreate() already.
  • Added new URI fd:/<fileno>. Used to create a DirectStream from an already opened file descriptor.
  • Added direct_log_lock()/unlock() for ensuring multiple prints are not mixed with others.
  • Use direct_log_lock()/unlock() to ensure stack traces are one contiguous block.
  • Added sanity checks in build header if debug support is disabled.
  • If DIRECT_ENABLE_DEBUG is defined, silently undefine it. If DIRECT_FORCE_DEBUG is define, show a warning and undefine it.
  • Do not use PAGE_SIZE at all on Linux, thanks to Guillem Jover.
  • Do not leak private labraries for dynamic linking, thanks to Guillem Jover.

libdirect (network support)

  • Join multicast group if family is AF_INET and IN_MULTICAST is true.
  • Use bind() instead of connect() for receiving UDP data.
  • Use SO_REUSEADDR in case of multicast.

libfusion

  • Print an alert message when using builtin implementation of fusion.
  • Moved FUSION_ID_MASTER definition to types.h.
  • Fix missing fusion_shm_enum_pools() for single app core.
  • Added fusion_reactor_set_name() to change the name of a reactor after its creation.
  • Implemented fusion_reactor_set_dispatch_callback().
  • (Pre)Parse shmfile group in fusion_config_set().
  • Added "ramfs" to possible types during mount point probing.

libfusion (builtin multi)

  • Provide a REAL implementation of fusion_skirmish_wait/notify().
  • Always free resources allocated in builtin implementation of fusion_skirmish_wait(), either if the skirmish was destroyed.
  • Check for dead local references in fusion_ref_zero_lock()/trylock().
  • Return DFB_NOSHAREDMEMORY if requested allocation exceeds the maximum address of the shm pool.
  • When fusion_skirmish_wait() gets called with a timeout value, check whether the timeout expired *before* sleeping.
  • Use fusion_skirmish_wait() instead of usleep() in fusion_ref_zerolock().
  • In fusion_ref_zerolock(): check local references before entering the loop.
  • Check for dead property purchaser.
  • Honor FCEF_ONEWAY in fusion_call_execute(). Execute ref watcher with the FCEF_ONEWAY flag.
  • Fail in fusion_skirmish_notify() if skirmish was destroyed. Sleep for at least 10ms in fusion_skirmish_prevail().
  • Enable sleeping in fusion_property_lease()/purchase().
  • Moved socket directory from "/tmp/fusion.#" to "/tmp/.fusion-#".
  • Change socket ownership according to shmfile group.
  • Speed up fusion_call_execute(FCEF_ONEWAY) by not creating a new socket.
  • chown() the sockets directory according to "shmfile-group".

Voodoo

  • Implemented some more requestor/dispatcher methods.
  • Fixed alignment issues by applying VOODOO_MSG_ALIGN() on each message block.

Graphics drivers

  • Port ati128, cle266, cyber5k, i810, i830, neomagic, nsc, savage, sis315, tdfx, unichrome to the new surface core. Only compile tested.

Radeon driver

  • Instead of emitting vertices instantly, store them in a buffer that is submitted on EmitCommands() (this way DrawString() is about 45% faster with my 9200SE).
  • R100/R200: Dropped some blend functions when destination format is A8 ((INV)DEST alpha never worked because A8 isn't really supported as dest format).
  • R300: Implemented BLEND_COLORALPHA, COLORIZE, PREMULTCOLOR with some limitations (source must be premultiplied and COLORALPHA+ALPHABLEND isn't supported at all).
  • Sleep for 10 usec in WaitVSync loop.

nVidia driver

  • Fixed texture uploading: use the current surface lock instead of locking again.
  • Replaced state->modified by state->mod_hw.
  • Disabled some features not working with the new surface core.
  • Sleep for 10 usec in WaitVSync loop.

Renesas SH7722 driver

  • Added driver for SH7722 SoC from Renesas Solutions Corp.
  • Supports DrawString(), FillRectangle(), DrawRectangle(), FillTriangle(), DrawLine(), FillSpans(), Blit() and StretchBlit().
  • Supports DSDRAW_BLEND, DSBLIT_BLEND_ALPHACHANNEL, DSBLIT_BLEND_COLORALPHA, DSBLIT_SRC_COLORKEY, DSBLIT_ROTATE180 and DSBLIT_COLORIZE.
  • Use hardware 3x2 matrix to implement DSRO_MATRIX for all blitting and most drawing.
  • Transform coordinates in driver for DrawLine() and DrawRectangle().
  • Implemented DSRO_ANTIALIAS for all drawing operations.
  • The hardware provides "anti-aliased" lines by drawing a line with doubled pixel width (minor axis). This should be drawn with a transparency factor. Finally the original line is drawn on top of this.
  • For filled rectangles and triangles, only the double width line is drawn and then the shape is filled.

TI Davinci

  • Added TI Davinci driver.
  • Supports OSD and Video with positioning, color key, opacity, alpha channel and vsync.
  • The driver uses the devmem system and opens all frame buffer devices itself.
  • This is required for extended ioctls like setting the OSD position, but also to support alpha channels which are stored in a different frame buffer device. In case of ARGB for the OSD, the alpha channel (3 bit!) is dithered during conversion.
  • Implemented surface pools for OSD and Video layer. This enables direct usage of the frame buffers in case of RGB16 for OSD and UYVY for Video.
  • Added patch for davincifb to support triple buffering on OSD.
  • Hardware acceleration using the DSP with a special firmware and kernel module.
  • Driver still runs without DSP module, but unaccelerated.
  • Supports DrawString(), FillRectangle(), FillSpans() and Blit().
  • Supports DSBLIT_BLEND_ALPHACHANNEL, DSBLIT_BLEND_COLORALPHA, DSBLIT_SRC_COLORKEY, DSBLIT_SRC_PREMULTIPLY and DSBLIT_SRC_PREMULTCOLOR.
  • Supports RGB16, RGB32 and UYVY for simple filling and blitting with color keying.
  • Supports ARGB for blending and premultiplication.
  • No support for different source and destination formats.
  • No support for color keying in conjunction with blending.
  • DrawString() is not colorized yet, but enabled for testing (all text is white).

TI OMAP driver

  • Added TI OMAP gfxdriver.
  • No video layer or other fancy stuff yet. Enough to run XDirectFB on the Nokia N800 though.

Unichrome driver

  • Fix a pointer buglet. The pfetch pointer was compared/set instead of the value to which it pointed.

Keyboard (TTY) input driver

  • Sleep 2ms when read returns 0, to avoid CPU hogging. Thanks to Luis Mondesi lemsx1 gmail.

Serial input driver

  • Fixed illness in processing read data in serial driver and fixed error path.

Default WM

  • Added WM key combo <Meta>-<F12> to redraw the whole window stack.

Unique WM

  • Fixed wheel direction.
  • Commented out auto center.

DFIFF image provider

  • Make DFIFF fast for the standard case again (60->483 MPixel/sec).
  • Added support for sub surfaces with proper clipping/offset.
  • Check for unscaled and unclipped loading without format conversion and just use dfb_surface_write_buffer().

FT2 font module

  • Optimized pixel premultiplication.

FBDev system module

  • Fixed SetMode / Panning Bug, thanks to Kieran Bingham!
  • Fixed allocation size for planar formats in FBDev Surface Pool.
  • Add missing libsysfs when statically linking, thanks to Guillem Jover.

DevMem system module

  • Implement surface pool using surface manager.
  • Added local/shared system data.
  • Added configure.in and Makefile.am parts.

Linux Input driver

  • Ignore input devices matching the TSLIB_TSDEVICE environment variable.

tslib driver

  • Check the device in $TSLIB_TSDEVICE when guessing (no option given).

dfbdump tool

  • Added "-dl" or "--dumplayer" for dumping the front buffer of each active contexts' primary region.

dfbfx tool

  • Based on "fx", with command line options, documented code...
  • Simulates blitting flags given a source and destination ARGB pixel.

dok

2007-11-02   TI Davinci driver

One more driver has been added, which is for TI Davinci, increasing compliance with the CELF AVG Specification 2.0 and creating a lot of new opportunities. It supports the multiple frame buffer device driver architecture by implementing surface pools for the different layers, opening all four devices by itself, not using the frame buffer system module at all. Applications can just use the DirectFB API and don't need to care about the different planes used for RGB and alpha values.
This open source development is kindly supported by Telio AG. Meet us at the ELC-E 2007!

Introduction

The driver uses the devmem system and opens all frame buffer devices itself. This is required for extended ioctls like setting the OSD position, but also to support alpha channels which are stored in a different frame buffer device. In case of ARGB for the OSD, the alpha channel (3 bit!) is dithered during conversion.

For direct usage of the frame buffers in RGB16 (OSD) and UYVY (Video) modes, the driver implements additional surface pools, which is possible with the new surface core.

Support

This driver is for TI Davinci (tested on DM6446) and supports

  • OSD Layer (only OSD0 or combined OSD0/1)
    • RGB16 (native, direct) and various other formats (using conversion)
    • Alpha channel is supported (conversion to 3 bit alpha plane using dithering)
    • Global layer opacity and position can set
    • Buffer modes using page flipping are supported (useful in RGB16 mode)
  • Video (only VID1 at the moment)
    • UYVY (native, direct)
    • Layer position can set
    • Buffer modes using page flipping are supported

Acceleration

There's no acceleration, yet, but we're working on the DSP side to support various graphics operations including blending, conversion+dithering and hardware video decoding.

dok

2007-09-21   Renesas SH7722 driver

A new driver for SH7722 has been added to the repository, but it's not just another driver. It's the first public one utilizing a tiny kernel module for interrupt handling, while the hardware does DMA to read the commands.
Check out the README.sh7722 in the driver directory or click on the news title. (added new benchmark results 2007-09-25)

Introduction

This driver supports the SH7722 SoC from Renesas Solutions Corp. controlling

  • LCDC (LCD Controller) for display
  • BEU (Blit Engine Unit) for blending of planes
  • TDG (2D Graphics) for accelerated operations

It's using a kernel device called sh7722gfx which mainly does interrupt handling.

The 2D Graphics unit supports display lists in RAM and reads them via DMA. These lists consist of double word entries, first word designates a register, second word contains the data to write. Once a list has been completely processed, the hardware generates an interrupt to start the next list.

The kernel module allocates a ring buffer for usage as a display list. The user space prepares a block of commands and puts it into the ring buffer. If the hardware is idle, it's started directly from user space. When a DMA completion interrupt is received, the next block of commands is started from kernel space. If the hardware is still running the previous block, new commands are appended to the next one. The driver is designed to run without any locking or system calls. Only a few interrupts happen over time depending on the operations. The hardware is not getting idle, while commands are being sent to keep it busy. There's just a minimal gap which is the interrupt handler setting the new start address and kicking the hardware again.

To build the kernel module use "make -f Makefile.kernel". You might want to set the variables KERNEL_SOURCE, KERNEL_BUILD (if != KERNEL_SOURCE), KERNEL_VERSION and DESTDIR.

To run the driver you need the DevMem system module using the directfbrc.sh7722 file (renamed to directfbrc in $prefix/etc).

Performance (as of 2007-09-21, multi app, 127.79 BogoMIPS)

Only 14% CPU load with df_andi running 800x480 at 28.1 fps :)

Benchmarking with 256x256 in 16bit mode... (16bit)
                                                                                CPU load
Anti-aliased Text                              3.020 secs (   41.721 KChars/sec) [100%]
Anti-aliased Text (blend)                      3.328 secs (   10.817 KChars/sec) [100%]
Fill Rectangle                                 5.549 secs (*  69.681 MPixel/sec) [  3%]
Fill Rectangle (blend)                        11.873 secs (*  22.079 MPixel/sec) [  1%]
Fill Rectangles [10]                           9.384 secs (*  69.838 MPixel/sec) [  0%]
Fill Rectangles [10] (blend)                  14.836 secs (*  22.086 MPixel/sec) [  0%]
Fill Triangles                                 3.024 secs (+  50.929 MPixel/sec) [ 40%]
Fill Triangles (blend)                         3.064 secs (+  20.319 MPixel/sec) [  8%]
Draw Rectangle                                 3.284 secs (*   6.942 KRects/sec) [ 26%]
Draw Rectangle (blend)                         3.302 secs (*   6.268 KRects/sec) [ 25%]
Draw Lines [10]                                3.238 secs (*  28.103 KLines/sec) [ 20%]
Draw Lines [10] (blend)                        3.198 secs (*  27.829 KLines/sec) [ 19%]
Fill Spans                                     3.092 secs (*  61.466 MPixel/sec) [ 33%]
Fill Spans (blend)                             3.094 secs (*  21.181 MPixel/sec) [ 11%]
Blit                                          10.436 secs (*  30.143 MPixel/sec) [  2%]
Blit colorkeyed                                9.333 secs (*  32.301 MPixel/sec) [  2%]
Blit destination colorkeyed                    3.763 secs (    6.966 MPixel/sec) [ 99%]
Blit with format conversion                   13.369 secs (*  22.549 MPixel/sec) [  1%]
Blit with colorizing                           4.419 secs (    2.966 MPixel/sec) [100%]
Blit from 32bit (blend)                       21.973 secs (*  13.123 MPixel/sec) [  1%]
Blit from 32bit (blend) with colorizing        5.129 secs (    1.277 MPixel/sec) [100%]
Stretch Blit                                  10.271 secs (*  33.463 MPixel/sec) [  3%]
Stretch Blit colorkeyed                        7.895 secs (*  35.159 MPixel/sec) [  3%]

(*) SH7722/BLT: 940 starts, 940 done, 940 interrupts, 43 wait_idle, 780 wait_next, 89 idle
(*) SH7722/BLT: 24700744 words, 26277 words/start, 277536 words/idle, 10 starts/idle

* = accelerated
+ = half way accelerated

Performance (as of 2007-09-25, multi app, 127.79 BogoMIPS)

Only 13% CPU load with df_andi running 800x480 at 28.8 fps :)
Only 46% CPU load with ClanBomber2 running 800x600 at 48 fps :)

Benchmarking with 256x256 in 16bit mode... (16bit)
                                                                                CPU load
Anti-aliased Text                              3.057 secs (*  98.920 KChars/sec) [ 47%] !
Anti-aliased Text (blend)                      3.298 secs (   10.915 KChars/sec) [100%]
Fill Rectangle                                 5.732 secs (*  69.743 MPixel/sec) [  3%]
Fill Rectangle (blend)                        11.571 secs (*  22.088 MPixel/sec) [  1%]
Fill Rectangles [10]                           9.384 secs (*  69.838 MPixel/sec) [  0%]
Fill Rectangles [10] (blend)                  14.836 secs (*  22.086 MPixel/sec) [  0%]
Fill Triangles                                 4.176 secs (*  61.989 MPixel/sec) [  6%] !
Fill Triangles (blend)                         8.132 secs (*  21.759 MPixel/sec) [  2%] !
Draw Rectangle                                 3.216 secs (*   6.965 KRects/sec) [ 26%]
Draw Rectangle (blend)                         3.290 secs (*   6.322 KRects/sec) [ 22%]
Draw Lines [10]                                3.216 secs (*  28.296 KLines/sec) [ 14%]
Draw Lines [10] (blend)                        3.196 secs (*  28.160 KLines/sec) [ 14%]
Fill Spans                                     3.086 secs (*  61.586 MPixel/sec) [ 25%]
Fill Spans (blend)                             3.092 secs (*  21.195 MPixel/sec) [  7%]
Blit                                           8.692 secs (*  30.159 MPixel/sec) [  2%]
Blit 180                                       4.783 secs (*  30.144 MPixel/sec) [  2%] !
Blit colorkeyed                               11.965 secs (*  32.316 MPixel/sec) [  2%]
Blit destination colorkeyed                    3.795 secs (    6.907 MPixel/sec) [ 99%]
Blit with format conversion                    9.039 secs (*  22.476 MPixel/sec) [  1%]
Blit with colorizing                           4.414 secs (    2.969 MPixel/sec) [100%]
Blit from 32bit (blend)                       23.375 secs (*  13.177 MPixel/sec) [  1%]
Blit from 32bit (blend) with colorizing        5.137 secs (    1.275 MPixel/sec) [100%]
Stretch Blit                                   8.976 secs (*  33.495 MPixel/sec) [  2%]
Stretch Blit colorkeyed                        9.728 secs (*  35.226 MPixel/sec) [  2%]

(*) SH7722/BLT: 521 starts, 521 done, 521 interrupts, 45 wait_idle, 363 wait_next, 90 idle
(*) SH7722/BLT: 11511104 words, 22094 words/start, 127901 words/idle, 5 starts/idle

* = accelerated
! = updated

Statistics

The statistics at the end are more valuable when looking at one case at a time:

Fill Rectangle                                 5.834 secs (*  69.647 MPixel/sec) [  4%]

(*) SH7722/BLT: 16 starts, 16 done, 16 interrupts, 4 wait_idle, 2 wait_next, 11 idle
(*) SH7722/BLT: 74840 words, 4677 words/start, 6803 words/idle, 1 starts/idle

This means that while the FillRectangle() benchmark was running, the hardware didn't get idle, which is obvious when running the benchmark for just 10 ms:

Fill Rectangle                                 0.191 secs (*  68.624 MPixel/sec) [ 10%]

(*) SH7722/BLT: 13 starts, 13 done, 13 interrupts, 4 wait_idle, 0 wait_next, 11 idle
(*) SH7722/BLT: 2840 words, 218 words/start, 258 words/idle, 1 starts/idle

See? The same number of times becoming idle, but a few less interrupts. Don't worry about the 191 ms the benchmark needed to complete, after 10 ms of stuffing the display list, we need to wait until the hardware is done before measuring the time it took and calculating the result.

Here's FillSpans() which as opposed to FillRectangle() does a lot of small commands:

Fill Spans                                     3.028 secs (*  61.467 MPixel/sec) [ 34%]

(*) SH7722/BLT: 245 starts, 245 done, 245 interrupts, 3 wait_idle, 185 wait_next, 22 idle
(*) SH7722/BLT: 5828128 words, 23788 words/start, 264914 words/idle, 11 starts/idle

Example kernel log (debug mode)

0.549.014 - sh7722_reset     : Resetting hardware...
0.549.046 - sh7722_reset     : Initializing shared area...
0.549.748 - sh7722_reset     : Clearing interrupts...
0.549.770 - sh7722_reset     : Ready        (   idle, hw     0-    0, next     0-    0, invalid, HC 0000000, INT 000000)
0.568.700 - sh7722_wait      : Waiting..... (running, hw     0-   54, next    56-   56, invalid, HC 1010111, INT 000000)
0.573.339 - sh7722_tdg_irq   : -Interrupt   (running, hw     0-   54, next    56-   56, invalid, HC 0000000, INT 100100)
0.573.397 - sh7722_tdg_irq   :  '-> Idle.   (running, hw     0-   54, next    56-   56, invalid, HC 0000000, INT 000000)
0.573.480 - sh7722_wait      : ........done (   idle, hw     0-   54, next    56-   56, invalid, HC 0000000, INT 000000)
0.583.575 - sh7722_wait      : Waiting..... (running, hw    56-   78, next    80-   80, invalid, HC 1010111, INT 000000)
0.588.414 - sh7722_tdg_irq   : -Interrupt   (running, hw    56-   78, next    80-   80, invalid, HC 0000000, INT 100100)
0.588.470 - sh7722_tdg_irq   :  '-> Idle.   (running, hw    56-   78, next    80-   80, invalid, HC 0000000, INT 000000)
0.588.544 - sh7722_wait      : ........done (   idle, hw    56-   78, next    80-   80, invalid, HC 0000000, INT 000000)
0.601.336 - sh7722_tdg_irq   : -Interrupt   (running, hw    80-  102, next   104-  104, invalid, HC 0000000, INT 100100)
0.601.420 - sh7722_tdg_irq   :  '-> Idle.   (running, hw    80-  102, next   104-  104, invalid, HC 0000000, INT 000000)
0.700.117 - sh7722_tdg_irq   : -Interrupt   (running, hw   104-  124, next   128-  128, invalid, HC 0000000, INT 100100)
0.700.205 - sh7722_tdg_irq   :  '-> Idle.   (running, hw   104-  124, next   128-  128, invalid, HC 0000000, INT 000000)
3.115.419 - sh7722_tdg_irq   : -Interrupt   (running, hw   128-  220, next   224-  224, invalid, HC 0000000, INT 100100)
3.115.506 - sh7722_tdg_irq   :  '-> Idle.   (running, hw   128-  220, next   224-  224, invalid, HC 0000000, INT 000000)
3.151.700 - sh7722_tdg_irq   : -Interrupt   (running, hw   224-  324, next   328-  328, invalid, HC 0000000, INT 100100)
3.151.788 - sh7722_tdg_irq   :  '-> Idle.   (running, hw   224-  324, next   328-  328, invalid, HC 0000000, INT 000000)
3.159.160 - sh7722_wait      : Waiting..... (running, hw   328-  444, next   448-12994,   valid, HC 1010111, INT 000100)
3.161.783 - sh7722_tdg_irq   : -Interrupt   (running, hw   328-  444, next   448-12994,   valid, HC 0000000, INT 100100)
3.161.839 - sh7722_tdg_irq   :  '-> Start!  (running, hw   448-12994, next 12996-12996, invalid, HC 0000000, INT 000000)
4.316.367 - sh7722_tdg_irq   : -Interrupt   (running, hw   448-12994, next 12996-12996, invalid, HC 0000000, INT 100100)
4.316.434 - sh7722_tdg_irq   :  '-> Idle.   (running, hw   448-12994, next 12996-12996, invalid, HC 0000000, INT 000000)
4.316.505 - sh7722_wait      : ........done (   idle, hw   448-12994, next 12996-12996, invalid, HC 0000000, INT 000000)

dok

2007-09-18   Some balmy words after all...

Here are some words that Foleo analyst David Beers said about DirectFB: "I've spent some time with the Foleo operating system and it's a very nice piece of work, too. I'd go so far as to say that Palm's lightweight DirectFB windowing system sets a new standard of responsiveness and simplicity for mobile Linux. As far as I can see, it would have made a great smartphone OS." Thank you!

dok

2007-09-05   Greetings from the Hello World department!

"Keep up the good work! And don't shatter the world again..."
(he's at v2.0 now)

dok

2007-08-29   Important fix for DirectFB 1.0's Fusion module

Please use the new linux-fusion 3.2.4 for DirectFB 1.0.1 or below. There was a leak in the Fusion module which happened with "oneway" calls via Fusion as used for panning ioctls in the FBDev System module. Without the fix the system was getting slower over time, because a list got longer and longer...

dok

2007-08-27   DirectFB 1.1.0

This is the first release on the 1.1.x development branch. In addition to all updates on the release branch it has some API extensions, internal API changes and most important: the new surface core.
There's a break in the graphics driver API and not all features are working again, but the advantages of the new surface core can already be seen, e.g. the X11 System module creates surfaces using XShmImages with slave processes also mapping the shared memory segment.
The main difference of the new surface core is the abstraction of surface buffer pools implemented by the system modules, e.g. the old surface manager in the DirectFB core has been moved into the FBDev System module's implementation of a surface pool, but there are also some generic pools implemented in the core: local memory, shared memory and preallocated memory. Application surfaces like font glyph caches and general purpose surfaces are no longer put into shared memory, but use standard malloc() now.
With the new surface core it will be possible to implement a "graphics driver" on top of OpenGL or DirectX. There's already an "SDL Graphics" driver using SDL_FillRect(), SDL_Blit() and SDL_Flip(), but it does not work with multiple processes, yet.

API

  • Extend list of custom key definitions: DIKS_CUSTOM<0-99>

API | IDirectFB

  • Fix code that controls single/double buffer window creation for primary surfaces in windowed mode. If DSCAPS_FLIPPING is set, it uses one buffer which already requires a Flip due to the window. Only if DOUBLE is set explicitly, create two buffers.

API | IDirectFBDisplayLayer

  • Added IDirectFBDisplayLayer::SetRotation().

API | IDirectFBFont

  • Added DFFA_FIXEDCLIP that can be used in addition to fixed advance and cuts off glyphs if they are wider than that.

API | IDirectFBImageProvider

  • Added DFB_INCOMPLETE and return it from image providers if rendering has been aborted by the render callback.

API | IDirectFBPalette

  • Added IDirectFBPalette::SetEntriesYUV(), GetEntriesYUV() and FindBestMatchYUV().

API | IDirectFBScreen

  • HD extensions, thanks to Daniel J Laird!

API | IDirectFBSurface

  • Added IDirectFBSurface::SetRenderOptions() as a new state element, but not mandatory for graphics drivers. At the moment it's used by the software driver to choose smooth or standard scaling.
  • Made DisableAcceleration( DFXL_DRAWSTRING ) work.
  • Each sub surface interface has a reference to its parent and a list of its children.
  • Added DSBLIT_ROTATE180 with a basic software implementation.
  • Added universal resource id (unsigned long) that belongs to each surface, e.g. the layer id or window id. General purpose surfaces can be given an id by using the new flag DSDESC_RESOURCE_ID and setting the resource_id field.

API | IDirectFBVideoProvider

  • Thanks to Daniel J Laird for Video Provider Events!
  • Extended video provider capabilities, thanks to Daniel J Laird!

API | IDirectFBWindow

  • Added IDirectFBWindow::Bind()/Unbind().
  • Added DWDESC_OPTIONS and DWDESC_STACKING to give initial values in the DFBWindowDescription using the new fields 'options' and 'stacking'.
  • Added DWDESC_PARENT to DFBWindowDescriptionFlags and 'parent_id' to DFBWindowDescription. This can be used to associate a window to another, but it's up to the WM to implement it.
  • Added IDirectFBWindow::SetKeySelection() that selects a mode for filtering keys while being focused. The selection defines whether all, none or a specific set (list) of keys is selected.
  • Added DFBWindowKeySelection featuring DWKS_ALL, DWKS_NONE and DWKS_LIST.
  • Added IDirectFBWindow::GrabUnselectedKeys() and UngrabUnselectedKeys() to have a key collector window receiving all keys that the focused window did not select.
  • Added DFBWindowEventFlags featuring DWEF_RETURNED so far, which means that the event has been returned, i.e. has not been consumed by the original recipient. The DFBWindowEvent field 'flags' has also been added.
  • Added advanced window geometry for positioning and scaling of windows relative to their own bounds, with ability derive from parent geometry.
  • DFBWindowGeometryMode: DWGM_DEFAULT, DWGM_FOLLOW, DWGM_RECTANGLE, DWGM_LOCATION. DFBWindowGeometry: mode, rectangle, location.
  • IDirectFBWindow::SetSrcGeometry() and IDirectFBWindow::SetDstGeometry().
  • Added generic dfb_window_set_config() for simplifying core code and moving config handling into interfaces.
  • Added DWOP_KEEP_ABOVE and DWOP_KEEP_UNDER.

Runtime Options

  • Achtung! DirectFB is using sysconfdir now! E.g. use /usr/local/etc/directfbrc.
  • New layer configuration system, staying compatible with older options:
  • init-layer=<id> chooses layer with ID to configure (following layer
  • options apply)
  • layer-size=<width>x<height> sets the pixel resolution
  • layer-format=<pixelformat> sets the pixel format
  • layer-depth=<pixeldepth> sets the pixel depth
  • layer-buffer-mode=(auto|triple|backvideo|backsystem|frontonly|windows)
  • layer-bg-none disables background clear
  • layer-bg-color=AARRGGBB sets a background color (hex)
  • layer-bg-image=<filename> sets a background image
  • layer-bg-tile=<filename> sets a tiled background image
  • layer-src-key=AARRGGBB enables color keying (hex)
  • New option "surface-sentinel" to enable surface sentinels at the end of chunks in video memory.
  • Added "smooth-upscale" and "smooth-downscale" options to enable smooth scaling by default.
  • Added "[no-]madv-remove" to get around the auto detection.
  • Added layer palette initialization via "layer-palette-<n> = <hexcolor>" option.
  • Added option "layer-bg-color-index = n".
  • Added option "layer-rotate = <degree>" with 0 and 180 supported.
  • Added option "layer-src-key-index".

Pixel formats

  • Added DSPF_RGB444 and DSPF_RGB555, thanks to Daniel J Laird!

Core

  • Use a Skirmish to synchronize slaves with the master's post core initialization. The new function dfb_core_activate() will allow other processes to join.
  • Explicit shutdown order of core parts and pools.

Graphics Core

  • API break! Drivers must use "state->mod_hw" instead of "state->modified"!
  • Validate clip in dfb_state_update() also if destination was just set manually, not via dfb_state_set_destination().
  • Added YUV palette support. CorePalette has a second array for YUV entries. Both arrays are kept synchronized. Drivers can choose.
  • Implemented StartDrawing/StopDrawing() for states. When a surface is being rendered to, its graphics state is set to DRAWING. Upon Flip() the state is flushed. The new mechanism needs to be enabled via "startstop" option. StartDrawing/StopDrawing() can be implemented by the graphics driver. e.g. to keep track dirty surfaces and defer flipping if it would reveal other's drawing.
  • Added multifunctional color configuration function dfb_state_set_color_or_index(). Always tries to set both color and index. If color index is -1, color is used and searched in palette of destination surface if present. If color index is valid the color is looked up in palette if present.
  • Added dfb_gfx_back_to_front_copy_180().
  • Added DFBColorKey which is binary compatible with DFBColor for RGB, but has an 8 bit color index instead of the alpha value.

Layer Core

  • Use DFBColorKey instead of DFBColor in the CoreLayerRegionConfig.
  • Fix potential dead lock in layer context initialization.
  • Fix potential dead lock in dfb_layer_context_get_primary_region().

Surface Core

  • NEW SURFACE CORE WORK IN PROGRESS (really usable, but not everything supported yet). Check TODO!
  • dfb_surface_reformat() no longer fails immediatly if the surface is locked, instead it waits for 3 loops before doing it.
  • If no alignment is specified (0), default to 8 bytes offset and pitch alignment. To disable alignment, simply set to 1.

Window Core

  • API break! Replaced dfb_wm_start_desktop() by dfb_wm_post_init(). Removed StartDesktop which had no context pointers from WM API and added PostInit with proper context pointers.
  • Simplified internal dfb_layer_context_create_window() and dfb_window_create() and replaced dfb_window_*grab*() by dfb_window_change_grab().

libdirect

  • API break! Changed DirectHash's u32 key to be unsigned long. This allows to use pointers.
  • Added direct_thread_detach() and direct_thread_is_detached().
  • Use pthread cleanup to free the DirectThread structure etc.
  • Added direct_thread_get_tid().
  • Avoid "unused warning" if debug domains are declared, but not used.
  • Fix 64 bit symbol address parsing in trace code.
  • Fix missing target directory for nm-n files.
  • Readded "%.nm" as an alternative to "nm-n.%".
  • Added direct_sched_yield().
  • Open log file with mode 0664. Automatically flush stderr.
  • Added direct_list_foreach_reverse().
  • Added direct_serial_check() returning true if the target serial is not higher.
  • Flush stdout and stderr before showing the signal handler message.
  • Rearrange locks in debug message code to avoid dead locks in certain circumstances.

libfusion

  • API break! Changed call handler function type. The return value defines the library's behaviour after exiting from the handler. To return a value immediately, write to *ret_val and return FCHR_RETURN. If you want to make a call later on to fusion_call_return() yourself, use FCHR_RETAIN.
  • The new serial value allows to have more than one call pending while calls can be returned in any order. The caller is still blocked on its single call, of course.
  • API break! Added "ctx" argument to fusion_object_pool_create() and FusionObjectDestructor.
  • Close file descriptor of shared memory files and be happy with just the static mmap() and the filename for using truncate() instead of ftruncate().
  • Reinitialize entries in static pool array properly.
  • Added fusion_hash_set_autofree() to enable/disable automatic freeing of values and/or keys.
  • Use FusionHash for arena fields.
  • Fix general dead lock problem with reactors by using read/write locks.
  • Fix zero FusionID in forked process by entering the world after reopening it.
  • Added fusion_dispatcher_tid().
  • Fix lock order in fusion_shm_pool_destroy().
  • Added fusion_reactor_set_lock_only() which does not lock and use it in fusion_object_set_lock() as this is called during object initialization.
  • Added FUSION_SKIRMISH_ASSERT macro for debug mode failing if the skirmish is not locked by the current thread.
  • Added fusion_reactor_set_dispatch_callback() with a test.
  • Added fusion_reactor_attach/dispatch_channel() with the older calls using channel zero.
  • Added fusion_skirmish_wait() and fusion_skirmish_notify(). When you hold the lock you can wait until you get notified, where others can get the lock while you're waiting. At the moment it requires the notifier to acquire the lock.
  • Added timeout to fusion_skirmish_wait(), 0 means unlimited.
  • Added a new Fusion/IPC implementation using standard system calls:
  • Skirmish gets implemented by using sched_yield()+usleep, exactly like linuxthreads does with pthread mutexes, but it's also capable of automatically unlocking whether the owner process died without doing it.
  • Property works like Skirmish, but it doesn't sleep and it doesn't check for a dead owner.
  • Dispatching and co. make use of raw unix sockets: there is a local address specific to each fusionee (/tmp/fusion.@WORLD_INDEX@/@HEX_FUSION_ID@) and each call (/tmp/fusion.@WORLD_INDEX@/call.@HEX_CALL_ID@.@HEX_CALL_SERIAL@), and messages are sent directly from the generator to the socket of the listeners. From a network point of view, this is similar to UDP Multicast (e.g. conference or meeting).
  • The new implementation gets build when --enable-bulti is specified but no usable linux/fusion.h was found (however you can edit fusion/build.h to force building it).
  • Raise max number of shm pools to 16.

Software Rendering

  • Fixed RGB24 to RGB16 conversion.
  • Fix ARGB on RGB16 blending. Use Duff's Device and optimize for 0% and 100% opaque.
  • Fix hi/lo mixup for big/little endian in 32 bit wise 16 bit color keying code.
  • Added smooth up/down scaling for different formats.
  • Fix 64bit implementations of RGB32 source and destination color keying.

DFIFF Image provider

  • Use a preallocated surface to render the image (this should fix support for destinations that are premultiplied, separated, and co.).

PNG Image provider

  • Avoid abort() caused by libpng and return an error instead.
  • Plug a memory leak in the PNG image provider. Thanks to Eugene Everson.
  • Fixes for grayscale PNGs.

Mach64 driver

  • Ported to new surface core.
  • Added RGB444 and RGB555 support.

Matrox driver

  • Ported to new surface core.
  • Added RGB444 and RGB555 support.
  • Eliminate libsysfs dependency from i2c detection.
  • Reset besvcnt to 0 prior to disabling the backend scaler.
  • Sometimes the BES would not turn off with just BESCTL. It seems besvcnt not being programmed to zero has something to do with it since resetting BESGLOBCTL before BESCTL seems to help.

nVidia driver

  • Added support for RGB555.
  • Fixed support for premultiplied surfaces.
  • Dropped down blits from system memory on the NV20 (crashes on Xbox).
  • Optimizations and cleanup.

Radeon driver

  • Ported to new surface core.
  • Support RGB555 and RGB444.
  • RGB555 support on Overlay and CRTC2.
  • Removed limit of 8x8 surfaces: apparently it comes from the Rage128 driver but it doesn't apply to Radeon(s).
  • Implemented DSBLIT_ROTATE180.

Unichrome driver

  • Fix blitting of planar surfaces (YV12/I420) when a source rectangle is used or the source and destination surfaces are different sizes.

Linux Input driver

  • Fix evdev ioctl() parameters.
  • Only use FBDev system module data in linux input driver if system is built.
  • Don't bail out with other system modules if LINUX_INPUT_USE_FBDEV is not set.

FBDev System module

  • Add source rectangle support to fbdev layer.
  • Check fbdev pan/wrap capabilities for double/triple buffering.
  • Fix fbdev_ioctl_call_handler() return value.
  • Fix transfer of errno from master to slaves when doing ioctls.
  • Do FBIOPAN_DISPLAY ioctls directly.

DevMem System module

  • Added generic /dev/mem based system module.
  • There's no screen or layer registered, a graphics driver is required.
  • Added some new runtime options for the new system module.
  • video-phys=<hexaddress> sets the physical start of video memory.
  • video-length=<bytes> sets the length of video memory.
  • mmio-phys=<hexaddress> sets the physical start of MMIO area.
  • mmio-length=<bytes> sets the length of MMIO area.
  • accelerator=<id> sets the accelerator ID for selecting the graphics driver.

SDL System module

  • Support different DirectFB formats on 32 and 16 bit displays.
  • Disable SDL backend by default.

X11 System module

  • Support different DirectFB formats on 32 and 16 bit displays.
  • Implement surface pool using XShmImages and do an XSync() BEFORE doing the next XShmPutImage(). Only call XShmPutImage() for the updated region.
  • Takes advantage of SMP now.
  • Added true keymap support to X11 input driver. Read the X11 keymap entries properly and translate to identifier and symbols. Only send key code in events. X KeySym to DFBInputDeviceKeySymbol translation might not be complete for everyone.
  • Provide the original timestamps from the X events.
  • Use DIEF_FOLLOW for x/y motion.
  • Added call to XFlush() after XShmPutImage() boosting df_andi from 100 to 130 FPS and making window stack updates really smooth and no longer distorted.
  • Use preallocated shared memory for calls, the layer context lock allows this.
  • Support non-SHM connections.
  • Fall back to non-shm if XShmAttach() or XShmPutImage() fail after XShmQuesryExtension() returned success.
  • Handle expose events.
  • Enable X11 System Module by default.

Default WM module

  • Pan the layer to follow the mouse cursor (aka. virtual resolution).
  • Actually fail if a parent window for the newly created one was specified (not supported).

dfbdump tool

  • List buffers in video memory if "-s" is passed.

dfblayer tool

  • Added option "-R <degree>".

directfb-csource tool

  • Add --raw option to directfb-csource to allow encoding data files in headers

dok

2007-08-26   DirectFB 1.0.1

Here's the first update on the 1.0.x stable release branch.

API

  • Extend list of custom key definitions: DIKS_CUSTOM<0-99>

API | IDirectFB

  • Fix code that controls single/double buffer window creation for primary surfaces in windowed mode. If DSCAPS_FLIPPING is set, it uses one buffer which already requires a Flip due to the window. Only if DOUBLE is set explicitly, create two buffers.

API | IDirectFBFont

  • Added DFFA_FIXEDCLIP that can be used in addition to fixed advance and cuts off glyphs if they are wider than that.

API | IDirectFBImageProvider

  • Added DFB_INCOMPLETE and return it from image providers if rendering has been aborted by the render callback.

Pixel formats

  • Added DSPF_RGB444 and DSPF_RGB555, thanks to Daniel J Laird!

Core

  • Explicit shutdown order of core parts and pools.
  • Use a Skirmish to synchronize slaves with the master's post core initialization. The new function dfb_core_activate() will allow other processes to join.

Graphics Core

  • Validate clip in dfb_state_update() also if destination was just set manually, not via dfb_state_set_destination().

Layer Core

  • Fix potential dead lock in layer context initialization.
  • Fix potential dead lock in dfb_layer_context_get_primary_region().

Surface Core

  • dfb_surface_reformat() no longer fails immediatly if the surface is locked, instead it waits for 3 loops before doing it.

libdirect

  • Added direct_thread_detach() and direct_thread_is_detached().
  • Use pthread cleanup to free the DirectThread structure etc.
  • Added direct_thread_get_tid().
  • Avoid "unused warning" if debug domains are declared, but not used.
  • Fix 64 bit symbol address parsing in trace code.
  • Fix missing target directory for nm-n files.
  • Readded "%.nm" as an alternative to "nm-n.%".
  • Added direct_sched_yield().
  • Open log file with mode 0664. Automatically flush stderr.
  • Added direct_list_foreach_reverse().
  • Added direct_serial_check() returning true if the target serial is not higher.
  • Flush stdout and stderr before showing the signal handler message.

libfusion

  • Close file descriptor of shared memory files and be happy with just the static mmap() and the filename for using truncate() instead of ftruncate().
  • Reinitialize entries in static pool array properly.
  • Added fusion_hash_set_autofree() to enable/disable automatic freeing of values and/or keys.
  • Use FusionHash for arena fields.
  • Fix general dead lock problem with reactors by using read/write locks.
  • Fix zero FusionID in forked process by entering the world after reopening it.
  • Added fusion_dispatcher_tid().
  • Fix lock order in fusion_shm_pool_destroy().
  • Added fusion_reactor_set_lock_only() which does not lock and use it in fusion_object_set_lock() as this is called during object initialization.
  • Added FUSION_SKIRMISH_ASSERT macro for debug mode failing if the skirmish is not locked by the current thread.

Software Rendering

  • Fixed RGB24 to RGB16 conversion.
  • Fix ARGB on RGB16 blending. Use Duff's Device and optimize for 0% and 100% opaque.
  • Fix hi/lo mixup for big/little endian in 32 bit wise 16 bit color keying code.

PNG Image provider

  • Avoid abort() caused by libpng and return an error instead.
  • Plug a memory leak in the PNG image provider. Thanks to Eugene Everson.
  • Fixes for grayscale PNGs.

Mach64 driver

  • Added RGB444 and RGB555 support.

Matrox driver

  • Added RGB444 and RGB555 support.
  • Eliminate libsysfs dependency from i2c detection.

nVidia driver

  • Added support for RGB555.
  • Fixed support for premultiplied surfaces.
  • Dropped down blits from system memory on the NV20 (crashes on Xbox).
  • Optimizations and cleanup.

Radeon driver

  • Support RGB555 and RGB444.
  • RGB555 support on Overlay and CRTC2.
  • Removed limit of 8x8 surfaces: apparently it comes from the Rage128 driver but it doesn't apply to Radeon(s).

Unichrome driver

  • Fix blitting of planar surfaces (YV12/I420) when a source rectangle is used or the source and destination surfaces are different sizes.

Linux Input driver

  • Fix evdev ioctl() parameters.
  • Only use FBDev system module data in linux input driver if system is built.
  • Don't bail out with other system modules if LINUX_INPUT_USE_FBDEV is not set.

FBDev System module

  • Add source rectangle support to fbdev layer.
  • Check fbdev pan/wrap capabilities for double/triple buffering.

DevMem System module

  • Added generic /dev/mem based system module.
  • There's no screen or layer registered, a graphics driver is required.
  • Added some new runtime options for the new system module.
  • video-phys=<hexaddress> sets the physical start of video memory.
  • video-length=<bytes> sets the length of video memory.
  • mmio-phys=<hexaddress> sets the physical start of MMIO area.
  • mmio-length=<bytes> sets the length of MMIO area.
  • accelerator=<id> sets the accelerator ID for selecting the graphics driver.

SDL System module

  • Support different DirectFB formats on 32 and 16 bit displays.

X11 System module

  • Support different DirectFB formats on 32 and 16 bit displays.
  • Use an ShmImage with twice the height of the output. Alternate between bottom and top image and do XSync() BEFORE doing the next XShmPutImage(). Only call XShmPutImage() for the updated region.
  • Takes advantage of SMP now.
  • Added true keymap support to X11 input driver. Read the X11 keymap entries properly and translate to identifier and symbols. Only send key code in events. X KeySym to DFBInputDeviceKeySymbol translation might not be complete for everyone.
  • Provide the original timestamps from the X events.
  • Use DIEF_FOLLOW for x/y motion.
  • Added call to XFlush() after XShmPutImage() boosting df_andi from 100 to 130 FPS and making window stack updates really smooth and no longer distorted.
  • Use preallocated shared memory for calls, the layer context lock allows this.
  • Support non-SHM connections.
  • Fall back to non-shm if XShmAttach() or XShmPutImage() fail after XShmQuesryExtension() returned success.
  • Handle expose events.
  • Enable X11 System Module by default.

Default WM module

  • Pan the layer to follow the mouse cursor (aka. virtual resolution).

dfbdump tool

  • List buffers in video memory if "-s" is passed.

directfb-csource tool

  • Add --raw option to directfb-csource to allow encoding data files in headers.

dok

2007-08-21   Morphine.TV

Morphine.TV has gone 1.0.1 just shortly before DirectFB. It's an application by "a team of 5 developers from Berlin" developing a new HTPC solution with a transparent interface.

dok

2007-07-05   Save the roots!

The c-base (translate) is one of the backings of DirectFB which has its roots there since it has been started in July 2000. It is a place of art, pleasure and inspiration. Developers and other people from over the world go there to enjoy a nice atmosphere, relax, dance, or just have conferences like the OLSR project, the Wikipedia people and many others!
After seven years of supporting DirectFB with recreation, this place is about to run out of money (translate).
Please help preserving this unique facility (translate) and donate money, become a member, have an event there or share your ideas on how to keep the spirit alive!

dok

2007-03-04   DirectFB 1.0.0

The time has come

Let it all begin,
Start the future,
Head forward and
Make it happen

This is for you!

Berlin, 4th of March 2007, 0:21 CET

libfusion

  • Use local memory for FusionVector (D_MALLOC instead of SHMALLOC) if pool is NULL in fusion_vector_init().

SDL Input

  • Thanks to Ben Combee for adding DIEF_FOLLOW support!

dfbdump tool

  • Align output of summarized surface memory again.

dok

2007-03-02   DirectFB 5th Advent (RC5)

"Are we there yet?"

API | IDirectFBVideoProvider

  • Another (binary compatible) API change: added DVSTATE_BUFFERING.

Build Options

  • This patch adds '--with-message-size=SIZE' to allow fusion messages up to SIZE bytes (default is 1024).

Runtime Options

  • New option "shmfile-group=" to set the group that owns shared memory files.
  • Added option "[no-]thrifty-surface-buffers" to free sysmem instance on xfer to video memory.
  • Don't abort if an unsupported option is found, but give a fat warning.
  • New option "vt-num=" to use given VT instead of current/new one.

Graphics Core

  • Added dfb_gfxcard_get_device_data().
  • This fixes unconditional access to conditionally allocated font row data, thanks to Ben Combee!
  • Surface manager always deallocates all auto video instances when suspending. This has the nice side effect of free space being defragmented after resume :)

Window Core

  • Don't notify WM if cursor opacity didn't actually change.

Software Rendering

  • Added fast RGB24 to RGB16 conversion (little endian only).

libdirect (optional part)

  • Finally found the way to embed MPEG streams within the RMF container.
  • Dropped down RTSP seekability (never worked fine).

PNG Image Provider

  • Implemented 1 and 2 bit indexed PNG support.

Keyboard (TTY)

  • Added keypad equal support.

Linux Input

  • Added keypad equal support.

H3600 Touchscreen

  • Thanks to Philip J├Ągenstedt :philipj 0pera c0m: for fixing the H3600 check!

FBDev System

  • Improved robustness of VT switching, e.g. for rapidly switching back and forth.
  • Set FD_CLOEXEC on the frame buffer device file descriptor.

dfbdump tool

  • Show creator of references (of windows, surfaces, contexts etc).

dok

2007-02-05   DirectFB 4th Advent (1.0.0 RC4)

One more time :)

FBDev System Module

  • Many thanks to Vaclav Slavik for fixing up VT initialization. Check the ChangeLog for a detailed description.

Unichrome Driver

  • Allow for improved timing of video layer flips when the FIELD_PARITY option is in use. The improvement is only possible if the kernel framebuffer supports it. If not, we do the best we can but occasional glitches may occur under high processor load.

Misc/minor (usually not in a summary, but due to the few changes...)

  • Distribute autogen.sh
  • Add new lines to work around nested structs being taken by the doc generator.
  • Avoid cutting away the last pixel of a planar yuv row.

dok

2007-01-30   SaWMan

SaWMan Screen Tiling Demo DirectFB proudly presents SaWMan, the Shared application and Window Manager, as a co-development of Royal Philips and Denis Oliver Kropp. Click news header for more information or download SaWMan right away and check the README - same text :)

Introduction

SaWMan is a new window manager module for use with DirectFB. Its main difference to the default module is that it allows one process to be an application and window manager, implementing all kinds of diversity, while SaWMan is only the working horse.

On its own, SaWMan will behave similar to the default window manager, but as soon as there's an application manager, SaWMan will do synchronous RPCs to that application in relevant functions of the window manager module. That means it switches to the process and continues after it has completed the requested call and returned a result. The data which those calls operate on is already in shared memory, e.g. a window configuration.

The application manager can hook itself into several operations with this, e.g. it can forbid or modify requested window configurations right before they're actually applied by SaWMan.

For non-desktop and especially non-pointer environments like TVs, it is important to provide a simple and convenient layout and focus management. The layout of all windows can be completely overridden by the application manager, e.g. to implement a screen tiling mode.

The integration of application management allows easy definition and handling of application specific constraints. The manager has a list of applications identified by their name. Launching applications is usually initiated by the application manager itself, e.g. based on global keys grabbed by an input only window. However, the public SaWMan interfaces provide a way to send launch/shutdown requests from any application to the application manager.

While the key grabbing only provides asynchronous notification about keys which are then handled in the manager's main loop, SaWMan provides a hook to let the manager basically filter every single input event in a synchronous way, similar to the window configuration. Critical operations like layout and focus switching are best done in this callback.

For more information you can check the more or less documented header files in the include/ directory, or have a look at 'testman' - a minimal example of a manager implementation in the samples/ directory. You'll also find a small test program called 'testrun' which demonstrates launching of applications from another application.

Running testman

Once you have a session running after setting the option "wm = sawman" you'll notice that there's nothing new, except the old window manager hacks (builtin keys) are gone.

However, if you start 'testman' from the samples/ directory, you'll see windows being tiled on the screen, unless these windows have the DWCAPS_NODECORATION flag, e.g. LiTE and XDirectFB use that.

You can try running "df_andi --dfb:force-windowed" or even simply run df_window.

Hitting F9 cycles the focus through managed windows.
F10 would switch layout modes, but there's only one implemented in the test code.
F11 switches between "smooth software" or "standard (hw/sw)" scaling (for windows only).

The smooth scaling algorithms have also been developed in the scope of this project.

Using testrun

The command "testrun " will start/stop an application.

Available in the test code are:

  • Penguins: df_andi --dfb:mode=640x480,force-windowed
  • Windows: df_windows

dok

2007-01-29   DirectFB 1.0.0 RC3

Probably last release candidate, please test and report :)

API

  • Added IDirectFBWindow::SetBounds() to do a move and resize in one step.
  • New window option DWOP_SCALE prevents the surface from being resized when the window size on screen changes, i.e. via IDirectFBWindow::Resize() or SetBounds().
  • The surface can be resized separately using IDirectFBWindow::ResizeSurface() if needed.
  • Enable DWOP_SCALE by default for windowed primary surface (IDirectFB::CreateSurface).
  • Fixed DIKT_UNICODE detection in DFB_KEY_TYPE(symbol) for values > 255.

Runtime Options

  • New runtime option "scaled=<width>x<height>" scales the window to the specified size for 'force-windowed' apps. The surface size will not be affected, still set via "mode=".
  • Added options "debugmem" and "debugshm" to turn on local/shared memory allocation debugging separately from "debug" option.
  • Let "debugmem" option only influence output of allocations, but always track them in debug enabled builds.
  • Added option "no-software" to disable software fallbacks. This is mainly for debugging/profiling purpose. It will print out a warning with the operation and flags each time a fallback would occur.
  • Read DIRECTFB_SESSION variable after reading all files and DFBARGS, so only the command line can override the current session.
  • Added runtime option "force-slave" to always enter as a slave, waiting for the master, if not already there. This feature only works with recent kernel module.

Graphics Core

  • Added InvalidateState() at driver level API to notify the driver that the current rendering state is no longer valid.

Surface Core

  • Added ability to let only one Fusionee write to a surface, set via owner field of CoreSurface.
  • Don't try to immediately allocate the new video instance when reallocating a buffer (unless the policy is CSP_VIDEOONLY). Fixes corruption problems in XDirectFB caused by window resize failing.
  • Dispatch surface's notifications directly (if local). This change fixes an assertion failure that happens in the following case: Resize (Downsize) Surface ... and immediatly after ... Blit to Surface.

Layer Core

  • Support DLBM_BACKSYSTEM as a (driver) default.

Window Core

  • Give the WM a chance to provide its own surface. The WM may link a surface to the window in the PreConfigureWindow() call.
  • Dispatch window's notifications directly (if local).

Software Rendering

  • Added Bop_argb_blend_alphachannel_src_invsrc_Aop_PFI[] as a fast path for blending from ARGB with SRCALPHA / INVSRCALPHA. Implemented for RGB16 and RGB32 so far.
  • Use cpp templates for 16bpp and 32bpp code.
  • Removes duplicated code.
  • Implements some missing gfx funcs.
  • Fixes missing EXPAND() calls in some acc funcs.
  • Fixes blit direction handling in some 16bpp blit funcs.

Utils

  • Added some basic update region management (DFBUpdates) with functions for adding updates, keeping a maximum number of regions, merging if possible or required. First version, IQ 10.

libdirect

  • Autodetect clock skew.
  • Added direct_list_move_to_front( **list, *link ).
  • Added direct_snputs(s,d,n) to set a string with a maximum size including the zero termination. This acts like a strncpy(d,s,n), but always terminates the string like snprintf(d,n,"%s",s) which is more or less slower.
  • If trace support and shared libraries are enabled, for each library to install, also generate a file containing the output of "nm -n <that library>". That's the command that is used at runtime via popen().
  • Now the code first checks if it can fopen() a file with the same name as the one passed to "nm -n", but with an "nm-n." prefix. This is both a performance improvement and a nice solution for (embedded) targets without 'nm' being available or fast enough.

libdirect (optional part)

  • Implemented seekability over RTSP.

libfusion

  • Use MADV_REMOVE if possible to give memory back to the system after freeing a block in the middle of the heap.
  • No more signal handler used, because no more mremap() is done, only ftruncate() is called to resize the shared memory heap. The initial mmap() now covers the whole address range.
  • Initialize the heap info table to serve for the maximum pool size specified at creation of the pool. Previously, the initial table served for 4 MB heap. If there were more allocations, the heap info table was reallocated at the end of the heap, i.e. at 4 MB making it impossible to ever go back below the 4 MB heap size. Next barrier was 8 MB, 16 MB ...these are gone.
  • The maximum size specified during creation of a pool is now taken as an additional size after the heap info table. Previously, it could happen that the size was too small to host the fixed sized heap info table.
  • Include Fusion ID of allocator and offset within heap in shm allocation debug info.
  • Print shared memory leaks on pool shutdown (debug mode and 'debugshm' option).
  • Added fusion_reactor_direct(bool) to specify whether local message handlers (reactions) should be called directly, which has been the previous behaviour for years...
  • Fall back to /dev/shm if no mount point could be determined.
  • Added FCEF_NODIRECT which forces execution of the call in the Fusion Dispatch thread even if it's the calling process' own call.
  • Only call fusion_sync() if the pool that is to be destroyed has objects.
  • Fixed fusion_sync() timeout during XDirectFB shutdown.
  • Fixed concurrent startup of master and slaves.

Voodoo

  • Missing methods added and more implemented.

PNG Image Provider

  • Support loading of indexed PNG files directly to LUT8 surface.
  • Provide palette of image via GetSurfaceDescription().

FT2 Font

  • Added support for LUT2 fonts for using fast antialiased text rendering with indexed to indexed translation.
  • Thanks to Vaclav Slavik for fixing loading of mono-only fonts.

Default WM

  • Added support for scaled windows.
  • Make cursor area backing store surface same format as layer.
  • Use DFBUpdates to manage an update queue and do optimizations like taking the bounding box instead of multiple smaller regions if the number of pixels in the bounding box is not much higher than the total of the smaller ones.
  • Even this takes the number of smaller regions into account, because of the increasing overhead per region.
  • Next to performance, the visual experience is enhanced by coalesced updates.
  • Another advantage is that when multiple regions are updated, first it renders all regions and then it flips all regions. Previously, each time the flip was done immediately for each rendered region.

Radeon Driver

  • Implemented StretchBlit, TextureTriangles, Alphablend, Deinterlacing for the R300 chipset family, thanks to Timon +timon37 * interia-pl+!!!
  • Support color keying for TMU based functions on R300.

Unichrome Driver

  • Implemented acceleration for blits involving the AiRGB pixel format.
  • DSPF_AiRGB is now supported as a source format for most blits and stretch blits.
  • Blits _to_ AiRGB surfaces are also accelerated provided they don't require blending.

Linux Input

  • Added Touchpad support, thanks to Attilio Fiandrotti and others!

tslib Input

  • New driver, thanks to Shane Volpe!

dfbdump tool

  • Added the option "-p" to pause() dfbdump after initialization, e.g. to run it as a master and look at the foot print or other things that are there before any application specific stuff happens.
  • Show allocations in both DirectFB shared memory pools with option "-s".

dok


directfb.org / Main / News