Официален анонс на графичния стандарт Vulkan 1.2

2
629

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

Основни нововъведения в графичния стандарт Vulkan 1.2

  • За повсеместно използване е вече готов езикът за програмиране на шейдъри HLSL, разработен от Microsoft за DirectX. Поддръжката на HLSL във Vulkan дава възможност за използването на един от HLSL шейдърите в приложенията с поддръжката на Vulkan и DirectX, като едновременно с това се опростява транслирането от HLSL към SPIR-V. За компилирането на шейдърите се предлага използването на компилатора DXC, който бе представен от Microsoft през 2017 година и се базира на LLVM технологията. Поддръжката на Vulkan е реализирана чрез отделен бекенд, който дава възможност за транслирането на HLSL в междинното представяне на шейдърите SPIR-V. Тази реализация обхваща всички вградени възможности на HLSL, включително математическите типове, потоците за управление, функциите, множествата, типовете ресурси, структурите и методите, както и използването на специфичните за Vulkan разширения, включително VKRay на Nvidia. В режима HLSL за Vulkan е реализрана работата на игрите Destiny 2, Red Dead Redemption II, Assassin’s Creed Odyssey и Tomb Raider
  • Обновена е спецификацията SPIR-V 1.5, определяща универсалното за всички платформи междинно представяне на шейдърите, което може да се използва както в графиката, така и при паралелните изчисления. Генерира се единен междинен код, който може да се използва от OpenGL, Vulkan и OpenCL драйверите без да се налага използването на вграден компилатор на шейдърите
  • В основния API Vulkan са включени 23 разширения, позволяващи значително увеличаване на производителността, повишаване качеството на визуализацията и опростяване на разработването. Ето някои от тези разширения:
    • Хронологични семафори (Timeline semaphore) унифициращи синхронизацията с хоста и стека от устройства
    • Възможност за използване в шейдърите на числови типове с понижена точност
    • Съвместим с HLSL вариант за използване на паметта
    • Формален модел на паметта, който определя по какъв начин паралелно изпълняваните потоци могат да се обръщат към съвместно използваните данни и синхронизиращи операнди
    • Буферни препратки и други
Пълният списък на добавените разширения:
  • Добавени са над 50 нови структури и 13 функции
  • Подготвени са съкратени варианти на спецификациите за различните платформи
  • Продължава работата върху осигуряването на прехвърляне към други графични API. Така например, Vulkan предлага разширения, даващи възможност за транслиране на OpenGL (Zink), OpenCL (clspv, clvk), OpenGL ES (GLOVE, Angle) и DirectX (DXVK, vkd3d) чрез API Vulkan, както и обратното – осигуряване работата на Vulkan върху платформи, които не поддържат тази технология (gfx-rs и Ashes за работа с OpenGL и DirectX, MoltenVK и gfx-rs за работа с Metal)
  • Бъдещите планове включват представяне на разширения за машинно обучение, трасиране на лъчите, кодиране и декодиране на видео, поддръжка на VRS (variable-rate shading) и Mesh шейдъри

Да напомним, че API Vulkan е характерен преди всичко с кардиналното опростяване на драйверите, изнасянето на генериране на командите за графичния процесор в средата на приложенията, възможност за включване на нови програмни слоеве за дебъгване, унификация на API и всички API функции за всички платформи, използване на междинен код, който след компилиране се изпълнява от графичния процесор. За осигуряването на висока производителност и предсказуемост Vulkan предоставя на приложенията средства за директното управление на графичния процесор и вградена поддръжка на многопоточната обработка на командите от страна на GPU, което минимизира забавянето от страна на драйверите, като по този начин самите драйвери и техния код значително се опростяват. Така например, операциите като управление на паметта и обработването на грешките, които в OpenGL са реализирани в драйверите, при Vulkan са изнесени на ниво приложения.

Vulkan обхваща всички достъпни графични платформи и предоставя единен API за десктоп компютрите, мобилните системи и уеб приложенията, като осигурява един общ 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.

2
ДОБАВИ КОМЕНТАР

avatar
1 Коментари
1 Отговори на коментарите
0 Последователи
 
Коментарът с най-много реакции
Най-горещият коментар
  Абонирай се  
нови стари оценка
Извести ме за
Кольо
Кольо

Дам, използуването на понижената точност е голямо „предимство“. Производителите на графични карти, като почнат да представят производителността в терафлопси, но за сметки с ниска точност от нивото на int8 и като покажат едни голееееми числа и ще зарибят простата публика, че са увеличили производителността в новите поколения видеокарти не само с 20-30-50%, а с 300%(3 пъти) и рибките ще се хванат.

ngc-bg
ngc-bg

Не мисля точно така. Когато имаш int8 + float16 да речем, можеш да облекчиш сметките на процесора(cpu/gpu/whatever), при положение че не на всякъде ти е нужно да имаш 32бита точност. Тоест – повече гъвкавост:
на теория си прав, че това отваря врата за некачесвен код/имплементация, но от друга страна дава възможности за по-качествен код/имплементация 🙂
Проблема е при компилаторите че са 32/64битови и там ще има да се оптимизира, но нали е за прогрес…
Всичко е до задклавиатурното устройство все пак