http://bugs.winehq.org/show_bug.cgi?id=58731
Bug ID: 58731 Summary: Using newer versions of dgVoodoo2 to play older games fail to initialize. Product: Wine-staging Version: 10.15 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: nosferatu.arucard.1983@gmail.com CC: leslie_alistair@hotmail.com, z.figura12@gmail.com Distribution: ---
This is a year old bug around the Steam and later Lutris gaming community when notice the dgVoodoo2 wrapper after version 2.80 fail to work on Wine, either Proton or Proton-GE or any forks. Since Proton always uses DXVK for Direc3D 11 rendering (the dgVoodoo2 output), it was common to combine dgVoodoo2 with DXVK to wrap old DirectX and 3dfx Glide code to Direct3D 11, leaving DXVK to translate to Vulkan.
As the time goes around, Dege was wary the fact that the last version of this own creation is now 2.86.2 at the time of writing and Lutris never update beyond 2.80 or a modded version called 2.8.2
After some testing and a rare game called Montezuma's Return which have a 3dfx version, I discovery that using dgVoodoo2 over Wine's vanilla DirectX 11 implementation also had the same problems like Proton or Wine-GE (modded versions) with DXVK.
This old Glide game works with the lastest dgVoodoo2 without problems, while DirectDraw games like Omikron or Carmageddon TDR2000 fail to work using the lastest dgVoodoo2, but older versions worked fine.
But the latter games had GPU diagnose tools and a pattern was found. If the dgVoodoo2 wrapper works, then the virtual dgVoodoo DirectX wrapper appears on devices list. If not, it displays the Wine's safe mode software renderer (DirectDraw HAL). Forcing playing the game, makes them crash or running at slowest speeds. After all testing, the issue happens either using DXVK or Wine's DirectX implementation, meaning that the problem should be found on Wine's code.
Computers with Mesa drivers at certain games could start dgVoodoo2 2.86.2 on games like Omikron, which means that this open-source drivers code had an unintended workaround to force dgVoodoo2 to work, but this is rare and not always work.
The test with Montezuma Return shows that the emulation code from Glide to DirectX works on Wine, along the DirectDraw emulation that work on certain cases. However the real issue is the initialization routine (that was changed) caused this huge regression, and it is not be handled by Wine.