This game has some extra rendering glitches via dgVoodoo. Common observation is Z-fighting on certain surfaces, mostly obvious on various signs showing directions, cars' registration plates and inscriptions on special vehicles like taxis and police cars.

Choosing Radeon 8500 for virtual graphics card brings back some shadow flickering, while selecting any GeForce card breaks water shader mod. Default 3D accelerated card only has issues described in the previous paragraph.

On my system configuration, I have a bizarre game crashing bug when I run it natively. Interestingly, it occurs on WIndows 8.1 and Windows 7, but not on Windows 10. Swapping my NVIDIA GeForce GTX 750 Ti for the old ATI RAdeon HD 4890 also gets it running natively without crashes on older Windows versions. I'd rather not go back to WIndows 10 because of its general clunkiness and recent crash that rendered it unbootable. I suspect it has some odd incompatibility with the specialized driver for my motherboard's SATA controller, as some error has been showing for some time in the event log. Windows 8.1 works like a Swiss watch on this system.

Running via dgVoodoo is crash-free in any case. Natively, it seems lowering Level of Details just eventually makes it crash somewhere else (in any case, somewhere in LS3DF.dll). Some time ago, I messed with WineD3D, only some very old version made the game start, but it was veeeery slow (felt like 10 FPS). Tried latest version today and got a crash on start just like the last time I tried then current version. But it works fine on real Linux via Wine with zero rendering glitches. It would be great if dgVodooo could pull of Wine's rendering accuracy.

My guess is that it should work, being a DirectX 10.1 card. I don't think I was aware of DirectX version of dgVoodoo at the time. I completely forgot about the issue with Mafia that this combination of hardware and software brings until now. So then, I've looked it up, even asked a question on GeForce forums, but no solution in sight. It makes no sense at all. Was using 347.88 drivers at the time, now I have 368.81, same thing. At least dgVoodoo specific issues are universally reproducible.

So I removed all mods and that got rid of the crashing, still strange that it would occur only under certain circumstances, only had some extra textures and water shader mod, though I do seems to remember widescreen fix coming with some modded model file or something like that, but it doesn't seem to be needed, maybe it was related to that, will see. It seems crashing is related to model files that come MAFIA TreeS Project v3.0. Why only natively and only on Windows 7, 8.1...

Some Z-fighting can also be observed when running natively, but not as much. Still, Wine's D3D8 -> OpenGL wrapping results in perfect image on my end. Besides the fact that it's a bit slower, I seem to remember their usage of frame buffer objects causes inability to force anti-aliasing. I also never managed to force anisotropic filtering on games via Wine, though I might have missed something.

Ironically, the problem was using double precision at some matrix multiplication operation(s), instead of single prec.I fixed it and now Mafia and Morrowind (the same problem) seems to be perfect.DX always used single precision for its calculations, both on FPU for sw vertex processing and GPU for hw vertex processing.

dgVoodoo however still has an issue with single/double prec, some of the nVidia tech demos simply get into infinite loop and hang (expecting single prec but the FPU is set to double).I had some bad assumptions in the beginning when started to write D3D emulation, that's why this issue is still there. I don't want to fix it in the next version thought because it could easily broke anything and require tremendous testings.

That's great to hear, at least 2 games now work better than before! Honestly, I have no idea how you manage, there are so many overwhelming details everywhere. Particularly when fixing something breaks something else.

BTW, today I managed to get Mafia working with latest WineD3D DLLs for the first time on Windows. I had to unregister ir50_32.dll with regsvr32 to prevent startup crash, so no intro videos. It didn't go smootly so OllyDbg had to help me because that DLL didn't like the return values from certain registry functions so it stopped at cleaning registry entries prematurely. I wasn't paying attention, maybe it tried deleting something that wasn't there in the first place, given that RegDeleteValue returned ERROR_FILE_NOT_FOUND. OllyDbg still showed last error as ERROR_SUCCESS. Windows XP compatibility mode manages to restore videos without the need to register that DLL, apparently it's connected to VirtualRegistry shim.

Game then worked pretty much the same graphics-wise as on Linux, interestingly, forcing anisotropic filtering didn't have any effect, must be some some strange OpenGL magic at work.