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

Консорциум Khronos, занимающийся разработкой графических стандартов, опубликовал спецификацию Vulkan 1.1, определяющую API для доступа к графическим и вычислительным возможностям GPU. Новая спецификация вобрала в себя накопившиеся исправления и ознаменовала включение в основной состав расширений, подготовленных за два года с момента публикации первой версии API. Драйверы с поддержкой новой версии Vulkan уже выпустили компании Intel, AMD (AMDGPU-PRO и AMDVLK) и NVIDIA. Поддержка Vulkan 1.1 также принята в кодовую базу Mesa для драйверов RADV (карты AMD)) и ANV (Intel).

Основные новшества:

  • Представлена новая спецификация SPIR-V 1.3, определяющая универсальное для всех платформ промежуточное представление шейдеров, которое может применяться как для графики, так и для параллельных вычислений. SPIR-V подразумевает выделение отдельной фазы компиляции шейдеров в промежуточное представление, что позволяет создавать фронтэнды для различных высокоуровневых языков. На основе различных высокоуровневых реализаций отдельно генерируется единый промежуточный код, который может использоваться драйверами OpenGL, Vulkan и OpenCL без применения встроенного компилятора шейдеров;
  • Защищённый контент (Protected content) — возможность ограничения доступа и копирования ресурсов, используемых для рендеринга и отображения, а также возможность организации воспроизведения и отображения защищённого мультимедийного контента;
  • Операции с подгруппами (Subgroup) — предоставляют эффективный механизм для организации работы с параллельно вызываемыми шейдерами, взаимодействующими между собой. Под подгруппой подразумевается набор вычислительных задач, выполняемых на GPU. Для применения предоставлена коллекция различных моделей параллельных вычислений;
  • Multiview (K_KHR_multiview) — в рамках одного прохода рендеринга может одновременно отрисовываться несколько изображений, что может применяться для отрисовки одним вызовом левой и правой частей изображения для шлемов виртуальной реальности или для отображения шести сторон на кубической раскладке текстуры;
  • Device Groups (VK_KHR_device_group) — для организации однородных вычислений для высокопроизводительных игр или шлемов виртуальной реальности на системах с несколькими GPU, таких как AMD CrossFireX и NVIDIA SLI. Для приложения взаимодействие с Device Group производится как с одним GPU, независимо от того сколько фактически GPU входит в группу;
  • Совместный доступ к ресурсам между процессами и API (Cross-process и Cross-API Sharing) — позволяет использовать блок разделяемой памяти и примитивы синхронизации между несколькими приложениями или разными API в одном приложении. Например, можно получать изображения для композитинга и вывода на одном экране из разных приложений Vulkan и OpenGL ES;
  • Расширенные возможности для вычислений: поддержка чтения и записи 16-разрядных величин, хранящихся в памяти GPU, и обращения к структурам данных, используя урезанную форму указателей. Значительное расширение поддержки вычислительных ядер GPU;
  • Поддержка языка программирования шейдеров HLSL, разработанного Microsoft для DirectX. Поддержка HLSL позволяет увеличить гибкость блочной компоновки элементов при сохранении старой раскладки данных в памяти и обеспечить возможность использования одних HLSL-шейдеров в приложениях на базе Vulkan и DirectX, а также упростить трансляцию из HLSL в SPIR-V;
  • Поддержка текстур, оформленных с использованием цветового пространства YCbCr. Полезно для организации композитинга видеопотоков и их смешивания с другим графическим контентом.

Напомним, что 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