Перейти до вмісту

WebGPU

Матеріал з Вікіпедії — вільної енциклопедії.
Логотип WebGPU

WebGPU — прикладний програмний інтерфейс для кросплатформного доступу до графічного процесора з JavaScript, Rust, C++ і C. Він спирається на наявні в системі Vulkan, Metal або Direct3D 12 і призначений для графіки, ігор, а також для обчислень у машинному навчанні. Стандарт має замінити WebGL як основний графічний інтерфейс вебу[1]. Текст веде W3C у статусі кандидата в рекомендації; першу публікацію в описі стандарту датовано 18 травня 2021 року[2].

У JavaScript інтерфейс може надавати браузер або інше середовище, зокрема Node.js і Deno. Rust і C++ мають власні реалізації специфікації. Python, Java і Go підключають її через розширення варіанта для C; для Go існує й окрема реалізація самою мовою Go.

Google Chrome і Microsoft Edge увімкнули WebGPU у квітні 2023 року[1][3]. Safari додав підтримку в червні 2025 року разом із Safari 26[4]. Mozilla Firefox випустив WebGPU у липні 2025 року у Firefox 141[3].

Редактори специфікації — Кай Ніномія (Kai Ninomiya), Брендон Джонс (Brandon Jones) і Джим Бленді (Jim Blandy). Раніше редакторами також були Майлс Максфілд (Myles C. Maxfield), Дмитро Малишев (Dzmitry Malyshau) і Джастін Фан (Justin Fan)[2]. Текст готують робоча й спільнотна групи W3C «GPU for the Web».

Технологія

[ред. | ред. код]

WebGPU малює тривимірну графіку в елементі canvas мови HTML і водночас розрахований на обчислення загального призначення на графічному процесорі[5].

Шейдери описує окрема мова WebGPU Shading Language (WGSL). Її синтаксис близький до Rust. Спершу мову проєктували так, щоб її було легко перекладати на SPIR-V; після зауважень розробку повернули до звичайнішої схеми, подібної до інших шейдерних мов[6]. Компілятор WGSL від Google називається Tint і входить до Dawn, реалізації WebGPU у Chromium[7]. Споріднений компілятор Naga розвивають для потреб бібліотеки wgpu[8].

Реалізації

[ред. | ред. код]

Chrome і Firefox підтримують і WebGPU, і WGSL. Firefox і Deno спираються на бібліотеку wgpu мовою Rust[9]. Safari орієнтується на поточні тексти WebGPU і WGSL[3].

У Chrome 113 початкову підтримку увімкнули для Windows з Direct3D 12, для ChromeOS з Vulkan і для macOS з Metal[1]. На Android той самий інтерфейс увімкнули у версії 121[3].

Для Go в екосистемі GoGPU розвивають реалізацію gogpu/wgpu. За описом проєкту, це інтерфейс самою мовою Go, без CGO, із підтримкою Vulkan, Metal, DirectX 12, OpenGL ES і програмної растеризації на центральному процесорі[10][11].

Історія

[ред. | ред. код]

8 червня 2016 року Google показав робочій групі WebGL доповідь «Explicit web graphics API» і окреслив принципи інтерфейсу, який згодом мав би замінити WebGL; робоча назва тоді була WebGL Next[12].

24 січня 2017 року Khronos зібрав у Ванкувері зустріч без обговорення інтелектуальної власності, приурочену до засідання групи WebGL. Команда Google продемонструвала прототип NXT: новий інтерфейс працював у Chromium поверх OpenGL і окремо поверх OpenGL та Metal, запозичивши ідеї Vulkan, Direct3D 12 і Metal. Представники Apple і Mozilla показали власні прототипи для Safari і Servo; обидва близько повторювали Metal[13].

7 лютого 2017 року група WebKit запропонувала створити спільнотну групу W3C і одночасно опублікувала технічний ескіз під назвою WebGPU, побудований на поняттях Metal[14][15]. Спільнота згодом узяла назву WebGPU як робочу назву майбутнього стандарту, а не лише початкової пропозиції Apple. Саму пропозицію Apple перейменували на WebMetal, щоб розвести два тексти[16][17].

Спільнотну групу «GPU for the Web» відкрито 16 лютого 2017 року. На той момент досліди вели Apple, Google і Mozilla, але до репозиторію пропозицій офіційно подали лише текст Apple[18][19]. 21 березня 2017 року Mozilla подала в репозиторій Khronos пропозицію WebGL Next під назвою Obsidian, ближчу до будови Vulkan[20][21].

1 червня 2018 року команда Chrome оголосила намір реалізувати майбутній стандарт, пославшись на те, що найвищі розбіжності в міжбраузерному узгодженні вже знято[16]. 13 лютого 2020 року Google показав Tint як альтернативу текстовій пропозиції WHLSL; мова, що виросла з цієї лінії, стала WGSL, а Tint лишився компілятором у складі Dawn.

Примітки

[ред. | ред. код]
  1. 1 2 3 Chrome ships WebGPU. Chrome for Developers (англ.). Процитовано 16 жовтня 2026.
  2. 1 2 WebGPU. World Wide Web Consortium (англ.). Процитовано 16 жовтня 2026.
  3. 1 2 3 4 WebGPU Implementation Status. GitHub (англ.). Процитовано 16 жовтня 2026.
  4. ↑ Safari 26.0 Release Notes. Apple Developer (англ.). Процитовано 16 жовтня 2026.
  5. ↑ WebGPU API. MDN Web Docs (англ.). Процитовано 16 жовтня 2026.
  6. ↑ WebGPU Shading Language. GPU for the Web (англ.). Процитовано 16 жовтня 2026.
  7. ↑ tint. dawn.googlesource.com (англ.). Процитовано 16 жовтня 2026.
  8. ↑ wgpu/naga. GitHub (англ.). Процитовано 16 жовтня 2026.
  9. ↑ wgpu. GitHub (англ.). Rust Graphics Mages. Процитовано 16 жовтня 2026.
  10. ↑ GoGPU: A Pure Go Graphics Library for GPU Programming. DEV Community (англ.). Процитовано 16 жовтня 2026.
  11. ↑ gogpu/wgpu: Pure Go WebGPU Implementation. GitHub (англ.). Процитовано 16 жовтня 2026.
  12. ↑ Wallez, Corentin. Explicit web graphics API (англ.). Процитовано 16 жовтня 2026.
  13. ↑ Wallez, Corentin; Ninomiya, Kai. WebGL Next investigations (англ.). Процитовано 16 жовтня 2026.
  14. ↑ Next-generation 3D Graphics on the Web. WebKit (англ.). 7 лютого 2017. Процитовано 16 жовтня 2026.
  15. ↑ Claburn, Thomas (8 лютого 2017). Web-standards-allergic Apple unveils WebGPU, a web graphics standard. The Register (англ.). Процитовано 16 жовтня 2026.
  16. ↑ WebGPU Prototype and Demos. WebKit (англ.). 5 квітня 2017. Процитовано 16 жовтня 2026.
  17. ↑ Jackson, Dean (16 лютого 2017). Welcome and Getting Started. public-gpu (англ.). Процитовано 16 жовтня 2026.
  18. ↑ Jackson, Dean. Add Apple's WebGPU proposal. GitHub (англ.). Процитовано 16 жовтня 2026.
  19. ↑ Malyshau, Dzmitry (21 березня 2017). Defining the Web platform (англ.). Процитовано 16 жовтня 2026.
  20. ↑ Malyshau, Dzmitry. Mozilla's contribution: Obsidian API. GitHub (англ.). Процитовано 16 жовтня 2026.