BUG (3920) + sync between DIBs and X Server optimisation.
(please help)
Robert Shearman
rob at codeweavers.com
Mon Dec 12 11:07:20 CST 2005
Marinescu-Ghetau Iulian wrote:
> I came to the conclusion that the slowness in "Heroes IV" it has to do
> with
> sync'ing lage bitmaps between application DIBs and X Server(see the
> log: http://bugs.winehq.org/attachment.cgi?id=1470&action=view ).
>
> Also, a complete description of the bug is here:
> http://bugs.winehq.org/show_bug.cgi?id=3902
>
> So i had this ideea that every GDI function could memorise the
> rectangle that is modifying, so each time a sync between DIB and X
> Server is needed, only a small part from the bitmap will get copied! I
> also made some changes to dib.c, bitblt.c and x11drv.h in
> "wine-0.9.2\dlls\x11drv" folder to implement my ideea, keeping
> backwards compatibility (if a DIB function doesn't set a valid
> rectangle for the bitmap that its modifying, the default values are
> taken - which is the entire bitmap)
>
>
> - and finally, a GDI function calls it like this (for example bitblt):
>
> X11DRV_SetBoundRect(physDevDst->bitmap,xDst,yDst,width,height);
> X11DRV_CoerceDIBSection( physDevDst, DIB_Status_GdiMod, FALSE );
> if (physDevDst != physDevSrc)
> {
> X11DRV_SetBoundRect(physDevSrc->bitmap,xSrc,ySrc,width,height);
> X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
> }
I think it would be better to make X11DRV_CoerceDIBSection take the
parameters for a bounding rect, otherwise it is possible to forget a
call to SetBoundRect and cause the DIB to not be updated.
--
Rob Shearman
More information about the wine-devel
mailing list