В Chrome будет включена поддержка WebGPU

Компания Google объявила о включении по умолчанию поддержки графического API WebGPU и языка шейдеров WGSL (WebGPU Shading Language) в ветке Chrome 113, релиз которой намечен на 2 мая. WebGPU предоставляет схожий с Vulkan, Metal и Direct3D 12 программный интерфейс для выполнения операций на стороне GPU, таких как рендеринг и вычисления, а также позволяет использовать язык шейдров для написания программ, работающих на стороне GPU. Реализация WebGPU будет включена вначале только в сборках для ChromeOS, macOS и Windows. Для Linux и Android поддержка WebGPU будет активирована позднее.

Кроме Chrome экспериментальная поддержка WebGPU тестируется с апреля 2020 года в Firefox и с ноября 2021 года в Safari. Для включения WebGPU в Firefox в about: config следует выставить флаги dom.webgpu.enabled и gfx.webgpu.force-enabled. О планах по включению WebGPU по умолчанию в Firefox и Safari пока не сообщается. Развиваемые для Firefox и Chrome реализации WebGPU доступны в форме отдельных библиотек — Dawn (С++) и wgpu (Rust), которые можно использовать для интеграции поддержки WebGPU в свои приложения. Также ведётся работа по добавлению поддержки WebGPU в популярные JavaScript-библитеки, изначально использующие WebGL. Например, полная поддержка WebGPU уже заявлена в Babylon.js, а частичная в Three.js, PlayCanvas и TensorFlow.js.

Концептуально WebGPU отличается от WebGL примерно так же, как графический API Vulkan отличается от OpenGL, но при этом WebGPU не основывается на конкретном графическом API, а представляет собой универсальную прослойку, использующую те же низкоуровневые примитивы, что имеются в Vulkan, Metal и Direct3D. WebGPU предоставляет приложениям на JavaScript средства для низкоуровневого контроля за организацией, обработкой и передачей команд к GPU, управления связанными ресурсами, памятью, буферами, объектами текстур и скомпилированными графическими шейдерами. Подобный подход позволяет добиться более высокой производительности графических приложений за счёт снижения накладных расходов и повышения эффективности работы с GPU.

WebGPU даёт возможность создавать для Web сложные 3D-проекты, работающие не хуже, чем обособленные программы, напрямую использующие Vulkan, Metal или Direct3D, но не привязанные к конкретным платформам. WebGPU также предоставляет дополнительные возможности при портировании нативных графических программ в форму, способную работать на базе web-технологий, благодаря компиляции в WebAssembly. Кроме 3D-графики WebGPU охватывает и возможности, связанные с выносом вычислений на сторону GPU и выполнением шейдеров.

Ключевые особенности WebGPU:

  • Раздельное управление ресурсами, подготовительными работами и передачей команд в GPU (в WebGL один объект отвечал за всё разом). Предоставляется три отдельных контекста: GPUDevice для создания ресурсов, таких как текстуры и буферы; GPUCommandEncoder для кодирования отдельных команд, включая стадии рендеринга и вычисления; GPUCommandBuffer для передачи в очередь на выполнение в GPU. Результат может быть отрисован в области, связанной с одним или несколькими элементами canvas, или обработан без вывода (например, при запуске вычислительных задач). Разделение стадий упрощает разнесение создания ресурсов и подготовительные операции в разные обработчики, которые могут выполняться в разных потоках.

  • Иной подход при обработке состояний. В WebGPU предлагается два объекта — GPURenderPipeline и GPUComputePipeline, позволяющих комбинировать различные состояния, заранее определённые разработчиком, что даёт возможность браузеру не тратить ресурсы на проведение дополнительной работы, такой как перекомпиляция шейдеров. Среди поддерживаемых состояний: шейдеры, раскладки вершинных буферов и атрибутов, раскладки прикреплённых групп, смешивание, глубина и шаблоны, форматы вывода после рендеринга.

  • Модель связывания, во многом напоминающая присутствующие в Vulkan средства группировки ресурсов. Для объединения ресурсов в группы в WebGPU предоставляется объект GPUBindGroup, который во время записи команд можно связать с другими такими же объектами для использования в шейдерах. Создание подобных групп даёт возможность драйверу заранее выполнить необходимые подготовительные действия, а браузеру позволяет значительно быстрее менять привязки ресурсов между вызовами отрисовки. Раскладка привязок ресурсов может быть определена заранее при помощи объекта GPUBindGroupLayout.



Источник: http://www.opennet.ru/opennews/art.shtml? num=58929

©  OpenNet