dege-diosg / dgVoodoo2

Glide/DirectX implementation on D3D11/12
872 stars 37 forks source link

Video Playback Issue on Omikron - The Nomad Soul #68

Open Arucard1983 opened 3 years ago

Arucard1983 commented 3 years ago

First of all, thanks for your old DirectX wrapper for DX11 that together with DXVK many old games run with superior performance than the old WineD3D code. Valve and Lutris are still reluctant to integrate dgVoodoo2 on Proton as an option to play older DirectX games, but this is an unrelated issue.

One particular DirectX 7 game (Omikron) runs on Linux using Proton if only your wrapper are installed (copied the dll's and set the launch option 'WINEDLLOVERRIDES="ddraw=n" %command%'), and runs perfectly, as it shows by this screenshot. 20210426022308_1

Modded versions of Proton, specially the Wine 6.x branch fixed the video playback (oficial Proton versions still fail to play the videos, and jumps to the main menu instead), but with severe corruption as it shows on the following screenshot: 20210426022209_1

I wonder if this is a dgVoodoo2 bug or a DXVK bug.

This problem only occurs to an handful set of games (e.g. Diablo 1 GOG intro videos runs without graphical errors.), including a visual novel Amnesia that is a DirectX 9 game, that runs fine using normal Wine, but had the intro videos with the wrong colours (green instead blue) using dgVoodoo2 and DXVK.

dege-diosg commented 3 years ago

Hi,

I can only speak about Omikron (and Windows) because I'm aware of the video playback issue. Thing is, it's not because of a bug in dgVoodoo. The mpeg decoder filter used through DirectShow provides 24 bit image while the game expects 16 bit. 24 bit data is loaded into a 16 bit format DD surface without conversion and that's why it looks unrecognizable (much worse on Windows than your screenshot).

I don't really know why is this. My assumption is that the Win98 mpeg decoder coming with DirectShow provided the expected 16 bit and that's why the game originally worked, but on the NT product line MS had a different codec defaulting to 24 bit. But again, this is just an assumption of mine.

As far as I remember, it's completely fixed in the gog version of the game, they changed it to use a VMR9 decoder + and replaced the bitmap conversion routine.

Arucard1983 commented 3 years ago

Video playback on Linux using Wine will use GStreamer using a wrapper, and later mpflat (but it is a staged patch) support. Even if Wine Gstreamer get a patch to fix the video, this is not applicable for Windows NT side.

dege-diosg commented 3 years ago

That's why patching the game itself is a more viable way. (I checked out the gog version and it works fine.)