В
Ключавой задачай 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 ужываецца паасобнае кіраванне рэсурсамі, падрыхтоўчымі працамі і перадачай каманд у GPU (у WebGL адзін аб'ект адказваў за ўсё зараз). Даюцца тры асобныя кантэксты:
GPUDevice для стварэння рэсурсаў, такіх як тэкстуры і буферы; GPUCommandEncoder для кадавання асобных каманд, уключаючы стадыі рэндэрынгу і вылічэнні; GPUCommandBuffer для перадачы ў чаргу на выкананне ў GPU. Вынік можа быць адмаляваны ў вобласці, злучанай з адным ці некалькімі элементамі canvas, ці апрацаваны без высновы (напрыклад, пры запуску вылічальных задач). Падзел стадый спрашчае разнясенне стварэння рэсурсаў і падрыхтоўчыя аперацыі ў розныя апрацоўшчыкі, якія могуць выконвацца ў розных плынях.
Другім адрозненнем WebGPU ад WebGL з'яўляецца іншы падыход для апрацоўкі станаў. У WebGPU прапануецца два аб'екты – GPURenderPipeline і GPUComputePipeline, якія дазваляюць камбінаваць розныя станы, загадзя вызначаныя распрацоўшчыкам, што дае магчымасць браўзэру не марнаваць рэсурсы на правядзенне дадатковай працы, такі як перакампіляванне шэйдараў. Сярод падтрымліваемых станаў: шэйдары, раскладкі вяршынных буфераў і атрыбутаў, раскладкі прымацаваных груп, змешванне, глыбіня і шаблоны, фарматы вываду пасля рэндэрынгу.
Трэцяй асаблівасцю WebGPU называецца мадэль звязвання, шмат у чым
якая нагадвае прысутныя ў Vulkan сродкі групоўкі рэсурсаў.
Для аб'яднання рэсурсаў у групы ў WebGPU падаецца аб'ект GPUBindGroup, які падчас запісу каманд можна звязаць з іншымі такімі ж аб'ектамі для выкарыстання ў шэйдарах. Стварэнне падобных груп дае магчымасць драйверу загадзя выканаць неабходныя падрыхтоўчыя дзеянні, а браўзэру дазваляе значна хутчэй мяняць прывязкі рэсурсаў паміж выклікамі адмалёўкі. Раскладка прывязак рэсурсаў можа быць вызначана загадзя пры дапамозе аб'екта GPUBindGroupLayout.
У Firefox для ўключэння WebGPU у about:config прадугледжана налада «dom.webgpu.enabled». Для адмалёўкі CanvasContext таксама патрабуецца ўключэнне сістэмы кампазітынгу
Крыніца: opennet.ru