Открыть сервис

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 11DirectX 12Vulkan
Уровень абстракцииВысокий (драйвер скрывает детали)Низкий (прямой доступ к железу)Низкий (прямой доступ к железу)
Управление памятьюАвтоматическое (драйвер)Ручное (разработчик)Ручное (разработчик)
МногопоточностьОграниченная (один поток записи команд)Отличная (многопоточная запись)Отличная (многопоточная запись)
Сложность разработкиОтносительно низкаяВысокая (требует глубоких знаний)Высокая (требует глубоких знаний)
ПлатформыWindows, XboxWindows, 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.

Источники

  1. Microsoft Docs. DirectX 12 Graphics.
  2. Microsoft Docs. DirectX 12 Ultimate.
  3. AnandTech. The DirectX 12 Performance Preview: AMD and NVIDIA.
  4. GDC Vault. DirectX 12: A New Era of Graphics.
  5. Wikipedia. DirectX 12.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →