Gallium Nine vs WineD3D en Dead or Alive 5

Hace tiempo compré Dead or Alive 5 para PC. Después lo probé en Linux y Steam, a través de Proton. El rendimiento no era bueno, ni en WineD3D ni en DXVK. Éste último es el usado por defecto a partir de Proton 5.0. El proyecto DXVK contiene a D9VK desde la versión 1.5.
El otro día me encontré con este post, que comentaba un buen desempeño con Gallium Nine:
Gallium Nine works wonders.
https://www.reddit.com/r/lowendgaming/comments/k2fzis/friendly_reminder_for_linuxbased_potatoes/?utm_source=share&utm_medium=web2x&context=3
I’ve just tested yet another game with it, Dead or Alive 5 Last Round – and it works.
Under Windows I was getting 60fps with minor drops in 720p – 1024×1024 shadows, FXAA antialiasing.
Under Linux I’m getting 60fps with minor drops (a bit more frequent but frame pacing is perfect so it’s not really noticeable unless one’s looking at the framerate counter), also with 1024×1024 shadows, but with antialiasing disabled… at 1080p.
WineD3D traduce DirectX a OpenGL. DXVK traduce DirectX a Vulkan. Gallium Nine traduce a Gallium, un API a bajo nivel del proyecto Mesa. Funciona sobre «drivers Gallium»:
Mesa started as Open Source implementation of OpenGL. The OpenGL implementation talks to drivers via an API designed with OpenGL in mind. In 2008 a new internal API named Gallium was introduced. This API is used to implement the OpenGL needs, but also fits other ones. Drivers implementing this API are known as Gallium drivers, whereas the other ones are known as ‘Classic Mesa’ drivers.
The Gallium architecture is a bit similar to Direct3D: Gallium is a low level API talking to the Gallium drivers. The behavior of every function is well documented, and is low level (ie. no additional checks are required by the driver, if you did things correctly, calls will just work.).
https://www.gamingonlinux.com/articles/an-interview-with-gallium-nine-project-developer-axel-davy.4949
Encontré una versión especial de Proton compilada con Gallium, la descomprimí en ~/.steam/root/compatibilitytools.d
y la seleccioné en las propiedades del juego -> pestaña «Compatibility».
Me sorprendió ver el juego funcionando de manera casi constante a 60fps. Veamos:
DoA5 no tiene benchmark. Por tanto, he hecho un replay de un combate guardado para probar una misma escena con Gallium y WineD3D. He utilizado la variable de entorno GALLIUM_HUD
para los gráficos:
GALLIUM_HUD=.y300GPU-load,cpu0+cpu1+cpu2+cpu3,fps,frametime
Para alternar entre Gallium y WineD3D, aparte del mencionado cambio de versión de Proton, empleo las variables PROTON_USE_GALLIUM_NINE=1
y PROTON_USE_WINED3D=1
Gallium mantiene los 60fps, mientras que WineD3D se queda entre 30 y 40. No es que sea injugable a framerates bajos, pero funciona a cámara lenta. No he incluído a DXVK (PROTON_USE_D9VK=1
) en el vídeo porque por alguna razón en este juego consume el 100% de la GPU y es totalmente infumable.
Las opciones gráficas del juego son las máximas:
- Screen settings: Full screen
- Resolution: 1920×1080
- Shadow: on
- Shadow resolution: 4096×4096
- Anti-aliasing: 4xSSAA
Mi PC patata es el siguiente:
- Core 2 Quad Q6700 @2.66GHz (arquitectura Kentsfield, FSB a 533 MHz)
- RAM 8 GB DDR2 533 MHz
- Radeon RX 570 4GB (arquitectura Polaris)
El PC está grabando mientras el juego se está ejecutando. Utilizo el encoding hardware de la GPU (VAAPI, junto con kmsgrab).
Gallium funciona sorprendentemente bien, y el procesador antiguo no parece ser un cuello de botella, incluso a pesar de la carga adicional de Wine.