Эмулятор PlayStation DuckStation получил довольно крупное обновление, связанное с графической подсистемой, в последних Preview-сборках. Теперь программа умеет компилировать шейдеры и графические конвейеры сразу в нескольких потоках процессора, а система кэширования шейдеров также претерпела ряд изменений.
Работа над обновлением, которую в X кратко описал Baldly Rudy, распределена между несколькими коммитами. DuckStation теперь динамически регулирует количество рабочих потоков в зависимости от доступных ресурсов процессора. Если уже запущенные потоки заняты, а в очереди остаются новые задачи, эмулятор способен создавать дополнительные потоки вплоть до установленного лимита. Основной поток также может подключаться к обработке очереди вместо того, чтобы просто ждать завершения фоновых задач.
Компиляция шейдеров стала многопоточной.
Главным изменением стала многопоточная компиляция шейдеров. Теперь при отсутствии нужного шейдера в кэше DuckStation может отправлять такую задачу в асинхронную систему обработки, а не выполнять все операции последовательно. Позднее аналогичный подход был применён и к созданию графических конвейеров.
Поддержка работает с Direct3D 11, Direct3D 12, Vulkan и Metal. OpenGL пока исключён, поскольку DuckStation не считает компиляцию шейдеров через этот бэкенд потокобезопасной.
Кроме того, DuckStation теперь использует основанные на UID ключи кэша шейдеров и конвейеров, которые формируются с учётом графических настроек. Благодаря этому эмулятор может заранее проверить, существует ли уже скомпилированный шейдер, ещё до генерации его исходного кода. Формат самого кэша шейдеров также был обновлён, поэтому после перехода на новые сборки пользователи могут столкнуться с однократной повторной компиляцией шейдеров.
Изменения должны прежде всего уменьшить задержки при компиляции.
Обновление не нацелено напрямую на повышение частоты кадров во время эмуляции. Вместо этого изменения должны сократить время, которое DuckStation тратит на компиляцию шейдеров и графических конвейеров в ситуациях, когда нужных данных ещё нет в кэше. Разница должна быть особенно заметна после изменения графических настроек, очистки кэша шейдеров или при использовании конфигураций, требующих подготовки большого количества шейдеров.
Публичных сравнительных тестов производительности до и после обновления пока нет, поэтому измеренного прироста на данный момент привести нельзя. Изменения пока доступны в Preview-ветке DuckStation.
Последнее обновление можно скачать прямо с нашего сайта, перейдя по ссылке выше.
Источник: www.playground.ru