Por que converter PSSL para GLSL?
Equipes que movem um renderizador de PS4 para OpenGL ou Vulkan precisam de seus shaders PSSL em .GLSL. O PSSL é lido de forma muito semelhante ao HLSL, e o GLSL expressa os mesmos conceitos com palavras-chave diferentes, portanto, uma portabilidade cuidadosa linha por linha junto com um pequeno cabeçalho de macro resolve o problema. Um atalho comum é portar o PSSL para HLSL primeiro e depois executar um compilador cruzado automatizado HLSL-para-GLSL.
Como converter PSSL para GLSL
Portabilidade manual em um editor de texto FREE
Abra o arquivo .pssl e reescreva-o como GLSL: converta pares Texture2D/SamplerState para sampler2D, substitua semânticas de entrada/saída por layout(location=...) e mapeie mul() para o operador * do GLSL com matrizes transpostas.
Portar para HLSL, depois ShaderConductor OPEN-SOURCE
Converta PSSL para HLSL primeiro e, em seguida, execute o ShaderConductor da Microsoft (ou SPIRV-Cross) para emitir GLSL legível automaticamente a partir desse HLSL.
Cabeçalho de shim de macro FREE
Adicione um cabeçalho #define compartilhado que cria apelidos (aliases) de palavras-chave PSSL para equivalentes em GLSL, para que grande parte do corpo seja compilada sem alterações, semelhante à abordagem HPSL multiplataforma da Frictional Games.
Sobre estes formatos
Um arquivo .pssl contém código de shader escrito na PlayStation Shader Language da Sony, a linguagem de programação de GPU usada para o desenvolvimento de jogos de PlayStation 4 e…
Abrir detalhes de .PSSL →Um arquivo .GLSL está associado ao OpenGL Shading Language source code, um arquivo do tipo misc.
Abrir detalhes de .GLSL →Qualidade e o que observar
- Nenhum analisador lê PSSL diretamente, então o primeiro passo é sempre a edição manual.
- HLSL/PSSL usam matrizes row-major e clip-space z em [0,1]; GLSL é column-major com z em [-1,1], portanto, a matemática de matrizes e a profundidade precisam de ajustes.
- Intrínsecos exclusivos do PS4 e vinculações específicas de registros não têm equivalente em GLSL e devem ser substituídos manualmente.