Кампанія Mozilla прыняла рашэнне актываваць у Firefox падтрымку API WebGPU і мовы шэйдараў WGSL (WebGPU Shading Language). Для платформы Windows падтрымка WebGPU будзе ўключаная па змаўчанні ў выпуску Firefox 141, вызначаным на 22 ліпеня. Затым на працягу некалькіх месяцаў падтрымку WebGPU плануюць актываваць у зборках для Linux и macOS, а праз некаторы час і ў версіі для платформы Android. Для ручнога ўключэння WebGPU можна выкарыстоўваць параметры "dom.webgpu.enabled" і "gfx.webrender.all" на старонцы about:config.
У Chrome падтрымка WebGPU была прапанавана па змаўчанні ў версіі 113, сфармаванай у траўні 2023 гады. У Safari падтрымку WebGPU плануюць уключыць па змаўчанні гэтай увосень (эксперыментальная падтрымка даступная з лістапада 2021 гады). У Firefox эксперыментальная падтрымка WebGPU прысутнічала з 2020 гады, але была ўключаная па змаўчанні толькі ў начных зборках Firefox. Рэалізацыя WebGPU у Firefox заснавана на кодзе праекта WGPU, напісанага на мове Rust і здольнага працаваць па-над графічнымі API Direct3D 12, Vulkan, OpenGL і Metal.
WebGPU дае падобны з Vulkan, Metal і Direct3D 12 праграмны інтэрфейс для выканання аперацый на баку GPU. Акрамя 3D-графікі WebGPU ахоплівае і магчымасці, звязаныя з вынасам вылічэнняў на бок GPU і выкананнем шэйдараў. Канцэптуальна WebGPU адрозніваецца ад старой спецыфікацыі WebGL прыкладна гэтак жа, як графічны API Vulkan адрозніваецца ад OpenGL. Пры гэтым WebGPU не засноўваецца на пэўным графічным API, а ўяўляе сабой універсальную праслойку, якая выкарыстоўвае тыя ж нізкаўзроўневыя прымітывы, што маюцца ў Vulkan, Metal і Direct3D.
WebGPU дае магчымасць прыкладанням на мове JavaScript кантраляваць арганізацыю, апрацоўку і перадачу каманд да GPU, кіраваць звязанымі рэсурсамі, памяццю, буферамі, аб'ектамі тэкстур і скампіляванымі графічнымі шэйдарамі.
Пры дапамозе WebGPU можна ствараць не прывязаныя да пэўных платформаў складаныя 3D-праекты, якія працуюць не горш, чым адасобленыя праграмы, напроста выкарыстоўвалыя Vulkan, Metal або Direct3D. WebGPU таксама дае дадатковыя магчымасці для партавання натыўных графічных праграм у форму, здольную працаваць у браўзэрах, дзякуючы кампіляцыі ў WebAssembly.
Ключавыя асаблівасці WebGPU і адрозненні ад WebGL:
- Паасобнае кіраванне рэсурсамі, падрыхтоўчымі працамі і перадачай каманд у GPU (у WebGL адзін аб'ект адказваў за ўсё зараз). Прадастаўляецца тры асобныя кантэксты: GPUDevice для стварэння рэсурсаў, такіх як тэкстуры і буферы; GPUCommandEncoder для кадавання асобных каманд, уключаючы стадыі рэндэрынгу і вылічэнні; GPUCommandBuffer для перадачы ў чаргу на выкананне ў GPU. Вынік можа быць адмаляваны ў вобласці, злучанай з адным ці некалькімі элементамі canvas, ці апрацаваны без высновы (напрыклад, пры запуску вылічальных задач). Падзел стадый спрашчае разнясенне стварэння рэсурсаў і падрыхтоўчыя аперацыі ў розныя апрацоўшчыкі, якія могуць выконвацца ў розных плынях.
- Іншы падыход пры апрацоўцы станаў. У WebGPU прапануецца два аб'екты – GPURenderPipeline і GPUComputePipeline, якія дазваляюць камбінаваць розныя станы, загадзя вызначаныя распрацоўшчыкам, што дае магчымасць браўзэру не марнаваць рэсурсы на правядзенне дадатковай працы, такі як перакампіляванне шэйдараў. Сярод падтрымліваемых станаў: шэйдары, раскладкі вяршынных буфераў і атрыбутаў, раскладкі прымацаваных груп, змешванне, глыбіня і шаблоны, фарматы вываду пасля рэндэрынгу.
- Мадэль звязвання, шмат у чым якая нагадвае прысутныя ў Vulkan сродкі групоўкі рэсурсаў. Для аб'яднання рэсурсаў у групы ў WebGPU падаецца аб'ект GPUBindGroup, які падчас запісу каманд можна звязаць з іншымі такімі ж аб'ектамі для выкарыстання ў шэйдарах. Стварэнне падобных груп дае магчымасць драйверу загадзя выканаць неабходныя падрыхтоўчыя дзеянні, а браўзэру дазваляе значна хутчэй мяняць прывязкі рэсурсаў паміж выклікамі адмалёўкі. Раскладка прывязак рэсурсаў можа быць вызначана загадзя пры дапамозе аб'екта GPUBindGroupLayout.
Крыніца: opennet.ru
