Выпущена информация по интеграции справочной спецификации WebGPU в ночных сборках Firefox, которые теперь предоставляет программный интерфейс для обработки трехмерной графики и вычисления на стороне GPU, концептуально аналогичные Vulkan API, metal и Direct3D 12. Спецификация разрабатывается Mozilla, Google, Apple, Microsoft и представителями сообщества в рабочей группе, созданной организацией W3C.
Ключевой целью WebGPU является создание безопасного, удобного, портативного и высокопроизводительного программного интерфейса. для использования на веб-платформе с технологией 3D-графики и возможностями, предоставляемыми современными API-интерфейсами системной графики, такими как Direct3D 12 в Windows, Metal в macOS и Vulkan в Linux.
Концептуально, WebGPU отличается от WebGL так же, как Vulkan отличается от OpenGL и он не основан на конкретном графическом API, это скорее универсальный уровень, в целом использующий те же низкоуровневые примитивы, которые доступны в Vulkan, Metal и Direct3D.
В Firefox для включения WebGPU предоставляется параметр dom.webgpu.enabled. в about: config. В дополнение к рендерингу CanvasContext также требуется включение системы композиции WebRender ("gfx.webrender.all" в about: config).
Реализация WebGPU основана на коде проекта wgpu, написанном на Rust, и может работать поверх API DX12, Vulkan и Metal в Linux, Android, Windows и macOS (поддержка DX11 и OpenGL ES 3.0 также находится в стадии разработки).
О WebGPU
Веб-графический процессор предоставляет приложениям JavaScript инструменты для управления нижнего уровня об организации обработка и передача команд на GPU, управление связанными ресурсами, памятью, буферами, объектами текстуры и скомпилированными графическими шейдерами. Такой подход будет обеспечивает более высокую производительность графических приложений за счет снижения накладных расходов и повышения эффективности работы с графическим процессором.
Веб-графический процессор позволяет создавать полные сложные 3D-проекты для Интернета они работают не хуже, чем автономные программы, которые напрямую взаимодействуют с Vulkan, Metal или Direct3D, но не привязаны к конкретным платформам.
также предоставляет дополнительные возможности за счет переноса собственных графических программ в форму, которая может функционировать на основе веб-технологий с помощью технологии WebAssembly.
Помимо 3D-графики, WebGPU также охватывает возможности, связанные с отказом от вычислений рядом с графическим процессором. и поддержка разработки шейдеров. Шейдеры могут быть созданы на языке шейдеров WebGPU или указаны в промежуточном формате SPIR-V, а затем переведены на языки шейдеров, поддерживаемые текущими драйверами.
Веб-графический процессор использует раздельное управление ресурсами, подготовительные работы и передачу команд на GPU (в WebGL за все сразу отвечал один объект). Предоставляются три отдельных контекста: GPUDevice для создания ресурсов, таких как текстуры и буферы; GPUCommandEncoder для кодирования отдельных команд, включая этапы рендеринга и вычислений; GPUCommandBuffer поставить в очередь на выполнение на графическом процессоре.
Второе различие между WebGPU и WebGL - это другой подход к обработке состояний. В WebGPU предлагается два объекта: GPURenderPipeline и GPUComputePipeline, которые позволяют комбинировать несколько состояний, предопределенных разработчиком, что позволяет браузеру не тратить ресурсы на дополнительную работу, такую как перекомпиляция шейдеров. К поддерживаемым состояниям относятся: шейдеры, буферы вершин и макеты атрибутов, макеты присоединенных групп, смешивание, глубина и шаблоны, форматы вывода после рендеринга.
Третья особенность WebGPU - это модель привязки., что во многом напоминает средства объединения ресурсов, имеющиеся в Vulkan. Чтобы сгруппировать ресурсы в группы, WebGPU предоставляет объект GPUBindGroup, который путем ввода команд может быть связан с другими подобными объектами для использования в шейдерах.
Создание таких групп позволяет драйверу заранее выполнить необходимые подготовительные действия, а браузер позволяет ему гораздо быстрее переключать ссылки ресурсов между вызовами по запросу.
источник: https://hacks.mozilla.org/