Студент университета Andrew Comminos не слишком хорошо разбирался в разработке Direct3D или Wine, его внутреннем устройстве и особенностях программного кода Wine, но из-за стремления к лучшей производительности игры World of Warcraft в GNU/Linux он изучил кодовую базу Wine и нашёл средство для улучшения кода WineD3D.
Играя при помощи Wine Staging в World of WarCraft на GNU/Linux, он получал около ~14 fps на его Nvidia GTX 1070 при максимальных настройках графики и разрешении экрана 2560x1440, в то время, как на Windows на том же компьютере было ~40 fps.
Благодаря первичной подсистеме и APITrace, он смог выяснить технику рендеринга World of Warcraft и узнал, что является причиной остановок "конвейера" по передачи данных для обработки на GPU, и что именно это и приводит к низкой нагрузке на GPU, составляющей обычно не более 30% от его максимальных возможностей, что, следовательно, и приводит к низкой частоте кадров в секунду (fps) в играх Wine. Получается, что б'Ольшую часть времени GPU вообще ничего не делает, потому что вынужден просто ждать, когда на него поступят новые данные для обработки. В результате своих исследований, чтобы решить эту проблему он использовал OpenGL-расширение ARB_buffer_storage, чтобы написать распределитель кучи графического процессора, который намного лучше подходит для карт буфера.
С помощью этого кода, который он размещает в ветви на GitHub под названием Wine-PBA (Persistent Buffer Allocator), его результаты в World of Warcraft, работающем через Wine Staging очень перспективны (WoW через обычный Wine 3.2 даже не запускается вообще) . На самом деле, он получил увеличение fps на приблизительно 30~60% в зависимости от локаций, в которых он находился во время замера fps. Так как это является решением фундаментальной проблемы, скорее всего, это изменение сможет аналогично улучшить fps и в других d3d-играх в Wine.
Код Wine-PBA в настоящее время уже доступен в свободном доступе, но он все еще работает над устранением различных "шероховатостей" кода, распределяет выделение OpenGL-буферов и всячески улучшает код, а также проводит более обширное тестирование этого нового распределителя кучи. Прямо сейчас это ещё не качество уровня "продакшн", но как только все будет полностью готово, он надеется предложить эти патчи для включения в основной код mainline Wine.
Все прочие подробности вы можете найти в блоге Andrew: https://comminos.com/posts/2018-02-21-wined3d-profiling.html Если вы хотите помочь в разработке, вот вам ссылка на код на GitHub: https://github.com/acomminos/wine-pba
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев