Waarom PSSL naar GLSL converteren?
Teams die een PS4-renderer verplaatsen naar OpenGL of Vulkan hebben hun PSSL-shaders nodig in .GLSL. PSSL leest grotendeels als HLSL, en GLSL drukt dezelfde concepten uit met andere trefwoorden, dus een zorgvuldige regel-voor-regel poort plus een kleine macro-header klaart de klus. Een veelgebruikte kortere weg is om PSSL eerst naar HLSL te porten en vervolgens een geautomatiseerde HLSL-naar-GLSL cross-compiler te gebruiken.
Hoe PSSL naar GLSL te converteren
Handmatige poort in een tekstverwerker FREE
Open het .pssl-bestand en herschrijf het als GLSL: converteer Texture2D/SamplerState-paren naar sampler2D, vervang input/output semantics door layout(location=...), en koppel mul() aan de *-operator van GLSL met getransponeerde matrices.
Porten naar HLSL, daarna ShaderConductor OPEN-SOURCE
Converteer PSSL eerst naar HLSL en voer vervolgens Microsofts ShaderConductor (of SPIRV-Cross) uit om automatisch leesbare GLSL te genereren vanuit die HLSL.
Macro-shim-header FREE
Voeg een gedeelde #define-header toe die PSSL-trefwoorden koppelt aan GLSL-equivalenten, zodat een groot deel van de code ongewijzigd compileert, vergelijkbaar met de platformonafhankelijke HPSL-aanpak van Frictional Games.
Over deze formaten
Een .pssl-bestand bevat shader-code geschreven in Sony's PlayStation Shader Language, de GPU-programmeertaal die wordt gebruikt voor de ontwikkeling van PlayStation 4- en PlayStation…
Open .PSSL details →Een .GLSL-bestand is gekoppeld aan OpenGL Shading Language source code, een misc-bestand.
Open .GLSL details →Kwaliteit & waar op te letten
- Geen enkele parser leest PSSL rechtstreeks, dus de eerste stap is altijd handmatige bewerking.
- HLSL/PSSL gebruiken row-major matrices en clip-space z in [0,1]; GLSL is column-major met z in [-1,1], dus matrixberekeningen en diepte moeten worden aangepast.
- PS4-specifieke intrinsics en register-specifieke bindings hebben geen GLSL-equivalent en moeten handmatig worden vervangen.