[Bug 3902] Unnormal slowness in Heroes 4 (X11DRV_BitBlt?)
Wine Bugs
wine-bugs at winehq.org
Wed Nov 30 09:48:16 CST 2005
http://bugs.winehq.org/show_bug.cgi?id=3902
------- Additional Comments From giulian2003 at hotmail.com 2005-30-11 09:48 -------
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 above log).
This happens when a GDI call tries to get a DIB from 'DIB_Status_AppMod' stat
into 'DIB_Status_GdiMod' stat. Eventually X11DRV_DIB_DoUpdateDIBSection() will
be called, which will try to sync the entire bitmap, even though maybe only a
small part of the bitmap has been modified by the program:
static void X11DRV_DIB_DoUpdateDIBSection(X_PHYSBITMAP *physBitmap, BOOL toDIB)
{
BITMAP bitmap;
GetObjectW( physBitmap->hbitmap, sizeof(bitmap), &bitmap );
X11DRV_DIB_DoCopyDIBSection(physBitmap, toDIB,
physBitmap->colorMap, physBitmap->nColorMap,
physBitmap->pixmap, 0, 0, 0, 0,
bitmap.bmWidth, bitmap.bmHeight);
}
I think this can be improved in the following way:
1. Add a new member to X_PHYSBITMAP structure (RECT LastModRect) which will
memorise the acctual rectangle that needs to be sync'ed by
X11DRV_DIB_DoCopyDIBSection() function.
2. Modify all or a number or GDI function to set physBitmap->LastModRect
accordingly, before calling X11DRV_DIB_Coerce(physBitmap, DIB_Status_GdiMod,
FALSE).
3. Modify X11DRV_DIB_DoUpdateDIBSection() to take in consideration LastModRect
and if its valid, try sync only that part of the bitmap and afterwords
invalidate LastModRect. If LastModRect doesn't contain valid values,
X11DRV_DIB_DoUpdateDIBSection() will try to sync the entire bitmap as it did
untill now, this way, if a GDI function doesn't set LastModRect accordingly,
everything will still work.
If anybody else has any other ideea how to improve performance, please share
it :)
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
More information about the wine-bugs
mailing list