DirectX 12 — Игровая революция

23a21ced0ae87d5a4dfc0011d31caa75

Новое дыхание

Мир увидел DirectX 11 в июле 2009 года. Компания Microsoft не слишком спешила выпускать новое поколение API, ограничиваясь лишь обновлениями. Что приводило к двузначным взглядам на такую политику. Одни жаждали перемен и хотели выжимать по максимуму из своего железа, другие ограничивались тем что уже было в избытке на игровом рынке. И вот в марте 2015 DirectX 12 наконец-то был анонсирован. Так что же нас ждет и какие изменения мы получим в новом движке?

Период затишья

Наглядный взгляд потребителей на политику Microsoft

dx12_3

За весь период отсутствия свежих обновлений и инноваций со стороны Microsoft многие компании предрекали не самые лучший исход к такой политике. Солидный кусок потребителей начал искать счастья в других разработчиках и производителей графической дистрибьюции.

В марте текущего года в рамках ежегодной конференции разработчиков игр GDC 2014 (Game Developer Conference) компания Microsoft анонсировала API нового поколения — DirectX 12. Влияние API OpenGL, напротив, стало более существенным. А компания AMD даже запустила свой собственный низкоуровневый программный интерфейс Mantle. Valve и вовсе в открытую склонялась к OpenGL. В общем, американской компании пришлось нелегко на всех фронтах — и не только в игровой сфере. Microsoft еще никогда так не затягивала с выпуском нового поколения программного интерфейса. Ходит множество слухов относительно такой политики, но, скорее всего, основная причина этого кроется в долгом жизненном цикле игровой консоли Xbox 360. DirectX 12 разрабатывается уже с прицелом на ее преемницу — Xbox One, которая была выпущена лишь в ноябре прошлого года.

DirectX 12 будет поддерживаться целой гаммой устройств, начиная от смартфонов и планшетов и заканчивая персональными компьютерами.

bf6bdc3a-a4fd-4026-a924-cb0852ae3d83

Знакомство с новым ресурсом

Что же нового принесет нам двенадцатая версия «DirectX 12»? Главным отличием нового API от всех его предшественников стало снижение уровня абстрагирования оборудования. DirectX 12 предоставит иную модель программирования, более «приближенную к железу» («closer to the metal»). Используя такую модель, разработчики получат более широкий доступ к различным возможностям графического чипа. Кроме этого, DirectX 12 теперь поддерживает объекты состояния конвейера (PSO, pipeline-state object) и таблицы дескрипторов. Наконец, API получил новые возможности для конвейера рендеринга, которые значительно увеличивают производительность в таких алгоритмах, как определение коллизий, расчет прозрачности или геометрическая отбраковка. А теперь давайте подробнее остановимся на каждом изменении.

maxresdefault

В Direct3D 12 большая часть состояний объединена в неизменяемый объект состояния конвейера (PSO). Это позволяет драйверу, не дожидаясь вызова отрисовки, конвертировать этот объект в аппаратные инструкции, необходимые для последующей работы GPU. Тут же стоит отметить, что система может динамически менять используемый объект PSO. После этого в аппаратные регистры копируется лишь небольшой объем рассчитанных состояний, тогда как в Direct3D 11 аппаратное состояние определялось «на ходу». В итоге такой подход ликвидирует то «бутылочное горлышко», коим являлся центральный процессор, и обеспечивает большее количество вызовов отрисовки на каждый кадр.

В Direct3D 12 также появилась новая модель управления нагрузкой GPU, включающая в себя списки команд и пакеты. В Direct3D 11 все задания GPU отправлялись через непосредственный контекст (immediate context), который представляет собой единый поток команд. А для того чтобы обеспечить многопоточность, в играх также используются отложенные контексты, которые тем не менее не совсем подходят под архитектуру нынешних процессоров.

В двенадцатой версии API на смену явной привязке к слотам пришла модель, использующая набор дескрипторов (descriptor heap), в которые игра записывает свои представления ресурсов. Такой подход позволяет графическому процессору напрямую записывать аппаратное описание ресурса в память. Для определения того, какие именно ресурсы будет использовать конвейер для конкретного вызова отрисовки, в играх указываются одна или несколько таблиц дескрипторов, которые представляют собой подмассивы полного набора дескрипторов. И поскольку набор дескрипторов состоит из специфичных, понятных «железу» данных, то смена таблиц осуществляется намного быстрее, нежели процесс повторной привязки в Direct3D 11.

Nvidia против AMD за DirectX 12

В дополнение к таблицам и наборам дескрипторов Direct3D 12 поддерживает динамическую индексацию в шейдерах, что обеспечивает высокую гибкость и позволяет использовать новые технологии рендеринга. Например, современные движки рендеринга, использующие отложенный подход (deferred rendering engines), обычно кодируют идентификатор объекта или материал в предварительный g-буфер. В Direct3D 11 при использовании большого количества материалов значительно замедлялась заключительная стадия рендеринга. Динамическая индексация решает именно эту проблему. При использовании Direct3D 12 сцена с одной тысячей материалов финализируется так же быстро, как и сцена с десятью материалами.

23074033583l

Как говорят сами разработчики: «для нас, пользователей, основным преимуществом DirectX 12 станет увеличенная эффективность API, а следовательно, и скорость работы.» Свои слова программисты Microsoft подтвердили на деле. Во время конференции GDC производительность двенадцатой версии DirectX была оценена с помощью известного бенчмарка 3DMark. Пакет работает сейчас только с DirectX 11, но для тестирования он был специально портирован на DirectX 12. Одиннадцатая итерация API активно использует многопоточность, однако в силу особенностей работы, связанных с драйверами и рантаймом, ядра и потоки графического процессора время от времени простаивают. Это наглядно отображено на графиках, приведенных чуть ниже. При использовании DirectX 12 ситуация меняется в лучшую сторону. Примерно на 50% улучшается эффективность использования CPU, а также обеспечивается более эффективное распараллеливание работы между потоками.

Выводы

Сегодняшний анонс нацелен в первую очередь на демонстрацию подхода к формированию новой версии графического API, его модели. Помимо описанной сегодня новой модели работы драйверов/приложений, в будущих версиях Direct3D появятся новые возможности рендеринга. Представленный на GDC проект – это только часть работы, проделанной в процессе подготовки к будущим релизам. NVIDIA и Microsoft продолжат и дальше серьезно инвестировать в будущее PC-игр.
Подытожим материал в кратком перечне ожидаемых сюрпризов
— Увеличение производительности.
— Возможность создания более сложных эффектов и сцен.
— Снижение нагрузки на CPU.
— Более эффективное использование мощностей многоядерных процессоров.
— Новые режимы наложения (blending modes) и консервативная растеризация (conservative rasterization), которая должна улучшить процесс отсечения объектов (object culling) и определения столкновений.
— Поддержка новых графических ускорителей.
— Снижение уровня абстрагирования оборудования.
— Улучшение от объектов состояния конвейера и таблиц дескрипторов.
— Возможность объединения в единую графическую подсистему графических карт разных производителей.