Зачем конвертировать PSSL в HLSL?
Студии, выпускающие один и тот же рендерер на PS4 и ПК, сохраняют одно тело шейдера и транслируют его в .HLSL для Direct3D. PSSL и HLSL используют одну и ту же модель в стиле DX11 с отдельными объектами Texture2D и SamplerState, семантикой и привязками регистров, поэтому прослойка #define закрывает большинство пробелов. Только специфические для консоли интринсики требуют реальной переписки.
Способы конвертации PSSL в HLSL
Visual Studio Code с макро-прослойкой FREE
Откройте .pssl в VS Code и включите общий заголовочный файл с #define, который сопоставляет ключевые слова PSSL с их формами в HLSL, затем исправьте оставшиеся объявления вручную.
Ручное редактирование в любом текстовом редакторе FREE
Переименуйте ключевые слова семплеров/текстур и семантики PSSL в эквиваленты HLSL и настройте привязки register(t#/s#/b#), чтобы файл компилировался с помощью fxc или dxc.
Проверка с помощью dxc OPEN-SOURCE
Скомпилируйте перенесенный файл с помощью Microsoft dxc shader.hlsl -T ps_6_0, чтобы подтвердить валидность HLSL и отловить оставшийся синтаксис, характерный только для PSSL.
Об этих форматах
Файл .pssl содержит код шейдеров, написанный на PlayStation Shader Language - языке программирования GPU, используемом для разработки игр на PlayStation 4 и PlayStation 5. Текстовые файлы…
Открыть детали .PSSL →Файл .HLSL связан с High Level Shader Language source code, это файл категории 3d image.
Открыть детали .HLSL →Качество и на что обратить внимание
- Документированное сходство означает, что большинство различий носят косметический характер, но готового парсера PSSL все еще не существует.
- Интринсики GPU PS4 и расширения wave/thread не имеют аналогов в HLSL и должны быть реализованы заново или заменены заглушками.
- Индексы регистров ресурсов иногда требуют переназначения, чтобы соответствовать ожиданиям root-signature в D3D.
Часто задаваемые вопросы
Насколько похожи PSSL и HLSL?
Может ли один заголовочный файл с макросами решить задачу?
С каким компилятором мне стоит тестировать?
dxc для целей Shader Model 6 или устаревший fxc для старых шейдеров SM5.