У начныя зборкі Firefox дададзена падтрымка WebGPU

В начных зборках Firefox з'явілася падтрымка спецыфікацыі WebGPU, якая прадстаўляе праграмны інтэрфейс для апрацоўкі 3D-графікі і вылічэнняў на баку GPU, канцэптуальна падобны з ​​API Vulkan, метал и 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

Дадаць каментар