У Chrome будзе ўключаная падтрымка WebGPU

Кампанія Google абвясціла аб уключэнні па змаўчанні падтрымкі графічнага API WebGPU і мовы шэйдараў WGSL (WebGPU Shading Language) у галінцы Chrome 113, рэліз якой намечаны на 2 траўня. WebGPU дае падобны з ​​Vulkan, Metal і Direct3D 12 праграмны інтэрфейс для выканання аперацый на баку GPU, такіх як рэндэрынгу і вылічэнні, а таксама дазваляе выкарыстоўваць мову шэйдраў для напісання праграм, якія працуюць на баку GPU. Рэалізацыя WebGPU будзе ўключана спачатку толькі ў зборках для ChromeOS, MacOS і Windows. Для Linux і Android падтрымка WebGPU будзе актываваная пазней.

Акрамя Chrome эксперыментальная падтрымка WebGPU тэстуецца з красавіка 2020 гады ў Firefox і з лістапада 2021 гады ў Safari. Для ўключэння WebGPU у Firefox у about:config варта выставіць сцягі dom.webgpu.enabled і gfx.webgpu.force-enabled. Аб планах па ўключэнні WebGPU па змаўчанні ў Firefox і Safari пакуль не паведамляецца. Развіваныя для Firefox і Chrome рэалізацыі WebGPU даступныя ў форме асобных бібліятэк – Dawn (З++) і wgpu (Rust), якія можна выкарыстоўваць для інтэграцыі падтрымкі WebGPU у свае прыкладанні. Таксама вядзецца праца па даданні падтрымкі WebGPU у папулярныя JavaScript-біблітэкі, першапачаткова выкарыстоўвалыя WebGL. Напрыклад, поўная падтрымка WebGPU ужо заяўлена ў Babylon.js, а частковая ў Three.js, PlayCanvas і TensorFlow.js.

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

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