https://bugs.winehq.org/show_bug.cgi?id=19153
Andrew D'Addesio andrew@fatbag.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |andrew@fatbag.net
--- Comment #12 from Andrew D'Addesio andrew@fatbag.net --- Hello,
I can confirm that this bug (still present in 1.7.49-git) is one factor preventing The Sims Online from starting in WineD3D on Windows.
Using a debugger, I determined that the game calls IDirect3D3::EnumDevices and searches by name (not by GUID) for the IDirect3DRGBDevice: that is, for each device returned by EnumDevices, it does a string comparison of the device's name against the string "RGB Emulation".
The problem is that Wine calls this device "Direct3D HEL". The game does not handle this condition and crashes. (The DDPIXELFORMAT struct it creates for this device remains uninitialized, causing a later call to CreateSurface to fail with DDERR_INVALIDPIXELFORMAT; the game passes the returned null surface pointer to AddAttachedSurface, causing Wine to crash.)
In Windows 7's ddraw.dll, IDirect3D3::EnumDevices returns these devices: * "RGB Emulation": {a4665c60-2673-11cf-a31a-00aa00b93356} * "Direct3D HAL": {84e63de0-46aa-11cf-816f-0000c020156e}
whereas Wine's ddraw.dll returns these devices: * "Direct3D HEL": {a4665c60-2673-11cf-a31a-00aa00b93356} * "Direct3D HAL": {84e63de0-46aa-11cf-816f-0000c020156e}
The names "Direct3D HEL" and "Direct3D HAL" were chosen in a patch made in 2008:
https://www.winehq.org/pipermail/wine-patches/2008-April/053647.html
Jens Albretsen jens at albretsen.dk Sun Apr 20 13:32:11 CDT 2008
Fixed EnumDevices, device name is now compatible with games checking the device name i.e "Donald duck going quackers", the correct device name is "Direct3D HAL" or "Direct3D HEL" not "direct3d".
I created a test which calls EnumDevices for all the IDirect3D* interfaces and prints all of the returned devices, and in Windows 7 (using Windows 7's ddraw.dll) I was unable to get EnumDevices to return a device named "Direct3D HEL". Is this the correct name? I'm attaching the test and results for reference.
In short, on my system, the devices are:
IDirect3D: * "Ramp Emulation": {f2086b20-259f-11cf-a31a-00aa00b93356} * "RGB Emulation": {a4665c60-2673-11cf-a31a-00aa00b93356} * "Direct3D HAL": {84e63de0-46aa-11cf-816f-0000c020156e}
IDirect3D2: * "Ramp Emulation": {f2086b20-259f-11cf-a31a-00aa00b93356} * "RGB Emulation": {a4665c60-2673-11cf-a31a-00aa00b93356} * "Direct3D HAL": {84e63de0-46aa-11cf-816f-0000c020156e} * "MMX Emulation": {881949a1-d6f3-11d0-89ab-00a0c9054129}
IDirect3D3: * "RGB Emulation": {a4665c60-2673-11cf-a31a-00aa00b93356} * "Direct3D HAL": {84e63de0-46aa-11cf-816f-0000c020156e}
IDirect3D7: * "RGB Emulation" * "Direct3D HAL" * "Direct3D T&L HAL"
This my first time posting to the Wine bugtracker / mailing lists and this is my first time entering the Wine community, and I'm not sure what your policy is towards online games which are no longer ("officially") playable. I can see why it might be undesirable to rename devices to appear as if they were Microsoft's, just to provide compatibility to a few titles.