Опубликован графический стандарт Vulkan 1.1
Как сообщает opennet.ru консорциум Khronos, занимающийся разработкой графических стандартов, опубликовал спецификацию Vulkan 1.1, определяющую API для доступа к графическим и вычислительным возможностям GPU. Новая спецификация вобрала в себя накопившиеся исправления и ознаменовала включение в основной состав расширений, подготовленных за два года с момента публикации первой версии API. Драйверы с поддержкой новой версии Vulkan уже выпустили компании Intel, AMD (AMDGPU-PRO и AMDVLK) и NVIDIA (beta-версия).
Поддержка Vulkan 1.1 также принята в кодовую базу Mesa 18.1 для драйверов RADV (карты AMD) и ANV (Intel). Кроме Mesa 18.1 для возможности использовать Vulkan 1.1 на GPU Intel необходимо наличие чипов Intel Broadwell "Gen 8" и более новых, для Radeon GPU необходим любой GPU, поддерживаемый ядерным драйвером AMDGPU, то есть не младше, чем Radeon HD 7730 или Radeon R7 240. Для работы также необходимо использовать ядро Linux не ниже 4.14 для Intel и Linux 4.15 для RADV, чтобы иметь необходимую поддержку Direct Rendering Manager.
- Представлена новая спецификация SPIR-V 1.3, определяющая универсальное для всех платформ промежуточное представление шейдеров, которое может применяться как для графики, так и для параллельных вычислений. SPIR-V подразумевает выделение отдельной фазы компиляции шейдеров в промежуточное представление, что позволяет создавать фронтэнды для различных высокоуровневых языков. На основе различных высокоуровневых реализаций отдельно генерируется единый промежуточный код, который может использоваться драйверами OpenGL, Vulkan и OpenCL без применения встроенного компилятора шейдеров. В новой версии SPIR-V интегрирована поддержка операций с подгруппами и добавлены расширенные оптимизации в компитятор. Для разбора и преобразования SPIR-V в код на других языках описания шейдеров (GLSL, MSL, HLSL, C++) открыт код инструментария SPIRV-Cross;
- Операции с подгруппами (Subgroup) - предоставляют эффективный механизм для организации работы с параллельно вызываемыми шейдерами, взаимодействующими между собой. Под подгруппой подразумевается набор вычислительных задач, выполняемых на GPU. Для применения предоставлена коллекция различных моделей параллельных вычислений;
- Защищенный контент (Protected content) - возможность ограничения доступа и копирования ресурсов, используемых для рендеринга и отображения, а также возможность организации воспроизведения и отображения защищенного мультимедийного контента;
- 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.
Android Intel Microsoft NVIDIA