Directx api что это
Шаблон:Карточка программы DirectX (от Шаблон:Lang-en — прямой, непосредственный, произносится как «ДайрéктЭкс») — это набор API , разработанных для решения задач, связанных с программированием под Microsoft Windows. Наиболее широко используется при написании компьютерных игр. Пакет средств разработки DirectX под Microsoft Windows бесплатно доступен на сайте Microsoft. Зачастую обновлённые версии DirectX поставляются вместе с игровыми приложениями.
Будущее DirectX [ ]
Последней выпущенной версией является DirectX 12; до выпуска Service Pack 1 на Windows Vista был установлен DirectX 10, изначально называвшийся Windows Graphics Foundation, позднее он был переименован. Изменения в DirectX 10.1, в отличие от DirectX 10, касаются графической составляющей — Direct3D. DirectX 10 представляет собой часть ОС Windows Vista и использует отличную от DirectX 9.0 модель видео-драйвера. DirectX 10 выдвигает набор требований к аппаратной части — минимальный стандарт функциональности, необходимой для того, чтобы аппаратное устройство было DirectX-совместимым.
Microsoft, упрощающий разработку игровых и мультимедиа-приложений, предоставляющий удобный путь интеграции с DirectX, Microsoft активно продвигает этот инструмент как средство разработки приложений для Xbox 360 , Linux , PC и Windows 8. Поддерживает WDDM 1.2 для увеличения производительности, с улучшенной интеграцией Direct2D , Direct3D , и [3] .
21 января компания Microsoft официально объявила о том, что осенью 2015 года состоится релиз новой операционной системы Windows 10. А вместе с ней и запуск 12-го поколения DirectX. С момента появления этого API прошло уже почти двадцать лет, поэтому в этот раз мы решили оглянуться назад и вспомнить, как создавалась и развивалась программная оболочка для компьютерной графики на протяжении этого длинного отрезка.
Сегодня DirectX, разрабатываемый компанией Microsoft, уже воспринимается как должное. Все привыкли, что этот API является неотъемлемой частью Windows. Новая итерация «оси» под номером 10 не стала исключением. Еще осенью прошлого года Microsoft анонсировала двенадцатое поколение DirectX. Этому событию предшествовало пять лет почти полной тишины из стана Microsoft. Компания ограничивалась лишь плановыми обновлениями API, и никакой определенности насчет будущего DirectX не было. Масла в огонь подливало и то, что многие компании-разработчики в открытую поддерживали конкурирующую технологию OpenGL. В их число входила, например, компания Valve. Вдобавок ко всему, компания AMD представила свой низкоуровневый программный интерфейс Mantle, который должен был составить конкуренцию как OpenGL, так и DirectX. К счастью, Microsoft не вышла из игры, и все это время разработчики компании упорно трудились над созданием DirectX 12, который станет частью анонсированной в январе операционной системы Windows 10. Релиз «десятки» запланирован на ближайшую осень, а это значит, что уже в конце 2015 (либо в начале 2016) мы увидим первые игры, поддерживающие новый API.
Даже спустя столько лет первый Crysis по-прежнему хорош. А ведь это всего лишь DirectX 10
Чтобы немного скрасить время ожидания, мы предлагаем вам вспомнить, как создавался и развивался DirectX на протяжении последних 20 лет.
Списки команд и пакеты
В Direct3D 12 также появилась новая модель управления нагрузкой GPU, включающая в себя списки команд и пакеты. В Direct3D 11 все задания GPU отправлялись через непосредственный контекст (immediate context), который представляет собой единый поток команд. А для того чтобы обеспечить многопоточность, в играх также используются отложенные контексты, которые тем не менее не совсем подходят под архитектуру нынешних процессоров.
Модель отправки заданий в Direct3D 12 базируется на списках команд, который содержат все данные, необходимые для работы GPU. В каждом списке команд указывается, какой объект PSO нужно использовать, какие текстуры и буферные данные необходимы. Также в списке находятся аргументы для всех вызовов отрисовки. Список команд сам по себе автономный и не имеет состояния, поэтому драйвер может заранее рассчитать все необходимые для GPU команды. В конце все списки сериализуются и отправляются в GPU посредством очереди команд.
Схематичное представление очереди команд
Кроме списков команд, в Direct3D 12 появилась поддержка пакетов. Пакеты представляют собой наборы команд, которые могут быть использованы несколько раз с различными исходными данными. Пакеты, к примеру, будут использоваться в том случае, если на экране нужно нарисовать два и более одинаковых объекта с разными текстурами. При этом драйвер готовит инструкции для GPU лишь один раз.
Таблицы и наборы дескрипторов
Привязка ресурсов в Direct3D 11 довольно удобна и при этом обладает довольно высоким уровнем абстрагирования. Тем не менее принцип ее работы также не позволяет «на полную катушку» использовать возможности нынешнего «железа». При использовании Direct3D 11 в играх создаются специальные объекты представления, а затем эти представления привязываются к определенным «слотам» различных этапов шейдера в конвейере. Шейдеры, в свою очередь, считывают информацию из этих слотов, которые фиксируются в момент отрисовки. Основной недостаток такой модели заключается в том, что, когда в игре требуется отрисовка с использованием иных ресурсов, необходимо выполнить повторную привязку и только после этого делать draw call. Как вы понимаете, этот процесс очень трудоемкий. Поэтому в Direct3D 12 он был переработан с учетом возможностей новых процессоров и видеокарт.
Схематичное изображение дескриптора
В двенадцатой версии API на смену явной привязке к слотам пришла модель, использующая набор дескрипторов (descriptor heap), в которые игра записывает свои представления ресурсов. Такой подход позволяет графическому процессору напрямую записывать аппаратное описание ресурса в память. Для определения того, какие именно ресурсы будет использовать конвейер для конкретного вызова отрисовки, в играх указываются одна или несколько таблиц дескрипторов, которые представляют собой подмассивы полного набора дескрипторов. И поскольку набор дескрипторов состоит из специфичных, понятных «железу» данных, то смена таблиц осуществляется намного быстрее, нежели процесс повторной привязки в Direct3D 11.
Схематичное изображение набора дескрипторов
В дополнение к таблицам и наборам дескрипторов Direct3D 12 поддерживает динамическую индексацию в шейдерах, что обеспечивает высокую гибкость и позволяет использовать новые технологии рендеринга. Например, современные движки рендеринга, использующие отложенный подход (deferred rendering engines), обычно кодируют идентификатор объекта или материал в предварительный g-буфер. В Direct3D 11 при использовании большого количества материалов значительно замедлялась заключительная стадия рендеринга. Динамическая индексация решает именно эту проблему. При использовании Direct3D 12 сцена с одной тысячей материалов финализируется так же быстро, как и сцена с десятью материалами.
В роли догоняющего. DirectX 2.0 и далее
Следующее поколение API DirectX было представлено в середине 1996 года. Наконец-то в состав программного интерфейса были включены пакеты Direct3D и DirectPlay. С тех пор API состоял из следующих компонентов:
- DirectDraw. Использовался для отрисовки двухмерной графики.
- Direct3D (D3D). Использовался для отрисовки трехмерной картинки.
- DirectPlay. Представлял собой сетевой программный интерфейс.
- DirectInput. Использовался для обработки данных, поступающих с различных манипуляторов.
- DirectX Media. Представлял собой набор API для работы с мультимедиа.
- DirectMusic. Использовался для проигрывания музыки.
- DirectSound. Использовался для записи и воспроизведения звука.
- DirectSound3D. Предназначен для работы с пространственным звуком.
- DirectX Media Objects. Потоковые объекты, такие как энкодеры, декодеры и эффекты.
- DirectSetup. Отвечал за установку всех компонентов DirectX.
DirectX 2.0 предназначался для операционных систем Windows 95 и Windows NT 4.0. С момента выпуска первой ОС прошло совсем мало времени, поэтому для этой версии было выпущено очень мало игр. Microsoft воспользовалась моментом и начала активно продвигать API среди разработчиков. Ради этого во время конференции GDC в 1996 году Microsoft даже устроила специальное мероприятие, где представила некоторые новые возможности DirectX.
Вскоре после появления второго поколения API свет увидел и DirectX 3.0. Это случилось в сентябре 1996 года. Ближе к концу года были представлены дополнения в виде версий 3.0a и 3.0b. В сравнении со второй итерацией API третье поколения получило лишь незначительные изменения, которые так и не смогли повлиять на положение DirectX среди девелоперов.
Так выглядела картинка с применением DirectX 3.0
Главным достоинством пятой итерации DirectX стал намного упрощенный код. Писать программы с помощью API стало легче, и DirectX уже не вызывал у девелоперов такой неприязни, как поначалу. Главным же недостатком пятой «директрисы» было отсутствие поддержки технологии мультитекстурирования (multitexturing). Суть этой технологии заключается в наложении на грань сразу нескольких текстур за один проход. Но тут Microsoft улыбнулась удача. В то время алгоритмы мультитекстурирования были не столь эффективны, а железо — недостаточно производительным для того, чтобы применять технологию без ущерба для производительности. Чаще всего вместо нее разработчики использовали обычные многократные проходы, во время каждого из которых на грань накладывалась только одна текстура. Для девелоперов было важно, чтобы новые игры запускались и на старых машинах, поэтому в большинстве приложений мультитекстурирование не использовалось. Microsoft от этого лишь выиграла.
Практически каждый пользователь компьютера без зависимости от умений, должен был где-то слышать о существовании DirectX. Каждая новая установка операционной системы Windows на компьютер не обходится без DirectX. Я запомнил еще с детства, когда только осваивал компьютер, что "для игр" необходимо установить DirectX. Тогда ещё с интернетом были проблемы, но файл установки всегда можно было найти у друзей либо на дисках со сборником программ. Сейчас, чтобы скачать и установить последнюю версию DirectX понадобится около пары минут.
Зачем нужен и что это такое?
Direct X - это разработка Microsoft, включающая в себя интерфейс прикладного программирования (API). Именно благодаря ему возможно постоянное сотрудничество между программным обеспечением и аудио- и видеосистемами. Это позволяет правильно отображать игры и анимацию, а также оптимизировать процессы, чтобы воспроизводимый контент работал плавно, без падения количества кадров в секунду. Библиотеки DirectX используются начиная с Windows 95, а также всеми консолями серии Xbox, от самых старых моделей устройств до последних поколений Xbox Series S и Series X.
Истоки DirectX - краткая история самого популярного API
DirectX был запущен в 1995 году как альтернатива среде MS-DOS. Создание нового API было продиктовано необходимостью реализации решений для грядущей системы Windows 95, которые побудили бы тогдашних разработчиков игр и другого программного обеспечения выпускать свои продукты на этой новой платформе. MS-DOS, которую многие считали стабильной, полной и удобной в работе, привлекала разработчиков, поэтому в интересах Microsoft было предоставить им такие же или более привлекательные условия для новой системы.
Первой игрой, выпущенной на системе с активным DirectX, была Doom, порт для которой в 1996 году назывался Doom 95. Однако даже успешный перенос игры на новую систему не погасил скептицизма разработчиков игр, согласно которым операционные системы Windows больше подходят для офисного использования, чем для игр. Однако Microsoft не остановилась в своих усилиях и вскоре представила миру новые функции интерфейса, включая компонент Direct3D, предлагающий в то время расширенные графические эффекты в трех измерениях.
Со временем библиотеки DirectX были разработаны с новыми функциями и новыми режимами отображения, а содержимое набора инструментов разработчика (DirectX SDK) было расширено и упорядочено. В 2002 году была выпущена программа DirectX 9. Благодаря ей пользователи этих систем могли получить лучший внешний вид, как в двух-, так и в трехмерном пространстве.
После успеха этой версии выход программы DirectX 10 был лишь вопросом времени. Эта версия интерфейса, выпущенная в 2006 году для Windows Vista, была основана на многих новых решениях, адаптирующих библиотеки к потребностям еще более сложных производств.
DirectX 11 дебютировал вместе с Windows 7, в которой он также был реализован. Этот выпуск также был расширен до Windows 8 и 8.1. Геймеры, использующие эти версии системы Microsoft, могут пользоваться, среди прочего, улучшенными методами обработки изображений (включая стереоскопию) и новыми, еще более совершенными функциями аудио и видео.
DirectX 12 - что добавлено в последней версии интерфейса?
DirectX 12 был анонсирован в 2014 году, а его дебют состоялся годом позже, когда была представлена операционная система Windows 10. Новая версия пакета заменила систему DirectX 11, использовавшуюся в предыдущих версиях, внося значительные изменения в области оптимизации и увеличения графических возможностей игр и приложений, сохраняя при этом высокую производительность. Самой популярной функцией, реализованной в новом выпуске пакета, была DirectX Raytracing, то есть отслеживание солнечных лучей, что позволяет реалистично освещать пейзаж даже в реальном времени.
Чрезвычайно динамичная индустрия видеоигр не любит застоя - спрос на новые технологические решения, позволяющие получить от игры еще лучший опыт, постоянно растет. Чтобы соответствовать требованиям рынка, 10 ноября 2020 года Microsoft выпустила DirectX 12 Ultimate, расширение для новой версии интерфейса, обеспечивающее еще более сложные графические функции и обеспечивающее высокий уровень реализма в виртуальном игровом процессе. Среди них есть методы рендеринга VRS или Mesh Shading, которые позволяют извлекать детали объектов без потери производительности.
Однако только обладатели самых мощных компьютеров смогут воспользоваться богатыми возможностями DirectX 12 Ultimate - технологические решения, позволяющие использовать современные эффекты, можно найти только в дорогих, самых продвинутых моделях видеокарт. Естественно, они также требуют мощного процессора и достаточно больших свободных ресурсов оперативной памяти.
На рынке по-прежнему мало игр, поддерживающих наиболее требовательные возможности DirectX 12 Ultimate, но все больше и больше современных игр, безусловно, извлекут выгоду из преимуществ современных технологий. К сожалению, обеспечить такой стандарт игрового процесса непросто - в текущей рыночной ситуации доступ к видеокартам, оснащенным, например, специализированными RT-ядрами, значительно затруднен из-за высоких цен и повсеместной нехватки видеокарт. Придется немного подождать популяризации технологий, предоставляемых DirectX 12 Ultimate.
Установка DirectX - как это сделать и что вам понадобится?
В большинстве случаев установка DirectX вообще не требуется - библиотеки по умолчанию включены в базовые файлы операционной системы. Однако иногда мы хотим загрузить обновление вручную. Вы можете скачать его с официального сайта Microsoft.
Для проверки вашей версии DirectX, достаточно воспользоваться поисковым запросом на панели задач или меню "Пуск" операционной системы, необходимо ввести "dxdiag".
Всем спасибо за внимание, не забываем подписываться на канал, чтобы не пропускать новые публикации. А кто подписался, буду благодарен за "лайк".
2016 год станет особенным и судьбоносным для компьютерных геймеров. AMD и NVIDIA представят новейшие архитектурные разработки: Polaris и Pascal. Выйдет большое количество игр, поддерживающих DirectX 12. Первые «ласточки» уже появились в продаже. А это значит, что настало время на деле оценить возможности этого API.
На словах у Microsoft все просто великолепно. DirectX 12 дает программисту полный доступ к комплектующим компьютера. «Полный доступ к ресурсам железа» способствует лучшей оптимизации игр. Если это интересно разработчику, конечно же. А «улучшенная оптимизация» — это рациональное использование системных требований. Цепочка ясная и логичная. По идее, все должны быть в плюсе. Разработчики реализуют свой творческий потенциал и обзаведутся любовью (и денежками) геймеров. Игроки получат качественный продукт без серьезных затрат на покупку очень мощного компьютерного железа.
30 сентября 2016 года DirectX исполнится 21 год. Но только в 12-й версии Microsoft решила перейти к низкоуровневому программированию.
Железный эксперимент: DirectX 12 против DirectX 11
История [ ]
Изначально нацеленный на разработку видеоигр, DirectX стал популярен и в других областях разработки программного обеспечения. К примеру, DirectX, наряду с Windows 95. Главным фактором, определяющим, насколько популярна будет новая ОС, являлся набор программ, которые можно будет запускать под её управлением. В Microsoft пришли к выводу, что, пока разработчики видят Windows NT. Direct3D позиционировался как замена OpenGL в игровой сфере. Отсюда берёт своё начало «священная война» между сторонниками кросс-платформенной OpenGL и доступной лишь в Windows (в том числе Windows NT) Direct3D. Так или иначе, остальные части DirectX очень часто комбинируются с OpenGL в компьютерных играх, так как OpenGL как таковой не подразумевает функциональность уровня DirectX (например, доступ к клавиатуре/джойстику/мыши, поддержка звука, игры по сети и т. д.).
DirectX является базой для Хронология версий DirectX [ ]
- DirectX 6.0 — мультитекстурирование
- DirectX 7.0 — аппаратная поддержка преобразований, обрезания и освещения
- DirectX 8.0 — Windows Vista и выше
- шейдерная модель 4.0 (только Windows Vista, Windows 7, Windows 8)
- DirectX 10.1 — шейдерная модель 4.1 (только Windows Vista, Windows 7, Windows 8)
- Windows Vista, Windows 7, Windows 8)
- Windows 10).
Качество
Как я уже говорил, DirectX 12 разработан для более качественной оптимизации под современное железо. Технологии Tiled Resources, Typed UAV и Bind, входящие в состав этого API, существенно (на бумаге) экономят ресурс видеопамяти и ориентируют API на использование большего числа ядер центрального процессора. Принцип консервативной растеризации ускоряет расчет теней и фильтра MSAA. Логично, что оптимизация приведет и к улучшению качества графики, но самое главное — это все же увеличение стабильности и быстродействия.
DirectX 12 — это не про качество.
Игра про «Агента 47» сразу же получила поддержку DirectX 12. Клиент включает встроенный бенчмарк. Он заметно облегчает процесс тестирования, но некоторые коллеги отмечают, что в игре есть локации, которые сильнее нагружают систему, нежели подготовленный разработчиком скрипт. Rise of the Tomb Raider обзавелась поддержкой нового API при помощи патча. Игра также обзавелась встроенным бенчмарком.
DirectX 11 был выпущен почти 5 лет назад, в июле 2009 года. В Microsoft не слишком спешили выпускать новое поколение API, ограничиваясь лишь плановыми обновлениями. Однако в марте текущего года DirectX 12 наконец-то был анонсирован. Какие же изменения получила новая версия программного интерфейса?
В марте текущего года в рамках ежегодной конференции разработчиков игр GDC 2014 (Game Developer Conference) компания Microsoft анонсировала API нового поколения — DirectX 12. С момента запуска предыдущей версии API прошло почти 5 лет (напомним, DirectX 11 увидел свет аж в июле 2009 года), и, даже несмотря на то, что программный интерфейс Microsoft получил несколько обновлений, его позиции заметно пошатнулись. Влияние API OpenGL, напротив, стало более существенным. А компания AMD даже запустила свой собственный низкоуровневый программный интерфейс Mantle. «Тишина» из стана Microsoft дала почву для не самых лучших прогнозов относительно дальнейшего развития DirectX, однако весенний анонс двенадцатой версии API расставил все точки над «ё». Microsoft снова в игре.
Одной из первых компьютерных игр с поддержкой DirectX 12 стала демо-версия Forza Motorsport 5
Коротко o DirectX 12
Про основную «фишку» DirectX 12 я написал. Низкоуровневый API снижает уровень абстрагирования оборудования. Подробно про двенадцатую версию детища Microsoft мы уже писали. Не вижу смысла повторяться. Возможности DirectX 12 в «вакууме» наглядно демонстрирует специальный тестовый пакет бенчмарка 3DMark. Согласно результатам, эффективность низкоуровневых API (не забываем про Mantle и Vulkan) выше минимум на порядок. Все очень просто: DirectX 11 накладывает ограничения на количество команд отрисовки центрального процессора. Но будем честны: 3DMark — это всего лишь 3DMark. Цифры красивые, однако с реальностью никак не соотносятся.
Сравнение производительности DirectX 11 и DirectX 12 в 3DMark
Поддержка DirectX 12 | |||
DirectX 12 API | DirectX 12 _ 0 | DirectX 12 _ 1 | |
AMD | Radeon R9 Fiji; | Radeon R9 Fiji; | Radeon R9 Fiji. |
Radeon GCN 1.1/1.2; | Radeon GCN 1.1/1.2. | ||
Radeon HD 7000. | |||
Radeon GCN 1.1/1.2; | Radeon GCN 1.1/1.2. | ||
Radeon HD 7000. | |||
Radeon GCN 1.1/1.2; | |||
Radeon HD 7000. | |||
NVIDIA | GeForce GTX Maxwell 2-го поколения; | GeForce GTX Maxwell 2-го поколения. | GeForce GTX Maxwell 2-го поколения. |
GeForce GTX Maxwell 1-го поколения; | |||
GeForce Kepler; | |||
GeForce Fermi. | |||
GeForce GTX Maxwell 1-го поколения; | |||
GeForce Kepler; | |||
GeForce Fermi. | |||
GeForce GTX Maxwell 1-го поколения; | |||
GeForce Kepler; | |||
GeForce Fermi. |
DirectX 12 работает только с Windows 10. Маркетинг чистой воды, нацелен на увеличение числа пользователей этой ОС. Можно ли этому противостоять? Можно, но только при продвижении другого API. Например, Vulkan.
DirectX 12 работает только в среде Windows 10.
Список игр, поддерживающих DirectX 12, заметно увеличился. В этом материале мы рассмотрим HITMAN, Rise of the Tomb Raider и Ashes of the Singularity. Эти игры поддерживают и DirectX 11, и DirectX 12. Две из них вышли совсем недавно. Ashes of the Singularity все еще находится на стадии beta-тестирования. Эксклюзивно для Windows 10 вышла ремастеринг-версия культовой Gears of War. Совсем скоро появятся игры ААА-класса: Deus Ex: Mankind Divided, Forza Motorsport 6 Apex и Quantum Break. На только что прошедшей выставке GDC представили движок CryEngine V. Отныне все Xbox-эксклюзивы будут выходить в том числе и на ПК. Но только исключительно под Windows 10. Спасибо новой стратегии Microsoft.
Совместимость [ ]
Многие современные устройства имеют DirectX-совместимые драйверы, иными словами, пользователь должен установить DirectX для использования всех возможностей устройства. На данный момент система обновления драйверов Windows Update позволяет загружать только необходимые библиотеки, а не весь драйвер целиком.
Поддерживаемые операционные системы:
-
/98/ ME; , Windows 2000, Windows 2000 Advanced Server, Windows 2000 Professional Edition, Windows 2000 Server, Windows 2000 Service Pack 2, Windows 2000 Service Pack 3, Windows 2000 Service Pack 4; , Windows Server 2003 Service Pack 1, Windows Server 2003 Datacenter x64 Edition, Windows Server 2003 Enterprise x64 Edition, Windows Server 2003 Standard x64 Edition, Windows Small Business Server 2003; , Windows XP 64-bit, Windows XP Home Edition, Windows XP Media Center Edition, Windows XP Professional Edition, Windows XP Service Pack 1, Windows XP Service Pack 2, Windows XP Service Pack 3, Windows XP Starter Edition, Windows XP Tablet PC Edition; , Windows 7, Windows 8, Windows 8.1, Windows 10; , Windows Server 2008 R2, Windows Server 2012, Windows Server 2016.
С чего все начиналось. DirectX 1.0
История появления DirectX берет свое начало в первой половине 1990-х годов, когда компания Microsoft занималась разработкой операционной системы Windows 95, которая должна была прийти на смену MS-DOS. Главным преимуществом MS-DOS было то, что она пользовалась популярностью у разработчиков игр. По мнению трех программистов Microsoft — Крэйга Эйслера (Craig Eisler), Алекса Сен-Джона (Alex St. John) и Эрика Энгстрома (Erik Engstrom) — даже после выхода Windows 95 многие разработчики могли отдать предпочтение MS-DOS как более подходящей для создания игр платформе. Чем же «дос» так нравился программистам? Все дело в том, что, программируя под MS-DOS, разработчики обращались напрямую к железу, то есть имели прямой доступ к видеокарте, клавиатуре, мыши, звуковым устройствам и другим частям системы. Подобный подход использовался в программировании под консоли, однако создание игр для компьютера осложнялось тем, что, в отличие от приставок, здесь не было фиксированной конфигурации системы. Это приходилось учитывать при написании кода, что значительно усложняло жизнь девелоперам.
Крэйг Эйслер — один из создателей DirectX
Так или иначе, но обращаться напрямую к аппаратной части компьютера в Windows 95 стало невозможно. Причиной этого была новая защищенная модель памяти, которая запретила прямой доступ к устройствам. Шел 1994 год, Windows 95 была на подходе, и Microsoft требовалось быстрое и эффективное решение возникшей проблемы. Им стал API DirectX, за создание которого отвечали как раз Эйслер, Сен-Джон и Энгстром. Релиз DirectX версии 1.0 состоялся 30 сентября 1995 года под названием Windows Games SDK.
Первая итерация DirectX была очень упрощена относительно своих будущих версий. Она поддерживала вывод двухмерной графики, звуков, а также обрабатывала данные, поступающие с различных манипуляторов.
DirectX 1.0 разрабатывался для Windows 95
Разработчики игр встретили DirectX довольно прохладно. Во-первых, они не были уверены, что Microsoft будет поддерживать API на протяжении долгого времени. Недоверие к Microsoft возросло после того, как компания свернула поддержку API WinG, который рассматривался как один из «помощников» в портировании игр с DOS на Windows. Во-вторых, «девяносто пятая» была требовательней к аппаратной части, из-за чего производительность в играх, как правило, снижалась в сравнении с MS-DOS. Ну и в-третьих — у DOS было огромное количество энтузиастов, которые ни в какую не хотели программировать под Windows.
Стоит сказать, что к моменту появления DirectX разработчикам игр уже был доступен API OpenGL, разработанный компанией Silicon Graphics Inc и представленный в 1992 году. Но в Microsoft решили пойти своим путем. В дальнейшем противостояние DirectX и OpenGL было похоже на битву Давида против Голиафа. Microsoft, прежде всего, брала своей финансовой мощью, а Silicon Graphics — репутацией и техническим опытом. Так, выбор в пользу OpenGL тогда сделал создатель Doom и Quake Джон Кармак (John Carmack). Он считал, что программный код DirectX слишком сложный для программирования, и поэтому в открытую поддерживал более «дружелюбный» интерфейс OpenGL. Конечно же, на планы Microsoft это никак не повлияло, но прохладная встреча DirectX со стороны разработчиков ясно дала понять, что работы у инженеров компании целый непочатый край.
Скриншот из игры Doom, за разработку которой отвечал Кармак
Объекты состояния конвейера
Одним из недостатков Direct3D 11 была так называемая проблема вызовов отрисовки (draw call). С ней благополучно справились программисты AMD при разработке API Mantle. Похожим образом эта проблема была решена и в Direct3D 12. Для этого потребовалась значительная переработка графического конвейера. Однако для начала нужно объяснить, как же происходит рендеринг картинки в Direct3D 11 и в чем конкретно заключается недостаток вызовов отрисовки.
Схема рендеринга в Direct3D 11
Для описания любого объекта на экране Direct3D 11 использует состояния конвейера: это и состояние входного ассемблера (input assembler state), и состояние пиксельного шейдера (pixel shader state), а также состояния растеризатора (rasterizer state) и выходного смесителя (output merger state). Все они могут изменяться независимо друг от друга. Такая архитектура представляет собой удобную и относительно высокоуровневую реализацию графического конвейера. Однако в силу того, что между этими состояниями существуют различного рода зависимости, такое представление графического конвейера не совсем подходит для современного «железа». Объясним почему. Важно понимать, что стадии конвейера выполняются не последовательно, а в какой-то степени параллельно. К примеру, многие GPU обрабатывают состояния пиксельных шейдеров и выходного смесителя в одном аппаратном блоке. Всякий раз от рантайм-компонента DirectX требуется определить состояние конвейера (совокупность состояний каждой стадии) и ресурсов (вершин, текстур и так далее), над которыми будут производиться операции. Как только все данные известны, производится вызов отрисовки. Иными словами, draw call вызывает рендеринг объекта. Все эти операции выполняются силами центрального процессора. И когда объектов на экране становится много, скорости CPU не хватает для их обработки, и максимальное количество вызовов отрисовки на кадр уменьшается. В этом и заключается смысл проблемы draw calls.
Схема рендеринга в Direct3D 12
В Direct3D 12 большая часть состояний объединена в неизменяемый объект состояния конвейера (PSO). Это позволяет драйверу, не дожидаясь вызова отрисовки, конвертировать этот объект в аппаратные инструкции, необходимые для последующей работы GPU. Тут же стоит отметить, что система может динамически менять используемый объект PSO. После этого в аппаратные регистры копируется лишь небольшой объем рассчитанных состояний, тогда как в Direct3D 11 аппаратное состояние определялось «на ходу». В итоге такой подход ликвидирует то «бутылочное горлышко», коим являлся центральный процессор, и обеспечивает большее количество вызовов отрисовки на каждый кадр.
О нелегкой судьбе Microsoft
Последние несколько лет стали не самыми удачными для Microsoft. Пользователи с прохладой встретили новую операционную систему Windows 8, не с лучшей стороны проявила себя и мобильная платформа Surface. Вдобавок ко всему, компания подпортила себе репутацию всем известным лейблом Games for Windows и сервисом LIVE. DirectX 11 едва ли не пошел по стопам других неудачных проектов Microsoft последних лет: разработчики не спешили переводить игры «на рельсы» нового API, и большинство развлекательных программ поддерживали его только опционально. А та же Valve и вовсе в открытую склонялась к OpenGL. В общем, американской компании пришлось нелегко на всех фронтах — и не только в игровой сфере.
Платформа Microsoft Surface не снискала особого успеха
Как уже говорилось выше, с момента выпуска DirectX 11 до анонса двенадцатой итерации API прошло почти 5 лет. Microsoft еще никогда так не затягивала с выпуском нового поколения программного интерфейса. Ходит множество слухов относительно такой политики, но, скорее всего, основная причина этого кроется в долгом жизненном цикле игровой консоли Xbox 360. В компании были попросту не заинтересованы в развитии нового API для уходящей в прошлое приставки. DirectX 12 разрабатывается уже с прицелом на ее преемницу — Xbox One, которая была выпущена лишь в ноябре прошлого года, а в России, кстати, официально не представлена до сих пор. Но не консолью единой: DirectX 12 будет поддерживаться целой гаммой устройств, начиная от смартфонов и планшетов и заканчивая десктопами.
Официальные продажи Xbox One в России стартуют 26 сентября
Что же нового принесет нам двенадцатая версия «директирисы»? Главным отличием нового API от всех его предшественников стало снижение уровня абстрагирования оборудования. DirectX 12 предоставит иную модель программирования. Как говорят в Microsoft, «приближенную к железу» («closer to the metal»). Используя такую модель, разработчики получат более широкий доступ к различным возможностям графического чипа. Кроме этого, DirectX 12 теперь поддерживает объекты состояния конвейера (PSO, pipeline-state object) и таблицы дескрипторов. Наконец, API получил новые возможности для конвейера рендеринга, которые значительно увеличивают производительность в таких алгоритмах, как определение коллизий, расчет прозрачности или геометрическая отбраковка. А теперь давайте подробнее остановимся на каждом изменении.
CD Projekt: DirectX 12 не повысит производительность Xbox One
Содержание
Взгляд со стороны
Первым, кто посеял сомнения в тотальном превосходстве DirectX 12, стал глава Xbox Фил Спенсер. Отвечая на вопросы в Twitter, Спенсер сказал, что «DirectX 12 не привнесет каких-то масштабных изменений на Xbox One. Новый API лишь даст программистам больше свободы при создании новых проектов». Интерпретировать слова главы Xbox можно по-разному. Очевидно одно: даже если DirectX 11 игры начнут «переводить на рельсы» DirectX 12, большого прироста производительности на первых порах ожидать не стоит. Причина этого кроется в том, что программирование под DirectX 11 и DirectX 12 будет значительно различаться. И игры, разработанные с учетом всех ограничений DirectX 11, вряд ли смогут работать быстрее с DirectX 12 — как раз из-за этих самых ограничений одиннадцатой версии, заложенных на стадии проектирования приложений. Конечно, на помощь всегда может прийти оптимизация. Однако, на наш взгляд, по-настоящему раскрыть потенциал нового API смогут лишь заточенные под него игры.
Свою ложку дёгтя в бочку мёда добавил и программист компании CD Projekt RED Балаш Торок. По его словам, достичь разрешения 1080p на Xbox One будет непросто. «Думаю, многие просто не понимают, что и как будет упрощать DirectX 12, — говорит Торок. — В большинстве игр нагрузка на шейдерные блоки консоли очень велика. И новая версия DirectX эту ситуацию не исправит. Конечно, можно будет увеличить количество полигонов, но их все равно не получится сгладить. И в таком случае теряется весь смысл. Думаю, выход нового API повлияет лишь на то, как будут мыслить при разработке графические дизайнеры, вот и всё».
CD Projekt RED сейчас занимается разработкой игры The Witcher 3, выход которой запланирован на 24 февраля 2015 года на PC, Sony Playstation 4 и Xbox One
Тем не менее в IT-индустрии преобладают позитивные настроения относительно DirectX 12. Например, о новом API довольно лестно отзывается Эндрю Лауритцен — ведущий инженер подразделения Advanced Technology Group компании Intel. «Девелоперы уже достаточно долго просили внести в API эти изменения (которые получил DirectX 12 — прим. автора), и пока что все ими довольны». Отвечая на вопрос о сравнении API, Лауритцен не стал делать никаких выводов об их производительности, сделав акцент лишь на ключевых различиях. По его словам, в плане архитектуры к DirectX 12 наиболее приближен API компании AMD Mantle. Что касается OpenGL, то этот интерфейс имеет много общего с одиннадцатой версией DirectX. О конкуренции между Mantle и DirectX 12 речи пока быть не может. «У Mantle и DirectX 12 похожие задачи, однако Mantle работает только на графических процессорах AMD. Эти API можно сравнивать только на AMD’шном железе, а для этого нам стоит дождаться официального выхода DirectX 12». Не забыл Лауритцен и об OpenCL, однако уточнил, что это скорее вычислительный API, не предназначенный для графики и более схожий с пакетом DirectCompute.
В положительном ключе о DirectX 12 высказался и представитель AMD Роберт Хэллок, отметив при этом, что не рассматривает интерфейс Microsoft как прямого конкурента Mantle. «DirectX 12, Mantle и OpenGL будут дополнять друг друга за счет своих уникальных возможностей», — сказал Хэллок. Как и Лауритцен, он отметил важность того, что в лице Mantle и DirectX 12 разработчики наконец-то получают похожие на консольные, низкоуровневые API для создания игр. Также представителю AMD был задан вопрос, не станет ли поддержка Mantle преимуществом для видеокарт Radeon в плане работы с низкоуровневым DirectX 12. «Пока что об этом сложно говорить, — ответил Хэллок. — Но к моменту запуска DirectX 12 разработчики будут работать с Mantle уже на протяжении 20-24 месяцев, поэтому это может сыграть нам на руку».
Шутер Battlefield 4 поддерживает API Mantle
Наконец, не остались в стороне от обсуждения нового API Microsoft и ведущие разработчики игр. О своем видении ситуации рассказал инженер Crytek Тьяго Соуза. «С точки зрения разработчика DirectX находился в стагнации уже несколько лет, — сказал Соуза. — Однако двенадцатая версия подоспела как раз вовремя. Изменения в новом API позволят нам решить растущие проблемы с рендерингом в реальном времени». Прокомментировал инженер Crytek и решенную проблему draw calls: «Теперь художники получат больше свободы и смогут рисовать более интересные уровни». Соуза также отметил, что многое, о чем программисты просили Microsoft, было реализовано в DirectX 12. Однако в одном моменте Microsoft пока что не пошла навстречу девелоперам: несмотря на их просьбы, операционная система Windows 7 не будет поддерживать новый API. Пока план таков. Не секрет, что многим игровым компаниям хотелось бы, чтобы DirectX 12 поддерживался на «семёрке», поскольку это значительно расширит потенциальный рынок для их продуктов.
DirectX [ ]
Практически все части DirectX API представляют собой наборы COM-совместимых объектов.
В целом, DirectX подразделяется на:
- DirectX Graphics, набор интерфейсов, ранее (до версии 8.0) делившихся на:
- DirectDraw: интерфейс вывода растровой графики. (Его разработка давно прекращена)
- Direct3D (D3D): интерфейс вывода трёхмерных примитивов.
Практическая часть
Как говорят сами разработчики: «для нас, пользователей, основным преимуществом DirectX 12 станет увеличенная эффективность API, а следовательно, и скорость работы.» Свои слова программисты Microsoft подтвердили на деле. Во время конференции GDC производительность двенадцатой версии DirectX была оценена с помощью известного бенчмарка 3DMark. Пакет работает сейчас только с DirectX 11, но для тестирования он был специально портирован на DirectX 12. Одиннадцатая итерация API активно использует многопоточность, однако в силу особенностей работы, связанных с драйверами и рантаймом, ядра и потоки графического процессора время от времени простаивают. Это наглядно отображено на графиках, приведенных чуть ниже. При использовании DirectX 12 ситуация меняется в лучшую сторону. Примерно на 50% улучшается эффективность использования CPU, а также обеспечивается более эффективное распараллеливание работы между потоками.
Результаты тестирования в режимах DirectX 11 (сверху) и DirectX 12 (снизу). Новый API эффективнее использует ресурсы CPU. В качестве тестового стенда использовалась система GIGABYTE BRIX Pro (Intel Core i7-4770R + Iris Pro Graphics 5200)
Режим Direct3D 11
Режим Direct3D 12
Во время презентации DirectX 12 разработчики Microsoft упомянули и об автомобильном симуляторе Forza Motorsport 5, который является эксклюзивом для платформы Xbox One. Они отметили, что игра использует все возможности приставки «на полную катушку», а все благодаря низкоуровневому API, доступному для Xbox One. И если раньше такую эффективность можно было достичь только на консолях, то теперь она доступна также на смартфонах и настольных компьютерах — конечно же, благодаря DirectX 12. Это было продемонстрировано на примере вышеупомянутой игры Forza Motorsport 5, которая была портирована на PC в качестве технической демо-версии. К слову, разработчики автосимулятора, компания Turn 10 Studios, уже пытались портировать игру на PC с помощью DirectX 11, однако так и не смогли добиться приемлемого фреймрейта посредством этой версии API.
Помимо высокой производительности, DirectX 12 может похвастаться впечатляющей энергоэффективностью. По данным Microsoft, двенадцатая генерация API потребляет в среднем на 50% меньше энергии, чем ее предшественница. И это наглядно показало проведенное во время конференции SIGGRAPH 2014 тестирование платформы Surface Pro 3, оснащенной графическим процессором Intel HD4400.
Специально для тестов программисты Intel написали демо-приложение Asteroids. В Asteroids на экране одновременно отрисовываются 50 тысяч уникальных астероидов, каждый из которых имеет свою комбинацию вершин, текстур и констант. Приложение запускалось в двух режимах: DirectX 11 и DirectX 12. В первом тестовом прогоне сравнивалась энергоэффективность двух API. Для этого количество кадров в секунду блокировалось, и одна и та же сцена рендерилась сначала под управлением DirectX 11, а затем — DirectX 12. На картинке ниже можно увидеть, что энергопотребление CPU в режиме DirectX 12 уменьшилось наполовину. Отличный результат! И особенно важный для мобильной платформы.
Так выглядит приложение Asteroids. Справа внизу вы можете увидеть графики энергопотребление CPU (синий) и GPU (красный). После переключения в режим DirectX 12 энергопотребление CPU уменьшилось вдвое
Результаты еще одного тестирования с фиксированным фреймрейтом. Результат такой же: при использовании DirectX 12 CPU потребляет примерно на 50% меньше энергии
Во втором тестовом прогоне измерялась производительность двух API. Само собой, количество кадров в секунду уже не фиксировалось. Неудивительно, что DirectX 12 вновь оказался впереди. Средний фреймрейт в режиме DirectX 12 составил 33 FPS против 19 FPS у DirectX 11 — еще немного, и прирост скорости составил бы 50%. Скриншоты и графики энергопотребления смотрите ниже.
Производительность системы в режиме DirectX 11
Производительность системы в режиме DirectX 12. Обратите внимание на график энергопотребления: при переключении в режим DirectX 12 CPU потребляет меньше энергии, что позволяет GPU работать быстрее. При этом энергопотребление всей системы находится в прежних границах
Результаты еще одного тестового прогона без фиксированного фреймрейта. Ранее полученные результаты подтверждаются: при переключении в режим DirectX 12 GPU начинает работать быстрее
В общем и целом, результаты предварительных тестирований DirectX 12 оказались более чем положительными и обнадежили многих пользователей. Высказывались даже предположения, что новый API позволит достичь разрешения 1080p на Xbox One. Но стоит ли доверять столь ранним выводам, тем более сделанным самими разработчиками Microsoft?
Читайте также: