One more precision :

I fount out that it's the blitting operation that slows down the rendering,
for a picture in 1920*1080, in normal mode, it takes 200ms, in fullscreen
mode 2,5 seconds.
I have also seen that the blitting is performed by the software, because of
wrong alpha pixelformat...

So here are my configurations for pixel format :

##############################################
--> directfbrc :
----------------------
system=stgfbdev
module-dir=/usr/lib/directfb-stsdk
depth=32
pixelformat=ARGB
hardware
#software-warn
no-cursor
bg-none

##############################################
-->graphics initialization :
-------------------------------------
insmod modules/stgfb_core.ko mod_init=NO g_devnum=1 layer_name="GFX_LAYER0"
g_mem="16" g_format="ARGB8888" g_tvOutMode="1920x1080-50i" g_width="1920"
g_height="1080" 
fbset -xres 1920 -yres 1080 -depth 32
/root/modules/stgfb_control /dev/fb0 a 128

##############################################
-->directfb software init :
-------------------------------------
DFBCHECK(gWavePeerDfb->SetCooperativeLevel(gWavePeerDfb, DFSCL_FULLSCREEN));
dsc.flags = DSDESC_CAPS;
dsc.caps = DSCAPS_PRIMARY | DSCAPS_DOUBLE;
DFBCHECK(gWavePeerDfb->CreateSurface( gWavePeerDfb, &dsc,
&gWavePeerPrimaryMain ));

DFBCHECK(gWavePeerPrimaryMain->GetPixelFormat( gWavePeerPrimaryMain,
&pixelformat ));
DFBCHECK(gWavePeerPrimaryMain->GetSize(gWavePeerPrimaryMain,
&gWavePeerWidth, &gWavePeerHeight));

DFBCHECK(gWavePeerPrimaryMain->Clear(gWavePeerPrimaryMain, 0, 0, 0, 0x00));

DFBCHECK(gWavePeerPrimaryMain->GetSubSurface( gWavePeerPrimaryMain, NULL,
&gWavePeerPrimary ));

DFBCHECK(gWavePeerPrimary->Lock(gWavePeerPrimary, DSLF_READ, &DestPtr,
&gPitch));
DFBCHECK(gWavePeerPrimary->Unlock(gWavePeerPrimary));
DFBCHECK(gWavePeerPrimary->SetBlittingFlags(gWavePeerPrimary,
DSBLIT_BLEND_ALPHACHANNEL));
DFBCHECK(gWavePeerPrimary->SetDrawingFlags(gWavePeerPrimary, DSDRAW_BLEND));
DFBCHECK(gWavePeerPrimary->Flip(gWavePeerPrimary, NULL, DSFLIP_WAITFORSYNC |
DSFLIP_BLIT));


##############################################
-->During the blit I perform following call : 
-------------------------------------------------------------
desc.flags  = 0;
desc.flags |= DSDESC_WIDTH | DSDESC_HEIGHT;
desc.flags |= DSDESC_PIXELFORMAT;
desc.flags |= DSDESC_PREALLOCATED;
desc.caps = DSCAPS_VIDEOONLY;

desc.width  = in_bitmapwidth; /* width of bitmap to display */
desc.height = in_bitmapheight; /* heigh of bitmap to display */
desc.pixelformat = DSPF_ARGB;

desc.preallocated[0].data = in_bitmap;
desc.preallocated[0].pitch = 512 or 1024; /* depending on width of bitmap to
display */
desc.preallocated[1].data = NULL;
desc.preallocated[1].pitch = 0;

DFBCHECK(gWavePeerDfb->CreateSurface(gWavePeerDfb, &desc, &newSurface));


DFBCHECK(gWavePeerPrimary->SetBlittingFlags(gWavePeerPrimary,
DSBLIT_BLEND_ALPHACHANNEL));
DFBCHECK(gWavePeerPrimary->Blit(gWavePeerPrimary,
                            newSurface,
                            &src_rect,
                            in_rect->fX, in_rect->fY));





##############################################
So, am I configuring something wrong that makes the blitting be performed by
the software and not by the hardware?
I have enabled the option "software-warn" in directfbrc and obtain the warn
during the blitting operation

Thank you for your answers ^^.

Marc
-- 
View this message in context: 
http://old.nabble.com/Change-in-rendering-speed-between-DFSCL_FULLSCREEN-and-DFSCL_NORMAL-SetCooperativeLevel-tp33763303p33763458.html
Sent from the DirectFB Users mailing list archive at Nabble.com.

_______________________________________________
directfb-users mailing list
directfb-users@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users

Reply via email to