Опубліковано графічний стандарт Vulkan 1.2

Консорціум Khronos, що займається розробкою графічних стандартів,
опублікував специфікацію Вулкан 1.2, що визначає API для доступу до графічних та обчислювальних можливостей GPU. Нова специфікація увібрала в себе виправлення, що накопичилися за два роки і розширення. Драйвери з підтримкою нової версії Vulkan вже випустили компанії Intel, AMD, ARM, Imagination Technologies та NVIDIA. У Mesa підтримка Vulkan 1.2 запропонована для драйверів РАДВ (карти AMD) та ANV (Intel). Підтримка Vulkan 1.2 також реалізована у відладчику RenderDoc 1.6, LunarG Vulkan SDK та наборі прикладів Vulkan-Samples.

Основні нововведення:

  • Доведено до готовності до застосування реалізація мови програмування шейдерів HLSL, розробленого компанією Microsoft для DirectX Підтримка HLSL у Vulkan дає можливість використання одних HLSL-шейдерів у додатках на базі Vulkan та DirectX, а також спрощує трансляцію з HLSL до SPIR-V. Для компіляції шейдерів пропонується використовувати штатний компілятор
    DXC, який був відкритий компанією Microsoft у 2017 році та базується на технології LLVM. Підтримка Vulkan реалізована через окремий бекенд, що дозволяє транслювати HLSL у проміжне уявлення шейдерів SPIR-V. Реалізація охоплює не лише всі вбудовані можливості
    HLSL, включаючи математичні типи, потоки управління, функції, множини, типи ресурсів, простору імен, Shader Model 6.2, структури та методи, але й дозволяє використовувати специфічні для Vulkan розширення, такі як VKRay від NVIDIA. У режимі HLSL поверх Vulkan вдалося організувати роботу таких ігор, як Destiny 2, Red Dead Redemption II, Assassin's Creed Odyssey та Tomb Raider.

    Опубліковано графічний стандарт Vulkan 1.2

  • Оновлено специфікацію SPIR-V 1.5, Яка визначає універсальне для всіх платформ проміжне уявлення шейдерів, яке може застосовуватися як для графіки, так і для паралельних обчислень.
    SPIR-V має на увазі виділення окремої фази компіляції шейдерів у проміжне уявлення, що дозволяє створювати фронтенди для різних високорівневих мов. На основі різних високорівневих реалізацій окремо генерується єдиний проміжний код, який можна використовувати драйверами OpenGL, Vulkan і OpenCL без застосування вбудованого компілятора шейдерів.

    Опубліковано графічний стандарт Vulkan 1.2

  • В основний API Vulkan включено 23 розширення, що дозволили збільшити продуктивність, підвищити якість візуалізації та спростити розробку. Серед доданих розширень:
    • Хронологічні семафори (Timeline semaphore), що уніфікують синхронізації з хостом та чергами пристроїв (дозволяють обійтися одним примітивом для всеспрямованої синхронізації між пристроєм та хостом, без застосування окремих примітивів VkFence та VkSemaphore). Нові семафори представлені 64-розрядним значенням, що монотонно збільшується, яке можна відстежувати і оновлювати в декількох потоках.
      Опубліковано графічний стандарт Vulkan 1.2

    • Можливість використання в шейдерах числових типів зі зниженою точністю;
    • Сумісний з HLSL варіант розкладки пам'яті;
    • Непов'язані ресурси (bindless), що знімають обмеження на кількість доступних для шейдерів ресурсів за рахунок використання загального віртуального простору системної пам'яті та пам'яті GPU;
    • Формальна модель пам'яті, що визначає як паралельно виконувані потоки можуть звертатися до спільно використовуваних даних та операцій синхронізації;
    • Індексація дескрипторів для повторного використання дескрипторів розкладок у кількох шейдерах;
    • Буферні посилання

    Повний список доданих розширень:

  • Додано понад 50 нових структур та 13 функцій;
  • Підготовлені скорочені варіанти специфікації для типових цільових платформ, які спрощують роботу на платформах, для яких поки що не підтримуються всі розширення, і дозволяють обійтися без вибіркової активації базових можливостей API Vulkan.
  • Продовжено роботу над проектом із забезпечення переносимості з іншими графічними API. Наприклад, Vulkan пропонує розширення, що дозволяють транслювати OpenGL (Zink), OpenCL (clspv, clvk), OpenGL ES (GLOVE, Angle) та DirectX (DXVK, VKD3D) через API Vulkan, а також, навпаки, для забезпечення роботи Vulkan на платформах без його рідної підтримки (gfx-rs и Попіл для роботи поверх OpenGL та DirectX, MoltenVK та gfx-rs для роботи поверх Metal).
    Для покращення сумісності з DirectX та HLSL додані розширення
    VK_KHR_host_query_reset, VK_KHR_uniform_buffer_standard_layout, VK_EXT_scalar_block_layou, VK_KHR_separate_stencil_usage, VK_KHR_separate_depth_stencil_layouts, а також у SPIR-V.

З планів на майбутнє відзначається розвиток розширень для машинного навчання, трасування променів, кодування та декодування відео, підтримки VRS (variable-rate shading) та Mesh-шейдерів.

Нагадаємо, що API Vulkan примітний кардинальним спрощенням драйверів, виносом генерації команд GPU на бік програми, можливістю підключення шарів налагодження, уніфікацією API для різних платформ і застосуванням передкомпільованого проміжного представлення коду для виконання на стороні GPU. Для забезпечення високої продуктивності та передбачуваності, Vulkan надає додаткам засоби для прямого керування операціями GPU та вбудовану підтримку багатопоточної обробки команд GPU, що мінімізує накладні витрати, що вносяться драйвером, а можливості, що реалізуються на стороні драйвера, помітно спрощуються і стають більш передбачуваними. Наприклад, такі операції, як управління пам'яттю та обробка помилок, що реалізуються в OpenGL на стороні драйвера, Vulkan винесені на рівень програми.

Vulkan охоплює всі доступні платформи та надає єдиний API для настільних, мобільних систем та Web, дозволяючи використовувати один загальний API для різних графічних процесорів та областей застосування. Завдяки багатошаровій архітектурі Vulkan, що передбачає створення інструментів, що працюють з будь-якими GPU, виробники обладнання можуть використовувати при розробці типові інструменти для перевірки коду, налагодження та профілювання. Для створення шейдерів пропонується нове переносне проміжне уявлення SPIR-V, засноване на LLVM і використовує спільні з OpenCL базові технології. Для управління пристроями та екранами Vulkan пропонується інтерфейс WSI (Window System Integration), що вирішує приблизно ті ж завдання, що і EGL в OpenGL ES. Підтримка WSI з коробки доступна в Wayland - всі програми, що використовують Vulkan, можуть запускатися в оточенні немодифікованих серверів Wayland. Можливість роботи через WSI також забезпечена для Android, X11 (c DRI3), Windows, Tizen, MacOS та iOS.

Джерело: opennet.ru

Додати коментар або відгук