Вершинные шейдеры NGG
Объединённые вершинные программы NGG, включая шейдер выборки, который продолжается через S_SETPC_B64, переводятся как одна графическая стадия. Программа экспорта хранит собственное окно пользовательских данных.
Заметки репозитория по 10 октября 2026 г.
Выборка и экспорт — разные программы
Отрисовка PlayStation 5 часто делит вершинную работу на шейдер выборки и шейдер экспорта. Шейдер выборки заканчивает пролог атрибутов прыжком в код экспорта через S_SETPC_B64. PS5PCEM считает это продолжение частью той же вершинной программы и переводит объединённый результат.
Программа экспорта NGG не заимствует банк пользовательских данных геометрического шейдера. Её скалярные регистры инициализируются из собственного снимка пользовательских данных, с s8 для программы экспорта. Предположение, что таблица ресурсов живёт в s0:s1, — ошибка, которой транслятор специально избегает. Указатель таблицы берётся из пары пользовательских SGPR ShaderResourceTable, которую объявили метаданные.
Атрибуты вершины
Шейдер выборки и расширенные пользовательские данные разрешаются вместе со встроенными таблицами вершинного буфера и вершинных атрибутов. До 32 входных семантик сохраняют свой семантический индекс, аппаратный VGPR, в который попадают, формат атрибута AGC, смещение в байтах, частоту экземпляра и 128-битный дескриптор буфера.
Поиск атрибута использует байт семантики, а не байт аппаратного отображения. Неполная пара таблиц или индекс вне поддерживаемой области отвергаются до любого гостевого чтения. Экспорты PARAM со стадии вершины становятся входами интерполяции фрагмента: так более поздний пиксельный шейдер видит интерполируемые величины.
Вызовы в шейдер выборки
Проверенный внешний шейдер выборки можно также связать из S_SWAPPC_B64 или S_CALL_B64, когда пара пользовательских данных вызова всё ещё держит адрес, зарегистрированный AGC. Тело выборки декодируется до возвращающего S_SETPC_B64, и этот возврат должен читать пару связи вызывающего. Подробности о том, какие вызовы законны, находятся на странице скалярных вызовов.
Объединённый перевод NGG позволяет трёхмерным сценам пройти пролог выборки, который раньше останавливал декодер. Сам по себе он не даёт отсутствующий пиксельный шейдер или отсутствующую цель рендеринга.
Что реализовано
- Объединённые вершинные программы NGG, включая прологи выборки, которые заканчиваются на S_SETPC_B64.
- Отдельное окно пользовательских данных для программы экспорта.
- До 32 вершинных семантик с форматами, смещениями, частотами экземпляров и дескрипторами буферов.
- Экспорты PARAM, связанные со входами интерполяции фрагмента.
Чего ещё нет
- Шейдер выборки, чей возврат не совпадает с парой связи вызывающего, не связывается.
- Общие динамические вызовы остаются неподдерживаемыми. См. скалярные вызовы.
- Геометрия, которая зависит от неподдерживаемого экспорта или интерполянта, всё ещё проваливает эту отрисовку.
Связанные механизмы
Чему посвящены эти страницы