elishacloud / dxwrapper

Fixes compatibility issues with older games running on Windows 10/11 by wrapping DirectX dlls. Also allows loading custom libraries with the file extension .asi into game processes.
zlib License
1.17k stars 83 forks source link

Rayman 2 - started to have blurry and distorted graphics #35

Closed deton24 closed 4 years ago

deton24 commented 5 years ago

Rayman 2 started to have blurry and distorted graphics.

On my previous HD 7xxx and 1.8.8.1 drivers it worked. It helped on FPS dips in comparison to wined3d from Uplay.

Now I have 19.3.4 drivers with RX xxx.

The game started to have blurry and distorted graphics DX6 in GXSetup set, ddraw, ini, and dxwrapper placed in Rayman 2 folder. In the second attempt I tried all the files.

What is more interesting, now without any wrapper on DX6, there is also bad graphic bug. Previously it worked correctly.

On WineD3D provided with Uplay it works fine, but you need to wait ~1 minute on small white screen, untill the game shows up. It wasn't happening before too.

I checked all options in sections: AppCompatData Compatibility

to set = 1

but it didn't changed anything.

In the second attempt I tried to set DDrawCompat = 1 but it gives black screen (yes I waited above 1 minute, and nothing).

In the third attempt I copied all the files from stub and root folder, but still the same graphical glitch.

I tried also running Dxwnd in background, later with dxxwnd =1 in config, but still nothing.

Later I added Rayman2.exe to DXWnd according to instruction here: https://pcgamingwiki.com/wiki/Rayman_2:_The_Great_Escape#Windowed

But still nothing. Also, DX1~6, DX9, Auto, forces Hel, Optimize CPU, DGI, Hybrid tested in DXwnd.

elishacloud commented 5 years ago

For some reason DDrawCompat does not work correctly with this game. WineD3D tests each screen mode one-by-one which is why it takes so long. In the d3d8to9 project I cached the screen modes to fix this. But I have not put in a fix like that for ddraw yet.

There is a lot more that needs to be done to fix this properly with dxwrapper. However, I have the GOG version of Raymond 2. It is using the dgVoodoo 2 Glide driver rather than DirectX 6. The updates below should work for you. Download the update below and extract it to the Raymond 2 folder (overwrite any existing file). This has a few other enhancements in it also, such as converting dinput to dinput8 and forcing higher quality sound.

Here is the download: Raymond2.zip

deton24 commented 5 years ago

It looks like your own version of Glide wrapper with some DirectSound implementation :)

Thanks!

Generally you can change renderer to DX6 on GOG version. Just follow the steps here: https://pcgamingwiki.com/wiki/Rayman_2:_The_Great_Escape#No_options_to_choose_in_GXSetup_.28GOG.2FUplay_versions.29

I think incompatibility of your main DX6 ddraw wrapper don't have to be connected with fast detecting of resolution. The newest version of wine wrapper don't have this problem, and renders this game correctly.

elishacloud commented 5 years ago

I was able to change the game to use DirectX6 and see the issue. I did not create DDrawCompat and I have not looked into fixing it since it is maintained by someone else and I have a lot of other items I am looking into. The dxwrapper does have support for converting DirectX1-7 into DirectX9 which is about 75% complete for 2D apps. However Raymond uses 3D and I have not implemented 3D yet.

As far as WineD3D it is good to hear that they fixed the delay issue on the latest version. However WineD3D can cause other performance issues since it converts DirectX into OpenGL. I suspect using Glide directly should be faster than using WineD3D. I did not write the Glide wrapper either. That was done by dgVoodoo.

Anyways it will still be quite sometime before I will have dxwrapper able to convert DirectX1-7 3D into DirectX 9.

deton24 commented 5 years ago

Thanks for your replies!

Yes. WindeD3D has FPS drops, that's why I was using your wrapper before, when it was working. It worked like a charm. Just all overlays needed to be hidden/disabled to avoid performance issues.

mirh commented 5 years ago

Wined3d would probably have far better performance if amd's opengl driver didn't suck so hard

RibShark commented 5 years ago

The issue is caused by the game interpreting the available amount of VRAM as signed, so it often overflows into the negative, and the game uses the lowest scale textures that it can to try and "fit" into the negative VRAM. This should be able to be fixed by clamping the available VRAM reported to 2GB or less. DxWnd can fix this by it's "Limit Available Resources" fix.

Keith94 commented 5 years ago

@RibShark When will your "Better Rayman 2" fix be coming out ? 👀

RibShark commented 5 years ago

@RibShark When will your "Better Rayman 2" fix be coming out ? 👀

Maybe soon, I want to try and hook nGlide and add MSAA/Anisotropic support, external config loading, and support for starting in Windowed mode. Then I can use nGlide with the fix rather than dgVoodoo (which has some vsync issues with Rayman 2).

Keith94 commented 5 years ago

Did you notify the dev about the "vsync issues"? Anyway, eager to try your "all-in-one" fix for the game.

RibShark commented 5 years ago

Did you notify the dev about the "vsync issues"? Anyway, eager to try your "all-in-one" fix for the game.

Yes, he is aware of them.

elishacloud commented 5 years ago

This should be able to be fixed by clamping the available VRAM reported to 2GB or less.

dxwrapper already has this feature. By default it limits the VRAM of all ddraw games when using the ddraw wrapper. Below is a copy of the latest wrapper. I tested with Raymond 2 using DirectX 6 and it seemed to work fine with this wrapper. This also is able to convert Raymond 2 from using dinput to using dinput8.

Download here: ddraw.zip

deton24 commented 5 years ago

GODDAMN! It works! You rock, elishacloud!

Attached INI is also required to fix the problem (otherwise the bug still exists).

As in provided link before, If anyone has error of enumerating resolutions, run Rayman 2/GXSetup in XP SP2 compatibility mode or make ubi.ini with such content:

[Rayman2]Choose = 1GLI_DllFile=GliDX6 GLI_Dll=DirectX6 GLI_Driver=display GLI_Device=Direct3D HAL GLI_Mode=1 - 1920 x 1080 x 16 GLI_DllFile=GliDX6 Language=English

Curiosity. In Uplay version with Wine wrapper, it is written "HEL" instead of "HAL" in original ubi.ini provided.

deton24 commented 5 years ago

This new ddraw library introduced FPS drops in certain places (e.g. start Fairy Glade and turn back on the small bridge ahead). It looke like the new ini itself fixes the problem. \Stub\ddraw.dll from the last official release works without these FPS drops, and graphics are fine.

Once more, thank you.

Ribshark, you too.

edit. As far as I remeber testing v1.0.6334.21, it wasn't able to launch the game. Linked zip post above worked: https://github.com/elishacloud/dxwrapper/files/3268068/ddraw.zip But v1.0.2383.20 was faster: https://github.com/elishacloud/dxwrapper/releases/tag/v1.0.2383.20

Just use ini from zip above

elishacloud commented 4 years ago

Closing.

deton24 commented 4 years ago

Might be useful. Dege from dgVoodoo repaired literally all DX6 (and Glide) 30 FPS lock issues by modifying the game renderer. More technical info: https://www.vogons.org/viewtopic.php?p=855828#p855828

elishacloud commented 4 years ago

Thanks. Though dgVoodoo works very different from dxwrapper and the dgVoodoo code is not available. Dxwrapper is focused on generic engine that works for all games. That looks like a code update for a specific game.

BTW: I implemented a generic feature like that in dxwrapper called AutoFrameSkip. The idea is to prevent the game from waiting for the next v-sync. It is not a perfect feature, but it solves the same issue.

deton24 commented 4 years ago

Thanks for the response!

Shame that AutoFrameSkip is only available in currently unsupported in Rayman 2 Dd7to9.

Regards