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

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

17.01.20
Консорциум Khronos, занимающийся разработкой графических стандартов, опубликовал спецификацию Vulkan 1.2, определяющую API для доступа к графическим и вычислительным возможностям GPU. Новая спецификация вобрала в себя накопившиеся за два года исправления и расширения. Драйверы с поддержкой новой версии 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.
Основные новшества:
  • Доведена до готовности к повсеместному применению реализация языка программирования шейдеров 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
  • . 0_1579153885.jpg
  • Обновлена спецификация SPIR-V 1.5, определяющая универсальное для всех платформ промежуточное представление шейдеров, которое может применяться как для графики, так и для параллельных вычислений. SPIR-V подразумевает выделение отдельной фазы компиляции шейдеров в промежуточное представление, что позволяет создавать фронтэнды для различных высокоуровневых языков. На основе различных высокоуровневых реализаций отдельно генерируется единый промежуточный код, который может использоваться драйверами OpenGL, Vulkan и OpenCL без применения встроенного компилятора шейдеров. 0_1579157705.png
  • В основной API Vulkan включены 23 расширения, позволившие увеличить производительность, повысить качество визуализации и упростить разработку. Среди добавленных расширений:
    • Хронологические семафоры (Timeline semaphore), унифицирующие синхронизации c хостом и очередями устройств (позволяют обойтись одним примитивом для всенаправленной синхронизации между устройством и хостом, без применения раздельных примитивов VkFence и VkSemaphore). Новые семафоры представлены монотонно увеличивающимся 64-разрядным значением, которое можно отслеживать и обновлять в нескольких потоках
    • . 0_1579155922.png
    • Возможность использования в шейдерах числовых типов с пониженной точностью;
    • Совместимый с HLSL вариант раскладки памяти;
    • Несвязанные ресурcы (bindless), снимающие ограничение на число доступных для шейдеров ресурсов за счёт использования общего виртуального пространства системной памяти и памяти GPU;
    • Формальная модель памяти, определяющая как параллельно выполняемые потоки могут обращаться к совместно используемым данным и операциям синхронизации;
    • Индексация дескрипторов для повторного использования дескрипторов раскладок в нескольких шейдерах;
    • Буферные ссылки.
  • Полный список добавленных расширений:
    • VK_KHR_8bit_storage
    • VK_KHR_buffer_device_address
    • VK_KHR_create_renderpass2
    • VK_KHR_depth_stencil_resolve
    • VK_KHR_draw_indirect_count
    • VK_KHR_driver_properties
    • VK_KHR_image_format_list
    • VK_KHR_imageless_framebuffer
    • VK_KHR_sampler_mirror_clamp_to_edge
    • VK_KHR_separate_depth_stencil_layouts
    • VK_KHR_shader_atomic_int64
    • VK_KHR_shader_float16_int8
    • VK_KHR_shader_float_controls
    • VK_KHR_shader_subgroup_extended_types
    • VK_KHR_spirv_1_4
    • VK_KHR_timeline_semaphore
    • VK_KHR_uniform_buffer_standard_layout
    • VK_KHR_vulkan_memory_model
    • VK_EXT_descriptor_indexing
    • VK_EXT_host_query_reset
    • VK_EXT_sampler_filter_minmax
    • VK_EXT_scalar_block_layout
    • VK_EXT_separate_stencil_usage
    • VK_EXT_shader_viewport_index_layer
  • Добавлено более 50 новых структур и 13 функций;
  • Подготовлены сокращённые варианты спецификации для типовых целевых платформ, упрощающие работу на платформах, для которых пока не поддерживаются все расширения, и позволяющие обойтись без выборочной активации базовых возможностей API Vulkan.
  • Продолжена работа над проектом по обеспечению переносимости с другими графическими 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). Для улучшения совместимости с 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 реализованы специфичные возможности HLSL.
Из планов на будущее отмечается развитие расширений для машинного обучения, трассировки лучей, кодирования и декодирования видео, поддержки 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
 
Назад
Сверху Снизу