Попередній огляд Microsoft DirectX 12: чого чекати гравцям і розробникам?

18.08.2015 windows | для початківців

Після виходу Windows 10 мене раз по раз запитують, де завантажити DirectX 12, чому dxdiag показує версію 11.2, незважаючи на те, що відеокарта підтримується і про подібні речі. Постараюся відповісти на всі ці питання.


У цій статті - детально про поточний стан справ з DirectX 12 для Windows 10, чому ця версія може бути не задіяна на вашому комп'ютері, а також про те, де завантажити DirectX і навіщо це потрібно, з урахуванням того, що цей компонент вже є в ОС.

Опис і можливості

В першу чергу давайте розберемося, чим саме хороший DirectX 12 і, як він відрізняється від більш ранніх бібліотек. У останній версії фреймворку додано, наприклад: більш правильна обробка шейдерів.

Повний список відмінностей можна сформулювати наступним чином:

  • Додано низькорівневий доступ. Завдяки новим процедурам бібліотека може взаємодіяти прямо з апаратною частиною графічного адаптера.
  • Реалізована багатопоточна оптимізація. Причому відбувається це саме на низькому рівні, що значно прискорює рендеринг графіки в іграх і зменшує навантаження на комп'ютер.
  • Додано підтримку декількох графічних адаптерів.
  • Стало можливим використання всього потенціалу eSRAM. Однак, дана функція доступна тільки на ігрових приставках від Microsoft.
  • Підтримується робота зі старими графічними адаптерами, які функціонували на минулих версіях DirectX.
  • Додано low-end GPU (працює на відеоадаптерах новітнього покоління).
  • Покращено підтримку 4K.

Список можливостей нової бібліотеки від Microsoft можна продовжувати ще довго, однак, враховуючи невеликий розмір нашої статті, давайте відразу переходити до сильних і слабких сторін DirectX 12.

⇡#Pipeline State Objects

Крім того, Microsoft безпосередньо попрацювала над проблемою draw calls, яку настільки успішно вирішує Mantle. Для цього потрібна була ґрунтовна переробка графічного конвеєра Direct3D. Тут необхідний невеликий лікнеп щодо того, як виконується рендеринг в Direct3D. Існує кілька стадій (stages) конвеєра, які на абстрактному рівні уособлюють етапи підготовки зображення. Важливо те, що стадії, всупереч тому, як це може здатися, не виконуються одна за одною в реальному часі. Від runtime-компонента DirectX потрібно визначити стан конвеєра (pipeline state), що являє собою сукупність статків кожної зі стадій, тобто параметри операцій, які виконує GPU в процесі рендерінгу, і ресурси - дані, над якими будуть зроблені операції (текстури, вершини і так далі). Тільки коли все це зібрано разом, робиться draw call - виклик, що запускає рендеринг об'єкта. І ось тоді miniport driver графічного процесора, в свою чергу, транслює pipeline state в набір інструкцій для GPU зрозумілою йому мовою (hardware state).

Останній етап вносить свій внесок у загальний час вимальовки об'єкта (нагадаємо, ця і всі вищезазначені процедури все ще виконуються на CPU). А якщо об'єктів на екрані багато, то виникає горезвісна проблема draw calls, коли продуктивність CPU стає пляшковим горлечком. AMD Mantle, будучи низькорівневим API, зменшує час підготовки конвеєра до віддачі draw call просто за рахунок відсутності етапу трансляції pipeline state в hardware state. Хоча хто знає, які ще оптимізації в Mantle включила AMD. Mantle SDK разом з детальною документацією поки не поширюється публічно.


Direct3D 12, як і раніше, є високорівневим API, відносно байдужим до заліза, на якому виконується рендеринг (GPU тільки повідомляє про підтримувані ним функції). У ньому проблема вирішується по-іншому. Замість того щоб передавати драйверу pipeline state повністю в момент draw call, стану безлічі окремих стадій конвеєра об'єднані в кілька великих об'єктів - PSO (Pipeline State Objects), які формуються незавимісо і віддаються драйверу негайно. Таким чином, не чекаючи draw call, драйвер може відразу конвертувати PSO в апаратні інструкції і мало не відправити останні в регістри GPU (у джерелі на MSDN цей момент не зовсім зрозумілий). Крім того, укрупнення об'єктів, які уособлюють стан стадій конвеєра, дозволяє драйверу швидше дозволяти залежності між останніми. Якщо в процесі підготовки до draw call якийсь з PSO змінився, також потрібно перерахувати тільки відповідні інструкції, а не hardware state цілком.

Також не зовсім ясно, чому саме роздільна репрезентація pipeline state повинна призвести до драматичного зменшення часу підготовки до draw call. Так чи інакше, на трансляцію pipeline state в hardware state все одно витрачається процесорний час. Можливо, рання підготовка окремих PSO якось допоможе швидше дозволяти залежності при підготовці hardware state, про що пишуть на MSDN. Можливо, перевага буде отримана за рахунок виконання runtime-компонента Direct3D і драйвера GPU на різних потоках.

Гідності та недоліки

Давайте спробуємо розглянути список позитивних і негативних особливостей використання DirectX 12.

Плюси:

  • Найкраща продуктивність в іграх.
  • Максимально якісна графіка.
  • Повністю русифікований установник.
  • Не потребує налаштування.
  • Відмінна оптимізація з Windows 10.
  • Немає аналогів.

Мінуси:

  • До недоліків можна віднести хіба що додатковий зайнятий дисковий простір.

Але якщо ми не встановимо цей фреймворк, новітні ігри просто відмовляться працювати.

⇡#Command lists, bundles

DirectX 12 також представляє нову модель керування навантаженням GPU за допомогою списків команд (command lists). У моделі DirectX 11 вже існує цей термін. API надає два типи контексту пристрою (device context): immediate context и deferred context. У першому випадку команди безпосередньо відправляються на драйвер GPU, у другому - записуються списки команд, які потім можуть відтворюватися в immediate context. Нововведення DX12 полягає в тому, що драйвер GPU в моделі Direct3D 11 може заздалегідь прораховувати низькорівневі інструкції на основі різних списків команд.


На додаток до списків команд у Direct3D 12 з'явилася ще одна сутність - bundles. Bundle представляє собою набір команд, які можуть бути виконані неодноразово в поєднанні з різними ресурсами - наприклад, для візуалізації ідентичних об'єктів з різною текстурою. У цьому випадку від драйвера потрібно лише один раз підготувати інструкції для GPU.

Як користуватися

Далі давайте розбиратися, як безкоштовно завантажити, встановити і налаштувати DirectX 12 для Windows 10.

Завантаження і встановлення

Насамперед необхідно завантажити бібліотеку. Але тут відразу обмовимося: найчастіше фреймворк інтегрований в тіло операційної системи спочатку. Якщо це не так і вам потрібно встановити DirectX 12, робимо наступним чином:

  1. Переходимо трохи нижче і скачуємо архів з установником виконуваної бібліотеки від Microsoft.
  2. Розпаковуємо потрібний файл і запускаємо його.
  3. Керуючись підказками, робимо установку.
  4. Перезавантажуємо ПК або ноутбук.

Інструкція щодо роботи

Ніяких додаткових дій щодо свого налаштування бібліотека від Microsoft не передбачає. Як тільки ми встановимо її і перезавантажимо комп'ютер, всі ігри і мультимедійні програми, які потребують DirectX 12, почнуть справно працювати.

Чому замість DirectX 12 використовується DirectX 11.2

Якщо у засобі діагностики ви бачите, що поточна версія DirectX 11.2, це може бути викликано двома основними причинами - непідтримувана відеокарта (причому, можливо, вона буде підтримуватися в майбутньому) або застарілі драйвери відеокарти.


Важливе оновлення: у Windows 10 Creators Update у головному dxdiag завжди відображається 12-та версія, навіть якщо вона не підтримується відеокартою. Про те, як дізнатися підтримувану, див. окремий матеріал: Як дізнатися версію DirectX у Windows 10, 8 і Windows 7.

Відеокарти, які підтримують DirectX 12 в Windows 10 на даний момент:

  • Інтегрована графіка Intel процесорів Core i3, i5, i7 Haswell і Broadwell.
  • NVIDIA GeForce серій 600, 700, 800 (частково) і 900, а також відеокарти GTX Titan. NVIDIA також обіцяє підтримку DirectX 12 для GeForce 4xx і 5xx (Fermi) в найближчому майбутньому (слід очікувати оновлених драйверів).
  • AMD Radeon серій HD 7000, HD 8000, R7, R9, а також інтегровані графічні чіпи AMD A4, A6, A8 і A10 7000, PRO-7000, Micro-6000 і 6000 (тут також є підтримка у процесорів E1 і E2). Тобто Kaveri, Millins і Beema.

При цьому, навіть якщо ваша відеокарта, здавалося б, потрапляє в цей список, може виявитися, що конкретна модель поки не підтримується (виробники відеокарт все ще працюють над драйверами).

У будь-якому випадку, одна з перших дій, яку слід виконати, якщо вам потрібна підтримка DirectX 12 - встановити останню версію драйверів для Windows 10 вашої відеокарти з офіційних сайтів NVIDIA, AMD або Intel.

Примітка: багато хто зіткнувся з тим, що драйвера відеокарти в Windows 10 не встановлюються, видаючи різні помилки. У цьому випадку допомагає повне видалення старих драйверів (Як видалити драйвери відеокарти), а також програм на зразок GeForce Experience або AMD Catalyst і встановлення їх по-новому.


Після оновлення драйверів, подивіться у dxdiag, яка версія DirectX використовується, а заодно і версію драйвера на вкладці екран: для підтримки DX 12 має бути драйвер WDDM 2.0, а не WDDM 1.3 (1.2).

COM_SPPAGEBUILDER_NO_ITEMS_FOUND