Por que converter PSSL para HLSL?
Estúdios que lançam o mesmo renderizador na PS4 e no PC mantêm um corpo de shader e traduzem para .HLSL para Direct3D. O PSSL e o HLSL partilham o mesmo modelo estilo DX11 de objetos Texture2D e SamplerState separados, semântica e vinculações de registo, pelo que um shim de #define cobre a maioria das lacunas. Apenas os intrínsecos específicos da consola precisam de uma reescrita real.
Como converter PSSL para HLSL
Visual Studio Code com um shim de macro FREE
Abra o .pssl no VS Code e inclua um cabeçalho partilhado de #defines que mapeia palavras-chave PSSL para as suas formas HLSL, depois corrija quaisquer declarações restantes manualmente.
Edição manual em qualquer editor de texto FREE
Mude o nome das palavras-chave de sampler/textura e semântica do PSSL para os equivalentes HLSL e ajuste as vinculações register(t#/s#/b#) para que o ficheiro compile com fxc ou dxc.
Validar com dxc OPEN-SOURCE
Compile o ficheiro portado com o dxc shader.hlsl -T ps_6_0 da Microsoft para confirmar que o HLSL é válido e detetar qualquer sintaxe restante exclusiva do PSSL.
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 .HLSL está associado ao High Level Shader Language source code, um arquivo do tipo 3d image.
Abrir detalhes de .HLSL →Qualidade e o que observar
- A semelhança documentada na Wikipedia significa que a maioria das diferenças são cosméticas, mas ainda não existe um analisador PSSL pronto a usar.
- Os intrínsecos de GPU da PS4 e as extensões de wave/thread não têm contrapartida em HLSL e devem ser reimplementados ou substituídos por stubs.
- Os índices de registo de recursos por vezes precisam de remapeamento para corresponder às expectativas da root-signature do D3D.
Perguntas frequentes
Quão semelhantes são o PSSL e o HLSL?
Um cabeçalho de macro sozinho pode terminar o trabalho?
Com qual compilador devo testar?
dxc para alvos Shader Model 6, ou o legado fxc para shaders SM5 mais antigos.