Недавно Khronos объявил о выпуске новой версии спецификации Vulkan 1.2, который определяется как API для доступа к графике и вычислительным возможностям графического процессора. Исправления и дополнения, накопленные за два года, были включены в новую спецификацию.
Вулкан отличается кардинальным упрощением драйверов, перенести генерацию команд GPU на сторону приложения, возможность подключать слои отладки, унифицировать API для нескольких платформ и использовать предварительно скомпилированное представление среднего кода для выполнения на стороне графического процессора.
Основные новые функции Vulkan 1.2
Примечательно, чтоРеализация языка программирования шейдеров 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 от NVRIA.
В режиме HLSL поверх Вулкана, удалось организовать работу таких игр, как Destiny 2, Red Dead Redemption II, Assassin's Creed Odyssey и Tomb Raider.
Также Отмечается, что спецификация SPIR-V 1.5 была обновлена, который определяет универсальное промежуточное представление шейдеров для всех платформ, которое может использоваться как для графики, так и для параллельных вычислений.
API ядра Vulkan включает 23 расширения для повышения производительности, улучшите качество отображения и упростите разработку.
Из них мы можем найти Хронология семафоров: которые унифицируют синхронизацию с очередями хоста и устройства (позволяют использовать примитив для всенаправленной синхронизации между устройством и хостом, без использования отдельных примитивов VkFence и VkSemaphore).
Они представлены монотонно увеличивающимся 64-битным значением, которое можно отслеживать и обновлять с помощью нескольких потоков.
Подготовлены более короткие версии спецификации для типичных целевых платформ., что упрощает работу на платформах, для которых еще поддерживаются не все расширения, и позволяет отказаться от выборочной активации основных возможностей Vulkan API.
Из других изменений которые выделяются:
- Продолжалась работа над проектом переносимости с другими графическими API.
- Возможность использования числовых типов в шейдерах с пониженной точностью
- Опция HLSL-совместимой компоновки памяти
- Несвязанные (несвязанные) ресурсы, которые снимают ограничение на количество ресурсов, доступных шейдерам, за счет использования общего виртуального пространства системной памяти и памяти графического процессора.
- Формальная модель памяти, которая определяет, как параллельные потоки могут получать доступ к общим данным и операциям синхронизации.
- Индексирование дескрипторов для повторного использования дескрипторов дизайна в нескольких шейдерах;
- Привязки буфера.
- Добавлен полный список расширений
- Добавлено более 50 новых структур и 13 функций.
Наконец, из планов на будущее выделяется разработка расширений для машинного обучения, трассировки лучей, кодирования и декодирования видео, поддержка VRS (шейдеры с переменной скоростью) и сеточные шейдеры.
Intel, AMD, ARM, Imagination Technologies и NVIDIA уже выпустили драйверы. которые поддерживают новую версию Vulkan.
В то время как случай Настольные игры (бесплатные драйверы), se предлагает поддержку Vulkan 1.2 для драйверов RADV (Карты AMD) и драйверы ANV (Intel). Поддержка Vulkan 1.2 также реализована в отладчике RenderDoc 1.6, LunarG Vulkan SDK и в наборе Vulkan-Samples.