ValveSoftware / Source-1-Games

Source 1 based games such as TF2 and Counter-Strike: Source
660 stars 76 forks source link

Make DXVK updates more frequent and shared between all games #6748

Open Tiagoquix opened 2 days ago

Tiagoquix commented 2 days ago

This is a more specific request and supersedes https://github.com/ValveSoftware/Source-1-Games/issues/6736.

Currently, DXVK binaries in both Windows and Linux versions of Source 1 games exist individually per-game. In other words, for a DXVK update to be made, it has to be done for each game separately.

The current state of DXVK is that it only gets somewhat frequent updates on multiplayer games. For already-done, single-player games, DXVK has an old version present and is not updated regularly. This is bad because Valve games, primarily on Linux, miss bug fixes, improvements and new features of new versions of DXVK purely due to the fact that Valve does not regularly update the binaries.

My request is to make a common, hidden app with depots, for both Windows and Linux, that only have DXVK binaries and nothing else (of course, it would be separate for Windows and Linux using depot properties). Any way to achieve this is acceptable; I'm suggesting the way I think would be the easiest for Valve devs to do.

Then, all Source 1 games would use that app/those depots to get updates for DXVK. Updating the app/depots would update the DXVK binaries for all Source 1 games. This would, of course, need Valve input to update DXVK manually for the app/the depots, but since there are not that many stable releases, updating twice or thrice per year should be fine.

This would also require Valve to make the binary files game-independent (probably just make them use the HL2 base and it should work for the rest of the games) if they aren't already. I don't know how it could be achieved, since the code is proprietary, but I imagine there's a common way for all HL2-based (Source 1) games to be able to get this feature request implemented. Edit: it seems that this is already the case (game-independent DXVK binaries). To update DXVK, one simply needs to update the libdxvk_d3d9.so accordingly (x32 or x64) in the game's /bin (or /bin/linux64) folder. And it also works for VAC-secured games such as TF2. So it's simpler than I imagined.

The files provided https://repo.steampowered.com/steamrt-sniper/pool/main/d/dxvk/ are insufficient because they are only relevant for Linux. Aside from that, Source 1 games run in the Steam Linux Runtime "Scout", which very probably does not have the files from the "Sniper" Runtime.

This request is mostly relevant for Linux players, because you can play natively with Direct3D on Windows, but since this is somewhat complex, Valve could take advantage and also do the same thing for Windows (DXVK updates).

Complementary requests of this request:

Thanks for your attention.

NotHyper-474 commented 2 days ago

it seems that this is already the case (game-independent DXVK binaries). To update DXVK, one simply needs to update the libdxvk_d3d9.so accordingly (x32 or x64) in the game's /bin (or /bin/linux64) folder. And it also works for VAC-secured games such as TF2. So it's simpler than I imagined.

Doesn't seem to be the case for L4D2 on Linux as it will just crash for me.

Tiagoquix commented 2 days ago

@NotHyper-474 You need to explicitly specify an env. variable for the backend that is going to used for DXVK-Native.

https://github.com/doitsujin/dxvk?tab=readme-ov-file#dxvk-native

For all Source 1 games, you need to specify DXVK_WSI_DRIVER=SDL2 as the env. variable.

So, for example, you would use the following in your game launch options on Steam: DXVK_WSI_DRIVER=SDL2 mangohud %command% -novid