пятница, 19 февраля 2016 г.

Vulkan - новое поколение графики в играх и 3D приложениях

Вот и состоялся долгожданный релиз Vulkan 1.0 - кроссплатформенного API для обеспечения низкоуровнего доступа к GPU, обеспечивающий невероятно высокую производительность в играх, разрабатывающегося как новое поколение OpenGL и позиционирующегося как "убийца DirectX 12". Первые драйверы, а также спецификации, SDK, тесты, валидаторы и прочие утилиты были представлены одновременно с ним. Давайте для начала посмотрим, что это за технология.

Изначально, проект назывался OpenGL Next, или просто GLnext. Целью его создания было обеспечение низкоуровнего доступа к графическому процессору (GPU), снижения нагрузки на центральный процессор и задействование всех современных графических технологий. OpenGL похвастаться таким не может, так как не затачивался под такое. Он однопоточен, не может напрямую задействовать возможности GPU. Ранее уже существовал похожий проект от компании AMD - Mantle. Несмотря на то, что широкого распространения он не получил, он давал РЕАЛЬНЫЙ прирост производительности в Battlefield 4 и Dragon Age Inquisition. А также - вошёл в качестве основы как в DirectX 12, так и в Vulkan.



Разрабатывается Vulkan консорциумом Khronos Group - теми самыми людьми, создавшими OpenGL, OpenCL и прочие технологии. В состав консорциума входят множество именитых компаний, таких как Intel, AMD, Nvidia, Qualcomm, Google, Valve, Epic Games, Imagination и многие другие. Драйвер для чипов Intel является открытым, и потихоньку начал вливаться в состав Mesa. Кроме того, пакеты с ним доступны для Ubuntu и Fedora. Компания AMD пока не закончила работу над Vulkan-совместимым драйвером. Nvidia же в полной мере поддерживает Vulkan как на Windows и Linux, так и Android. К слову, Android 6.0 будет включать в себя полную поддержку Vulkan.

Кроме того, компанией Qt Company ведётся работа по обеспечению поддержки Vulkan в графическом фреймворке Qt, а компания Collabora добавила поддержку Vulkan в Wayland. К слову сказать - именно с Wayland (возможно и с Mir) Vulkan будет работать лучше всего. Компания Valve с сотрудничестве с LunarG, выпустила SDK для Windows и Linux. Valve в этом плане очень активна, так как в первую очередь ориентируется на SteamOS и Steam Machines. В Dota 2 уже начали добавлять поддержку Vulkan. Также компаниями Google и Nvidia опубликован SDK для Android.

В Vulkan также значительно упрощено создание и организация драйвера. Отныне всеми низкуровневыми операциями заведует не он, а приложение.



Vulkan охватывает все доступные платформы и предоставляет единый API для настольных, мобильных систем и Web, позволяя использовать один общий API для различных графических процессоров и областей применения. Современные GPU для настольных, встраиваемых и мобильных систем приблизились друг к другу по функциональности и внутренней архитектуре, что позволяет избавиться от устаревшей привязки к разным спецификациям (OpenGL, OpenGL ES). Благодаря многослойной архитектуре Vulkan, подразумевающей создание инструментов, работающих с любыми GPU, производители оборудования могут использовать при разработке типовые инструменты для проверки кода, отладки и профилирования.
Для создания шейдеров предлагается новое переносимое промежуточное представление SPIR-V, основанное на LLVM и использующее общие с OpenCL 2.1 базовые технологии. SPIR-V универсален для всех платформ и может применяться как для графики, так и для параллельных вычислений. SPIR-V подразумевает выделение отдельной фазы компиляции шейдеров в промежуточное представление, что позволяет создавать фронтэнды для различных высокоуровневых языков (в том числе доступны трансляторы для GLSL и OpenCL C). На основе различных высокоуровневых реализаций отдельно генерируется единый промежуточный код, который может использоваться драйверами Vulkan и OpenCL без применения встроенного компилятора шейдеров. Избавление драйвера от компилятора шейдеров существенно упрощает драйвер, ускоряет загрузку кода для GPU и делает драйвер независимым от высокоуровневых языков разработки программ для GPU.

Для управления устройствами и экранами в Vulkan предлагается интерфейс WSI (Window System Integration), решающий примерно те же задачи, что и EGL в OpenGL ES. Поддержка WSI из коробки доступна в Wayland - все приложения, использующие Vulkan, могут запускаться в окружении немодифицированных серверов Wayland, таких как Weston, GENIVI LayerManager, Mutter/GNOME Shell и Enlightenment. Возможность работы через WSI также обеспечена для Android, Mir, Windows (Vista+) и X11 (c DRI3).  Ну а поддержка в KDE будет обеспечена после добавления поддержки в Qt. Хотя, возможно и раньше.

А вот и первые тесты. Как видим, пока есть отставание от DirectX 11, но есть очень серьёзный прирост производительности по сравнению с OpenGL. Тесты проводились на игре The Talos Principle, которая является первой игрой с поддержкой Vulkan. Но как было написано на ресурсе Phoronix: разработчикам понадобится время, чтобы изучить новый API, освоить приёмы работы с ним, добавить полноценную поддержку в игровые движки и так далее. А в качестве примера приводится DirectX 11, в котором по началу тоже не было ничего толкового, зато потом при той же графике, он демонстрировал гораздо более высокий уровень производительности, чем DirectX 9. Поэтому - будем ждать. Лично меня порадовала полная поддержка Wayland, так как я очень давно жду массового внедрения это графического протокола в дистрибутивы Linux. В первую очередь потому что не будет проклятого тиринга на некоторых системах и драйверах. Вывод графики сильно упростится. На всё это нужно время, но даже сегодняшние результаты сильно впечатляют. Задействование Vulkan в игровых консолях, поможет максимально упростить портирование игр с них.

Но есть и минусы. Для меня, во всяком случае. Нвидиевский драйвер для Vulkan просит видеокарту минимум 600 серии. Поэтому я со своей GTX 460 в пролёте. Как обстоят дела у других вендоров - я не в курсе. Но смартфонов это тоже наверняка коснётся, и поддержка будет обеспечена только для новейших чипов. Хотя - как знать. К примеру драйвер для Intel пока поддерживает только архитектуры Skylake, Broadwell и Brasswell, но разработчики намерены перенести его и на прошлы архитектуры до Ivy Bridge включительно. В этом плане конечно, у DirectX 12 есть преимущество - он работает и на 400 серии Нвидии. Но, что есть, то есть. Больше материала вы найдёте по ссылкам:

Opennet
Сайт Khronos Group
Документация к Vulkan

Комментариев нет:

Отправить комментарий