steam-runtime
steam-runtime copied to clipboard
import host d3dadapter9.so into pressure-vessel
gallium nine standalone needs d3dadapter9.so, otherwise it will fail with
err:d3d9nine:common_load_d3dadapter d3dadapter9.so.1 was not found on your system.
Afaik pressure-vessel imports the host vulkan and gl drivers into the runtime, so it might be possible to do the same for d3dadapter9.so
.
I know this is a kinda weird feature request, because proton doesn't make use of nine. I thought I might ask anyway, because it might not be a lot of work and it seems low risk.
Afaik pressure-vessel imports the host vulkan and gl drivers into the runtime, so it might be possible to do the same for d3dadapter9.so.
It's certainly implementable, although a little bit awkward because it isn't in the library search path (we'd have to implement the logic for finding it in a cross-distro way, similar to what wine-nine-standalone does, and what we already do for e.g. DRI modules).
What is this for? Is it for Windows games via Wine/Proton, or for native Linux ports that use a particular compatibility layer, or what?
What's its advantage over whatever Proton does at the moment?
If this is for Windows games, Valve's only supported approach for those is Proton, so if there are advantages to making use of d3dadapter9.so.1
, then it's the Proton and/or Wine developers who would need to be convinced that they outweigh any disadvantages.
Am I getting this right?
- Upstream Wine has its own implementation of D3D9 in terms of OpenGL.
- In principle, this works for any GLX driver: Mesa, NVIDIA proprietary, whatever.
- For Mesa users, this ends up as: game -> D3D9 -> GLX -> Mesa internal code.
- Proton uses DXVK, which implements D3D9 (and 10 and 11) in terms of Vulkan.
- In principle, this works for any Vulkan driver: Mesa, NVIDIA proprietary, whatever.
- However, this won't work for users of GPUs that are too old for Vulkan, like my Sandybridge/Fermi test laptop.
- For Mesa users, this ends up as: game -> D3D9 -> Vulkan -> Mesa internal code.
- Gallium Nine implements D3D9 in terms of Mesa's
d3dadapter9.so.1
.- For Mesa Gallium users, this ends up as: game -> D3D9 ->
d3dadapter9.so.1
-> Mesa internal code (Gallium state tracker). - This won't work for other drivers, including Mesa non-Gallium (notably Intel) and NVIDIA proprietary.
- For Mesa Gallium users, this ends up as: game -> D3D9 ->
What is this for? Is it for Windows games via Wine/Proton, or for native Linux ports that use a particular compatibility layer, or what?
It's for d3d9 games in Wine/Proton, as an alternative to dxvk. It can be used with Proton by renaming d3d9-nine.dll.so
to d3d9.dll
and placing it next to the game.
What's its advantage over whatever Proton does at the moment?
It's mostly useful for troubleshooting dxvk issues these days (e.g. check if performance with nine is better or if artifacts go away).
It's certainly implementable, although a little bit awkward because it isn't in the library search path (we'd have to implement the logic for finding it in a cross-distro way, similar to what wine-nine-standalone does, and what we already do for e.g. DRI modules).
Oh, I didn't notice that before, I hoped that ideally it would just be one library name to add somewhere. Feel free to close this issue if it's too much effort. It's certainly not used by Proton out of the box, and I doubt it ever will be considering the generally great state of dxvk.
Am I getting this right? ...
Yes, except that intel now also has a gallium driver for new hardware (broadwell+ iirc).
Feel free to close this issue if it's too much effort
I think we can leave this open as a low-priority feature request: it's not trivial enough to just do it immediately, but also not hard enough to rule it out completely. We have fairly similar logic for DRI, VA-API and VDPAU drivers already, so if we revisit that, it might be a good opportunity to add this while we're there.
While this is not there yet and unknown when will be there, it might be a good addition to have it for pre Vulkan Intel users when this actually makes it way to upstream.
https://gitlab.freedesktop.org/airlied/mesa/-/blob/crocus/src/gallium/drivers/crocus/crocus_todo.txt#L7
Covers a wide range of old Intel gpu's which doesn't have Vulkan support, even some of them are on just GL 2.1 which i'm not sure if wined3d works on them correctly ( as it can be )