У нічні збірки Firefox додано підтримку WebGPU

В нічних збірках Firefox з'явилася підтримка специфікації WebGPU, що надає програмний інтерфейс для обробки 3D-графіки та обчислень на стороні GPU, концептуально схожий з API Vulkan, Metal и Direct3D 12. Специфікація розвивається Mozilla, Google, Apple, Microsoft та представниками спільноти в робочій групі, Створена при організації W3C.

Ключовим завданням WebGPU є створення безпечного, зручного, переносного та високопродуктивного програмного інтерфейсу для використання у Web-платформі технологій та можливостей 3D-графіки, що надаються сучасними системними графічними API, такими як Direct3D 12 у Windows, Metal у macOS та Vulkan у Linux. Концептуально WebGPU відрізняється від WebGL приблизно так само, як Vulkan відрізняється від OpenGL, і при цьому не ґрунтується на конкретному графічному API, а являє собою універсальний прошарок, що у загальному вигляді використовує ті ж низькорівневі примітиви, що є в Vulkan, Metal і Direct3D.

WebGPU надає додаткам на JavaScript засоби для більш низькорівневого контролю за організацією, обробкою та передачею команд до GPU, управління пов'язаними ресурсами, пам'яттю, буферами, об'єктами текстур та скомпільованими графічними шейдерами. Подібний підхід дозволяє досягти вищої продуктивності графічних додатків за рахунок зниження накладних витрат та підвищення ефективності роботи з GPU.

WebGPU дає можливість створювати для Web повноцінні складні 3D-проекти, що працюють не гірше, ніж відокремлені програми, які безпосередньо звертаються з Vulkan, Metal або Direct3D, але не прив'язані до конкретних платформ. WebGPU також надає додаткові можливості портування нативних графічних програм у форму, здатну працювати на базі web-технологій, завдяки застосуванню технології WebAssembly. Крім 3D-графіки WebGPU охоплює й можливості, пов'язані з виносом обчислень на бік GPU та підтримкою розробки шейдерів. Шейдери можуть створюватись на мові WebGPU Shading Language або задаватися у проміжному форматі SPIR-V, після чого транслюватись у мови шейдерів, що підтримуються поточними драйверами.

У WebGPU застосовується роздільне управління ресурсами, підготовчими роботами та передачею команд у GPU (у WebGL один об'єкт відповідав за все разом). Надається три окремі контексти:
GPUDevice для створення ресурсів, таких як текстури та буфери; GPUCommandEncoder для кодування окремих команд, включаючи стадії рендерингу та обчислення; GPUCommandBuffer для передачі в чергу на виконання в GPU. Результат може бути змальований в області, пов'язаної з одним або декількома елементами canvas, або оброблений без виводу (наприклад, при запуску обчислювальних завдань). Поділ стадій спрощує рознесення створення ресурсів та підготовчі операції у різні обробники, які можуть виконуватись у різних потоках.

Другою відмінністю WebGPU від WebGL є інший підхід обробки станів. WebGPU пропонує два об'єкти - GPURenderPipeline і GPUComputePipeline, що дозволяють комбінувати різні стани, заздалегідь визначені розробником, що дає можливість браузеру не витрачати ресурси на проведення додаткової роботи, такої як перекомпіляція шейдерів. Серед станів, що підтримуються: шейдери, розкладки вершинних буферів і атрибутів, розкладки прикріплених груп, змішування, глибина і шаблони, формати виведення після рендерингу.

Третьою особливістю WebGPU називається модель зв'язування, багато в чому
що нагадує присутні у Vulkan засоби угруповання ресурсів.
Для об'єднання ресурсів у групи WebGPU надається об'єкт GPUBindGroup, який під час запису команд можна пов'язати з іншими такими ж об'єктами для використання в шейдерах. Створення подібних груп дозволяє драйверу заздалегідь виконати необхідні підготовчі дії, а браузеру дозволяє значно швидше змінювати прив'язки ресурсів між викликами малювання. Розкладку прив'язок ресурсів можна визначити заздалегідь за допомогою об'єкта GPUBindGroupLayout.

У нічні збірки Firefox додано підтримку WebGPU

У Firefox для включення WebGPU в about:config передбачено налаштування «dom.webgpu.enabled». Для відтворення CanvasContext також потрібне включення системи композитингу WebRender («gfx.webrender.all» в about:config), написаної на мові Rust і операції відображення вмісту сторінки, що виносить на бік GPU. Реалізація WebGPU базується на коді проекту
wgpu, написаного на мові Rust і здатного працювати поверх API DX12, Vulkan та Metal у Linux, Android, Windows та macOS (у розробці також знаходиться підтримка DX11 та OpenGL ES 3.0). Паралельно Google розвивається інша реалізація, яка доступна в Canary-гілки Chromium і включається за допомогою прапора «chrome://flags/#enable-unsafe-webgpu», але працює поки що тільки в macOS та Windows.

Джерело: opennet.ru

Додати коментар або відгук