W3C представив чорновий варіант стандарту WebGPU

Консорціум W3C представив перші чернові варіанти специфікацій WebGPU та WebGPU Shading Language (WGSL), що визначають API для виконання операцій на GPU, таких як рендеринг та обчислення, а також мову шейдрів для написання програм, що працюють на стороні GPU. концептуально схожий з API Vulkan, Metal та Direct3D 12. Специфікації підготовлені робочою групою, до якої увійшли інженери з Mozilla, Google, Apple та Microsoft.

Концептуально WebGPU відрізняється від WebGL приблизно так само, як графічний API Vulkan відрізняється від OpenGL, але при цьому не ґрунтується на конкретному графічному 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

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