Nasra's games

A short blog about games and Linux

Pourquoi c'est cool !

Petit article explicatif sur ce que c'est qu'un Shader et pourquoi c'est pas mal de les mettre en cache pour le rendu d'un jeu, notamment dans Steam.

Shader ? Shredder ?

C'est un programme informatique (et pas un ninja traquant des tortues dans des égouts), utilisé dans les jeux (ou dans des rendus 3D), pour paramétrer une partie du processus de rendu. Il sert à décrire plein de trucs et appliquer pas mal d'effets : l'absorption et la diffusion de la lumière, la texture à utiliser, les réflexions et réfractions, l'ombrage, le déplacement de primitives et des effets post-traitement... Les Shader peuvent être exécutés directement par la carte graphique ou être mis en cache dans la mémoire de celle-ci lorsqu'ils sont utiles.

Pixar

Mémoire et cache

Les mémoires des cartes graphiques sont très, très, très rapides (de l'ordre de la nano seconde). Au plus une application va pouvoir stocker des données dedans, au plus cela va accélérer le traitement et donc les performances. Quand vous avez un jeu gourmand en mémoire (typiquement un jeu en 4K avec plein de textures comme The Witcher 3), la carte graphique va stocker dans sa mémoire les textures du jeu et permettre un affichage sans accro. Elle va calculer en temps réel les Shaders, voire les stocker dans sa mémoire pour tous les effets du jeu. Si votre PC est puissant, aucun soucis, le CPU prendra en charge certains calculs dans le jeu, le GPU aura sa tâche, tout va bien se dérouler et vous aurez vos 144FPS en 4K (!). Mais sur des configurations plus modestes ou pour avoir plus de performances, au lieu d'avoir à calculer en temps réel des Shader, il est possible de les calculer en premier, de les stocker en mémoire et de les charger lors d'un jeu.

Caché, mais où ?

Il est possible de stocker son cache sur la RAM voire sur un espace dans son disque dur (ou SSD) et d'appeler les Shader déjà calculés lors d'un chargement d'un jeu. De ce fait, la carte graphique est soulagé d'un calcul en temps réel et peut se concentrer sur d'autres tâches, d'où le gain de performances.

Witcher 3

Steam et les Shader

On avait déjà la possibilité de “cacher” des Shader (pas dans des égouts, non), notamment avec GLSL, OpenGL Shader Langage, Windows a déjà par exemple le HLSL, DirectX Shader Langage... Et voilà qu'arrive le Vulkan Shader Langage dans la version béta de Steam !

Vulkan Shader Steam

De gros changements s'annoncent dans l'avenir avec Wine. Le support de Vulkan directement dans l'API permettra une meilleure compatibilité avec un nombre important d'applications, dont des jeux.

Vulkan ?

Vulkan c'est une API graphique, bas niveau, qui remplace OpenGL. Beaucoup d'applications utilisent OpenGL, Blender pour ne citer que lui, mais aussi encore beaucoup d'applications professionnelles qui utilisent OpenCL pour leur rendus et l'accélération graphique qui en découle. Et cela que ce soit sous Linux ou sous Windows où les applications professionnelles préfèrent travailler avec OpenGL (la Nvidia Quadro par exemple a des pilotes spécifiques).

Vulkan

Le projet DXVK est un projet qui permet de traduire les appels DirectX en Vulkan sans passer par OpenGL. Utilisé essentiellement dans des jeux, avec Steam et le projet Proton, il permet la prise en charge de nombreux jeux avec des performances remarquables.

Concurrence avec DXVK ?

C'est ici qu'on peut se poser la question. DXVK est un projet jeune qui a beaucoup fait parlé de lui et est intégré à la team Linux de Steam. Mais il est très lié à Wine sur lequel il se base. De ce fait, les liens entre les deux sont rapides : DXVK pour la partie graphique et Wine pour le reste...

Oui mais non. D'une part, comme je l'ai indiqué plus haut, Wine ne s'adresse pas seulement aux gamers mais aussi à toute une partie de linuxiens qui souhaitent une couche de comptabilité pour leurs applications professionnelles. Wine est essentiellement développé et propulsé par Codeweavers dont c'est le business plan. D'autre part, la montée en puissance d'une API comme Vulkan va très certainement remplacer OpenGL à terme va exiger que Wine le supporte aussi.

DXVK

DXVK s'adresse principalement aux gamers, Wine profite des développements de DXVK tout comme Proton profite des développements de DXVK. Pour le moment en terme des performances dans les jeux, DXVK est à préférer, notamment le fait qu'il soit nativement supporté sur Steam. Mais pour d'autres logiciels, comme Lutris, intégrer Proton est un peu plus compliqué (même s'il intègre déjà DXVK) et demande une dépendance à Valve, pas cool pour des projets libres. L'avancement dans Wine de Vulkan permettra un meilleur support des applications et des jeux.

Le support de Vulkan dans Wine est attendu pour Wine 6.0.

Alan Wake

Autant vous le dire de suite, je suis partagé sur ce jeu.

Une technique efficace

Le jeu est sans conteste réussi sur pas mal de plans. La technique pour un jeu de 2010 est très bien maîtrisée, les environnements sont très bien représentés, la direction artistique est très efficace avec ce brouillard, ces sous-bois... L'ambiance sonore aussi, qui permet de s'immerger dans l'action, la réflexion et le scénario. Les phases “cinématiques” sont intéressantes... pour l'avancée du scénario. Et c'est bien cela qui est important dans ce jeu, son scénario, son ambiance.

Alan Wake arrive

Mais...

Tout cela est gâché à mon sens par une répétitivité des actions à mourir d'ennui et une maniabilité assez... particulière. On ne suit pas le personnage mais une sorte de vue de ¾ TPS (Third Person Shooter) plutôt maladroite qui nous cache une partie de l'action. On ne voit jamais devant le personnage mais “en biais”. Se retourner est une plaie, le personnage se meut comme un camion avec une caméra qui ne suit pas le perso. Sur la capture ci-dessous, vous ne voyez pas venir le second gus sur votre gauche...

Oups un spoil !

Quant à “éviter les coups”, une feature qu'on nous présente au début du jeu comme primordiale, c'est un coup de chance à chaque fois avec des ralentissements insupportables à la Burnout (mais sans le côté spectaculaire). Oui, mec, tu as juste évité une énième fois encore un fantôme avec une hache... on aura vu plus original. Le premier ça va, quand on en est à en réussir 3 d'affilé avec 10 ennemis qui vous tournent autour, ce n'est pas juste énervant, c'est injouable. Le jeu oscille constamment entre des phases d'actions plus faciles où le héro semble avoir tous les éléments pour s'en sortir et des phases au ralenti qui donnent un handicap artificiel au joueur.

Bref, ce jeu est répétitif, prévisible et ses choix de gameplay sont frustrants.

Info

J'ai essayé de jouer à la manette, oubliez tout de suite, la caméra est encore pire, préférez le combo clavier/souris (un comble pour un jeu sorti d'abord sur console). Tout tourne super bien sur Linux (Pop_OS) et Proton sur la version Steam. Il y a juste une commande à ajouter au démarrage du jeu pour que les cinématiques ne soient pas muettes. Ah oui, le jeu n'est pas cher si vous voulez tenter l'aventure et juger par vous-même.

Pourquoi cela ne va rien changer. Explications de texte.

Microsoft a annoncé récemment avoir développé une version de DirectX12 pour Linux dans son environnement de virtualisation WSL. Cela permet notamment à Microsoft de se passer de serveur X pour faire tourner des applications graphiques pensées pour Linux, avec des exemples de Nautilus tournant sur WSL.

Implémentation de DirectX12

À mon avis cela ne va rien changer ou à la marge.

Pour que des applications DirectX 12 tournent sous Linux (en natif) il faut bien plus que seulement la pile graphique. Là, c'est une implémentation dans WSL (2.0) d'une couche graphique qui vous permettra la même chose que si vous faisiez du PCI Passthrough avec Xen ou autres : les performances graphiques de l'hôte à portée de main dans une machine virtualisée (avec le VGA-Passthrough cela se fait grâce à deux cartes graphiques ou chipset graphiques). C'est pour concurrencer toutes les solutions de virtualisation concurrentes (VirtualBox, Xen, KVM, QEMU, Bochs...) et c'est directement en lien avec la stratégie de Microsoft et (feu) VMWare.

Pour de la rétro-ingéniérie et apprendre un peu plus du fonctionnement de DirectX 12, oui, ça peut aider des projets comme Wine ou DXVK, notamment pour la résolution de bugs graphiques, et encore voir si cette version n'est pas spécifique à WSL (avec des éléments qui ne permettraient pas la compilation directement sur un Linux sans passer par WSL).

Pour le reste (réseau, inputs, audio...), ça ne va pas révolutionner les choses.