DirectX 12
DirectX 12 — это низкоуровневый программный интерфейс (API) для взаимодействия приложений, в первую очередь компьютерных игр, с графическим и вычислительным оборудованием, разработанный корпорацией Microsoft. Является частью семейства DirectX, впервые представлен публично в 2014 году и выпущен вместе с операционной системой Windows 10. DirectX 12 пришёл на смену DirectX 11 и ознаменовал собой смену парадигмы в разработке графических API, перейдя от модели высокоуровневой абстракции к модели, дающей разработчикам значительно более прямой и детальный контроль над аппаратными ресурсами видеокарты (GPU), центрального процессора (CPU) и памяти.
История
Предпосылки и разработка
К началу 2010-х годов возможности DirectX 11, несмотря на свою зрелость, начали сдерживать производительность в многопоточных средах. API был спроектирован для эпохи одноядерных процессоров, и его драйверная модель (WDDM) накладывала значительные накладные расходы на каждый вызов отрисовки (draw call). Это приводило к тому, что CPU, особенно в современных многоядерных системах, часто простаивал, ожидая обработки команд драйвером. В то же время конкурирующие API, такие как AMD Mantle (анонсирован в 2013 году) и Khronos Group’s Vulkan (анонсирован в 2015 году), уже предлагали низкоуровневый доступ к железу.
Microsoft начала разработку DirectX 12 в 2012 году, стремясь создать API, который бы сочетал в себе преимущества низкоуровневого доступа с экосистемой и обратной совместимостью DirectX. В 2014 году на конференции Game Developers Conference (GDC) был представлен первый публичный анонс и демонстрация технологии.
Релиз и эволюция
DirectX 12 был выпущен 29 июля 2015 года вместе с Windows 10. Первыми играми, поддерживающими API, стали Gears of War: Ultimate Edition и Ashes of the Singularity. В 2016 году вышло обновление, добавившее поддержку DirectX 12 для Windows 7 (через платформенное обновление), хотя функциональность была ограничена по сравнению с Windows 10.
В 2018 году, с выходом обновления Windows 10 October 2018 Update, была представлена версия DirectX 12 Ultimate (также известная как DirectX 12_2). Это обновление стандартизировало четыре ключевые технологии, ставшие обязательными для видеокарт нового поколения:
- Трассировка лучей (Raytracing): аппаратное ускорение расчёта реалистичного освещения, теней и отражений.
- Variable Rate Shading (VRS): технология, позволяющая изменять частоту шейдирования разных участков кадра для повышения производительности.
- Mesh Shaders: новая модель обработки геометрии, заменяющая классические вершинные и геометрические шейдеры, что даёт больше гибкости и производительности.
- Sampler Feedback: улучшенная работа с текстурами, позволяющая эффективнее загружать их в память.
Архитектура и ключевые особенности
Низкоуровневый доступ
В отличие от DirectX 11, где драйвер и API скрывали от разработчика многие детали управления памятью и состоянием GPU, DirectX 12 предоставляет прямой доступ к аппаратным ресурсам. Это позволяет:
- Управлять памятью вручную: разработчик сам решает, когда и какие ресурсы (текстуры, буферы) загружать в видеопамять (VRAM) и когда их выгружать. Это устраняет накладные расходы на автоматическое управление памятью драйвером.
- Создавать и управлять очередями команд: API позволяет создавать несколько независимых очередей команд для разных типов задач (например, графика, вычисления, копирование) и выполнять их параллельно на разных частях GPU.
- Использовать дескрипторы: вместо привязки ресурсов к шейдерам через глобальные таблицы, DirectX 12 использует дескрипторы — лёгкие указатели на ресурсы, которые можно быстро переключать.
Многопоточная оптимизация
Главное преимущество DirectX 12 — его способность эффективно использовать многоядерные процессоры. В DirectX 11 вся работа по подготовке команд для GPU (запись в буфер команд) должна была выполняться в одном потоке. DirectX 12 позволяет создавать и заполнять буферы команд параллельно в нескольких потоках, а затем объединять их в один поток для отправки GPU. Это значительно снижает нагрузку на главный поток и позволяет CPU полностью раскрыть свой потенциал, особенно в сценариях с большим количеством объектов (draw calls).
Предикация и устранение избыточности
DirectX 12 включает механизмы, позволяющие GPU самостоятельно принимать решения о том, какие объекты отрисовывать, а какие — нет, без участия CPU. Например, с помощью предикации (predication) можно проверить, виден ли объект в кадре, и если нет — пропустить его отрисовку. Это экономит пропускную способность шины PCIe и время GPU.
Сравнение с DirectX 11 и Vulkan
| Характеристика | DirectX 11 | DirectX 12 | Vulkan |
|---|---|---|---|
| Уровень абстракции | Высокий (драйвер скрывает детали) | Низкий (прямой доступ к железу) | Низкий (прямой доступ к железу) |
| Управление памятью | Автоматическое (драйвер) | Ручное (разработчик) | Ручное (разработчик) |
| Многопоточность | Ограниченная (один поток записи команд) | Отличная (многопоточная запись) | Отличная (многопоточная запись) |
| Сложность разработки | Относительно низкая | Высокая (требует глубоких знаний) | Высокая (требует глубоких знаний) |
| Платформы | Windows, Xbox | Windows, Xbox, Windows 7 (ограниченно) | Windows, Linux, Android, macOS (через MoltenVK) |
| Экосистема | Зрелая, множество инструментов | Растущая, инструменты от Microsoft | Растущая, инструменты от Khronos и вендоров |
DirectX 12 является эксклюзивным для экосистемы Microsoft (Windows и Xbox), в то время как Vulkan — кроссплатформенный стандарт. Оба API предоставляют схожий уровень низкоуровневого контроля, но DirectX 12 теснее интегрирован с Windows и её драйверной моделью (WDDM 2.0), что в некоторых сценариях может давать небольшое преимущество в производительности на Windows. Vulkan, в свою очередь, более гибок и портативен.
Применение
Компьютерные игры
DirectX 12 является основным API для современных игр на Windows и Xbox. Его использование позволяет:
- Повысить производительность: особенно в сценариях с большим количеством объектов (например, стратегии в реальном времени, Ashes of the Singularity, Total War: Warhammer III).
- Улучшить графику: благодаря поддержке трассировки лучей, VRS и Mesh Shaders в играх, таких как Cyberpunk 2077, Metro Exodus Enhanced Edition, Control.
- Снизить нагрузку на CPU: что особенно важно для игр на процессорах с большим количеством ядер.
Профессиональные приложения
Хотя DirectX 12 в первую очередь ориентирован на игры, он также используется в профессиональных приложениях для визуализации, симуляции и рендеринга. Например, некоторые CAD-системы и пакеты для 3D-моделирования (Autodesk 3ds Max, Blender) могут использовать DirectX 12 для ускорения отображения сцены в реальном времени.
Вычисления общего назначения (GPGPU)
DirectX 12 включает вычислительные шейдеры (Compute Shaders), которые позволяют использовать GPU для выполнения неграфических вычислений: физических симуляций, обработки изображений, машинного обучения. Это делает его альтернативой CUDA (от NVIDIA) и OpenCL.
Критика и ограничения
- Высокий порог входа: Разработка под DirectX 12 требует от программистов глубокого понимания архитектуры GPU, управления памятью и многопоточности. Ошибки могут привести к падению производительности или нестабильной работе.
- Эксклюзивность для Windows: API не поддерживается на других операционных системах, что ограничивает его применение для кроссплатформенных проектов. Для Linux существует слой перевода DXVK и VKD3D-Proton, но он не обеспечивает полной совместимости.
- Неравномерность производительности: Эффективность DirectX 12 сильно зависит от качества реализации в конкретной игре и драйвера видеокарты. Плохо оптимизированная игра может работать медленнее, чем её аналог на DirectX 11.
- Сложность отладки: Из-за низкоуровневого характера отладка приложений DirectX 12 может быть сложнее, чем в DirectX 11. Microsoft предоставляет инструменты (PIX), но их освоение требует времени.
Интересные факты
- Первая публичная демонстрация DirectX 12 была проведена на GDC 2014 с использованием игры Star Swarm от Oxide Games, которая показала значительный прирост производительности на многоядерных процессорах.
- DirectX 12 Ultimate — это не отдельная версия, а набор обязательных функций (Feature Level 12_2), который должны поддерживать видеокарты нового поколения. Это своего рода «знак качества» для современного графического API.
- Технология DirectX Raytracing (DXR) стала первой широко распространённой реализацией аппаратной трассировки лучей в игровых API, опередив Vulkan Ray Tracing.
Источники
- Microsoft Docs. DirectX 12 Graphics.
- Microsoft Docs. DirectX 12 Ultimate.
- AnandTech. The DirectX 12 Performance Preview: AMD and NVIDIA.
- GDC Vault. DirectX 12: A New Era of Graphics.
- Wikipedia. DirectX 12.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →