У 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 поки не повідомляється. Для реалізації WebGPU, що розвиваються для Firefox і Chrome, доступні у формі окремих бібліотек — 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.

Джерело: opennet.ru

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