ValveSoftware / Proton

Compatibility tool for Steam Play based on Wine and additional components
Other
24.4k stars 1.07k forks source link

Add the nvapi fake dlls and .so's to Proton #2079

Closed Alexmitter closed 4 years ago

Alexmitter commented 5 years ago

The nvapi dlls from steam aren't shipped with Proton, I have to add them manually to get some games running. It seems Doitsujin recommended to not use them so DXVK runs best, so i guess based on this, valve removed them. But as DXVK now by default act like a AMD GPU, i guess this is obsolete.

So far i did not see problems with adding the .so's and fake dlls from wine.

Xubuntu 18.04 Xfce 4.12 Intel i7-7700K NVIDIA GeForce GTX 1060 6GB @ 396.54

aeikum commented 5 years ago

What game are you having trouble with? Proton 3.16 now pretends that all Nvidia cards are actually AMD cards, so applications shouldn't try to load nvapi.

Alexmitter commented 5 years ago

@aeikum It does, but only for DXVK Games. Games like GTA4 that run based on Wines own DX9 to OpenGL Translator do not do this and require it.

aeikum commented 5 years ago

No, we override the nvidia device IDs for wined3d, too. See ValveSoftware/wine@1091eaf13692b16ed66328ceeebfc587075fec6c.

Alexmitter commented 5 years ago

@aeikum Sorry, my fault. But then here must be a different problem as it still only starts with the libs in place.

ghost commented 5 years ago

You can use the nvapi dll stubs from wine staging with dxvk. I have had no problems with any of the affected games long since before the fake device id hack was implemented. I don't think you should be going around messing with the device ids, especially when there is a working solution to the problem already.

Alexmitter commented 5 years ago

@ItsiAdam Thats exactly what i do. But its not the One Click solution.

ghost commented 5 years ago

Isn't it the purpose of proton to be a one click solution? Wine staging patches should be included with Proton to begin with... I see no reason for them not to. It'd also be wise for hacks like the device id hack to not be implmented at a renderer level.

pchome commented 5 years ago

@aeikum I'm not sure if it worth attention, but DXVK supports some interfaces for D3D11 extensions, so at least NvAPI_D3D11_SetDepthBoundsTest could be implemented using them.

This should add some headache and ~1-2fps(unlikely) in some d3d11 games (UE4, CryEngine3 and others using this function).

p.s. For curious ones I still looking for an adequate benchmark to test this, but if anyone want to experiment -- here is nvapi{,46}.dll.so files compiled for Proton 4.2. Just make sure you have dxgi.nvapiHack = False in dxvk.conf and no other nvapi™ dlls installed (like nvcuda, they wouldn't work).