DFB 1.6.1
My graphics driver is having a problem with the directfbrc option
"layers-clear".
This is what happens when I call the following functions:
1. IDirectFB_GetDisplayLayer
- When the layer gets created, if "layers-clear" is set (which it is by
default), it calls IDirectFBSurface_Clear on the buffer, say BufferA. This is
an accelerated function call for me and leaves the operation in the queue for
BufferA.
2. IDirectFBDisplayLayer_SetCooperative
- Sets the cooperative level to DLSCL_EXCLUSIVE.
3. IDirectFBDisplayLayer_SetConfiguration.
- Calling this function results in dfb_layer_context_reallocate_surface
getting called. BufferB is created and instead of calling flip, it increments
the flip count for the surface. Later, it internally calls GraphicsEmitCommands
for BufferB. The CardState of the graphics driver indicates that the active
buffer is BufferA. The two pointers don't match and it asserts. For this driver
it is important that the correct buffer be passed in because we store the
operations on a per buffer basis and flush them on a per buffer basis.
This is the code in question:
File: src/core/layer_context.c
Function: dfb_layer_context_reallocate_surface()
....
if (config->buffermode != DLBM_BACKSYSTEM && !(surface->config.caps &
DSCAPS_FLIPPING))
surface->flips++;
...
Calling an internal flip instead of incrementing the flip count, I would
assume, would maintain the coherency of the graphics driver by naturally
calling GraphicsEmitCommands for BufferA instead of passing BufferB.
Is it necessary to increment the flip count directly or is it possible to call
flip?
Thanks,
Bryce
_______________________________________________
directfb-dev mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev