Am Sonntag, 2. September 2007 14:15 schrieb David Hedberg:
While this works as a "fix", it's obviously not a good one. In my (somewhat limited and at the moment not doublechecked) understanding, windows "always" returns (at least) two devices, one reporting T&L capable and one not. So I am wondering how one would implement a proper fix for this in wine.
It is quite likely that windows enumerates more than one device, but you have to keep an eye on the direct3d interface version. IDirect3D1 enumerates other devices than IDirect3D7, which is pretty tricky. IDirect3D7 only has HAL and TnLHal I think, others have HAL, TnLHal, MMX, RGB, Ramp. IDirect3D (1) does NOT enumerate the REF device.
What you could do is to add a test in dlls/ddraw/tests/d3d.c for this. The test could enumerate the devices, and verify that if the TnlHal device is enumerated, HAL is enumerated too, or something like that, depending on what Windows really does.
You've run into a pretty nasty and long-lasting problem here, a game that breaks with certain advertized or not advertized capabilities.