[Bug 3902] Need DIB engine (Unnormal slowness in Heroes 4 (X11DRV_BitBlt?))

Wine Bugs wine-bugs at winehq.org
Sat Oct 14 03:25:32 CDT 2006


damjan.jov at gmail.com changed:

           What    |Removed                     |Added
Attachment #3838 is|0                           |1
           obsolete|                            |

------- Additional Comments From damjan.jov at gmail.com  2006-14-10 03:25 -------
Created an attachment (id=3851)
 --> (http://bugs.winehq.org/attachment.cgi?id=3851&action=view)
client-side DIB copy patch, v2

Well, I'll be damned...

After hours of trying with no luck, I saw the message:
Cannot change screen BPP from 32 to 16.

So I tried running X in 16-bit depth, and Heroes 4 worked substantially faster
(with no patches).

I added the dirty rectangle patch - maybe ran a little faster.
I added the client-side DIB copy patch - looked perfect, ran like lightning!

So why does it work in 16 bpp and not in 24? I switched X back to 24, and sure
enough, it was still broken. Where I calculate witdhs and offsets, I tried
multiplying by 4 instead of 3 - even worse. So I tried multiplying by 2 instead
- looked perfect, ran like lightning.

But how can it be using 16 bpp when it reports 24? Well, incredibly enough,
X_PHYSDEVICE's depth and X_PHYSDEVICE's bitmap's pixmap_depth are the X pixmap
depth, NOT the client-side bitmap depth which is given by DIBSECTION's dsBm's
bmBitsPixel (a fact which isn't documented anywhere).

When I changed the code to use the DIBSECTION values like it should, everything
looks good and runs super-fast. I've already submitted the patch to
wine-patches. Happy playing ;-).

Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

More information about the wine-bugs mailing list