Pourquoi convertir PSSL en GLSL ?
Les équipes qui migrent un moteur de rendu PS4 vers OpenGL ou Vulkan ont besoin de leurs shaders PSSL au format .GLSL. Le PSSL se lit comme le HLSL, et le GLSL exprime les mêmes concepts avec des mots-clés différents, donc un portage soigneux ligne par ligne avec un petit en-tête de macros fait l'affaire. Un raccourci courant consiste à porter le PSSL vers HLSL d'abord, puis à utiliser un compilateur croisé automatisé HLSL vers GLSL.
Comment convertir PSSL en GLSL
Portage manuel dans un éditeur de texte FREE
Ouvrez le fichier .pssl et réécrivez-le en GLSL : convertissez les paires Texture2D/SamplerState en sampler2D, remplacez les sémantiques d'entrée/sortie par layout(location=...), et mappez mul() sur l'opérateur * de GLSL avec des matrices transposées.
Portage vers HLSL, puis ShaderConductor OPEN-SOURCE
Convertissez d'abord le PSSL en HLSL, puis exécutez ShaderConductor de Microsoft (ou SPIRV-Cross) pour générer automatiquement du GLSL lisible à partir de ce HLSL.
En-tête de calage par macros FREE
Ajoutez un en-tête #define partagé qui crée des alias entre les mots-clés PSSL et leurs équivalents GLSL afin qu'une grande partie du corps du code compile sans modification, similairement à l'approche HPSL multiplateforme de Frictional Games.
À propos de ces formats
Un fichier .pssl contient du code de shader écrit en PlayStation Shader Language, le langage de programmation GPU utilisé pour le développement de jeux sur PlayStation 4 et PlayStation 5.…
Ouvrir les détails de .PSSL →Un fichier .GLSL est associé à OpenGL Shading Language source code, un fichier de type misc.
Ouvrir les détails de .GLSL →Qualité et points de vigilance
- Aucun analyseur ne lit directement le PSSL, la première étape est donc toujours l'édition manuelle.
- HLSL/PSSL utilisent des matrices « row-major » et un z en espace clip dans [0,1] ; GLSL est en « column-major » avec un z dans [-1,1], les calculs matriciels et la profondeur doivent donc être ajustés.
- Les intrinsèques spécifiques à la PS4 et les liaisons de registres n'ont pas d'équivalent GLSL et doivent être remplacés à la main.