Aller au contenu
PS5PCEM
PartielGraphisme

Shaders RDNA2 vers SPIR-V

Les shaders PlayStation 5 sont du code machine RDNA2. PS5PCEM décode les familles GFX10, construit un graphe de flot de contrôle, et abaisse les opérations prises en charge en SPIR-V 1.5 pour Vulkan.

Notes du dépôt jusqu’au 10 octobre 2026

Décodage

Le frontal reconnaît les encodages scalaires SOP1, SOP2, SOPK, SOPC, SOPP et SMEM, les encodages vectoriels VOP1, VOP2, VOP3, VOP3P, VOPC et VINTRP, ainsi que MUBUF, MTBUF, FLAT, DS, MIMG et EXP. Les corps architecturaux d'un mot et de deux mots, les littéraux facultatifs et les mots d'adresse NSA de MIMG sont conservés, de sorte qu'un opcode non pris en charge plus loin ne désynchronise pas le flux.

Un opcode non reconnu à l'intérieur d'une famille connue devient une instruction non prise en charge qui porte encore sa famille, son opcode numérique, les mots bruts et une raison. Les mots d'extension SDWA et DPP conservent leurs sélecteurs, leurs modificateurs et leurs masques de voies. Le décodeur ne renomme pas un opcode qu'il ne connaît pas.

Flot de contrôle et IR typée

Les cibles des branchements directs découpent le programme en blocs. Les fusions vers l'avant, les régions imbriquées et les arêtes vers l'arrière sont enregistrées séparément. Le traducteur en service peut émettre à partir des instructions décodées. Définir PS5_GPU_SHADER_IR=1 sélectionne l'IR typée légalisée. Définir PS5_GPU_SSA=1 ajoute l'état phi et def-use, le pliage de constantes et l'élimination itérative du code mort.

Les sélections acycliques deviennent des fusions SPIR-V structurées, avec des valeurs phi aux jointures. Les boucles naturelles deviennent des fusions de boucle. Un flot de contrôle irréductible devient un répartiteur d'indice de bloc qui conserve les prédicats VCC et EXEC, de sorte qu'une voie qui devait sauter une écriture la saute encore. Les masques EXEC sont réutilisés à l'intérieur d'un bloc SPIR-V et abandonnés à chaque label, parce qu'une valeur d'un côté d'une branche ne domine pas l'autre côté.

Ce que la suite du 9 octobre a mesuré

Le point de contrôle des appels scalaires du 9 octobre a fait passer 259 tests d'analyse GPU sur 259 et 232 tests Vulkan sur 232. La suite RDNA2 a fait passer 271 tests sur 281, avec les mêmes dix échecs existants et une fuite signalée. Ces sondes d'instructions n'établissent pas une nouvelle fréquence d'images pour un jeu.

Les chargements d'image multi-texels, les gathers horizontaux, les shaders de fetch NGG et les appels scalaires bornés sont implémentés comme des chemins propres et décrits sur leurs propres pages. Les stores et les combinaisons de descripteurs qui n'étaient pas dans l'ensemble mesuré restent non pris en charge.

Ce qui est en place

  • Décodage des familles scalaire, vectorielle, mémoire, image et export de GFX10, littéraux et mots NSA compris.
  • Sélections structurées, boucles naturelles, et un répartiteur pour le flot irréductible qui préserve les masques de voies.
  • IR typée et nettoyage SSA facultatifs, sélectionnés par des variables d'environnement.
  • SPIR-V 1.5 pour les opérations d'ALU, de mémoire, d'image, d'interpolation et d'export prises en charge.

Ce qui manque encore

  • Dix échecs existants de la suite RDNA2 demeurent, plus une fuite signalée.
  • Un opcode non pris en charge arrête cet abaissement. Il n'est pas remplacé par une opération devinée.
  • Les tests d'instructions ne sont pas un résultat de fréquence d'images.

Mécanismes liés

Ce que ces pages décrivent

Le texte suit les notes d’architecture et les rapports d’octobre 2026 du dépôt PS5PCEM. Un test ciblé qui passe n’est ni une nouvelle cadence d’images ni une nouvelle partie terminée.

Toutes les technologies