AGC и поток команд PM4
Игра для PS5 строит пакеты GPU в собственной памяти и подаёт буфер. PS5PCEM декодирует этот поток PM4, хранит состояние регистров и исполняет отрисовки и диспетчеризации по порядку.
Заметки репозитория по 10 октября 2026 г.
Поток и есть графический API
Игре не обязательно вызывать высокоуровневую функцию отрисовки для каждого треугольника. Она пишет пакеты: обновления регистров, отрисовки, диспетчеризации, fence и перевороты. Какой бы слой ни собрал буфер, GPU видит тот же поток. Декодер называет пакеты, у чьих кодов операций есть документированный смысл, а остальные оставляет числами. Выдуманное имя в трассе было бы хуже кода операции.
Длина тела пакета хранится со смещением на единицу, поэтому пустое тело закодировать нельзя. Каждый шаг проверяет свои границы. Тело, которое не помещается, сообщается. Оно не обрезается, потому что обрезанное тело сдвинуло бы каждый следующий пакет, и трасса солгала бы.
Состояние, ожидания и косвенные буферы
Состояние регистров переживает подачи, включая записи нуля. Исполнитель применяет прямые списки регистров, нативные и унаследованные косвенные списки, acquire и release, 32-битные и 64-битные ожидания, записи, события и SetFlip. Ожидание, которое не выполнено, возвращает блокировку и точное слово, с которого возобновляться. Гостевая память не изменяется, чтобы изобразить прогресс.
Косвенные буферы обходятся рекурсивно: и обычная форма из 4 dword, и условная форма из 14 dword. Пакеты цепочки завершают родителя. Вложенность останавливается на 16 кадрах. Заблокированный потомок возвращает фиксированный путь от корня к листу, поэтому возобновление не повторяет отрисовки, которые уже случились. Планировщик копирует каждый корневой буфер команд и косвенные буферы, до которых может дойти, поэтому игра может переиспользовать арену, пока ожидание ещё заблокировано.
От регистров к отрисовке
На отрисовке или диспетчеризации снимок регистров становится типизированными ресурсами: 128-битные дескрипторы буфера и сэмплера, 256-битные дескрипторы изображения, восемь цветовых целей, глубина и трафарет, окна просмотра, ножницы, отсечение, смешивание и поля свизла и MSAA у PS5. Отсутствующие записи управления цветом и управления отсечением наследуют значения AGC по умолчанию. Явный запрет остаётся запретом. Два работника CPU готовят графические и вычислительные команды. Один владелец Vulkan подаёт их, чтобы исполнение и завершение оставались упорядоченными.
Метаданные шейдера дают таблицы ресурсов и регистры пользовательских данных. Происхождение скаляров обходит ограниченный префикс шейдера, загружает только ту гостевую память, которой префикс действительно касается, и останавливается на неизвестном ветвлении, вместо того чтобы выдумывать дескриптор. Результат потребляют транслятор и бэкенд Vulkan.
Что реализовано
- Декодирование PM4 со смещёнными длинами тел и жёсткими границами каждого пакета.
- Постоянные банки регистров, заблокированные ожидания и рекурсивные косвенные буферы до 16 кадров.
- Типизированные буферы, изображения, цветовые цели, глубина, окно просмотра, смешивание и состояние MSAA в момент отрисовки.
- Два работника подготовки и один упорядоченный владелец подачи Vulkan.
Чего ещё нет
- Код операции без документированного смысла остаётся безымянным.
- Заблокированное ожидание никогда не снимается записью поддельного значения fence.
- Слои, метаданные и несколько операций с изображениями всё ещё неполны. У них свои страницы.
Связанные механизмы
Чему посвящены эти страницы