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
directfb-dev@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev

Reply via email to