Noktaj konstruoj de Firefox nun inkluzivas WebGPU-subtenon

В nokto Firefox konstruas aperis specifsubteno WebGPU, kiu disponigas programan interfacon por 3D grafika pretigo kaj GPU-flanka komputado, koncipe simila al la API vulkano, metalo и Rekta3D 12. La specifo estas evoluigita fare de Mozilla, Google, Apple, Mikrosofto kaj komunumanoj en laborgrupo, kreita de la organizo W3C.

La ŝlosila celo de WebGPU estas disponigi sekuran, uzant-amika, porteblan kaj alt-efikecan programan interfacon por la Reta platformo por utiligi la 3D-grafikajn teknologiojn kaj kapablojn provizitajn de modernaj sistemaj grafikaj APIoj, kiel ekzemple Direct3D 12 sur Vindozo, Metalo. en macOS, kaj Vulkan en Linukso. Koncipe, WebGPU diferencas de WebGL en la sama maniero kiel Vulkan diferencas de OpenGL, kaj samtempe ĝi ne estas bazita sur specifa grafika API, sed estas universala tavolo kiu ĝenerale uzas la samajn malaltnivelajn primitivaĵojn trovitajn en Vulkan, Metalo kaj Direct3D.

WebGPU provizas JavaScript-aplikojn per malsupra-nivela kontrolo de la organizo, pretigo kaj dissendo de komandoj al la GPU, administrante rilatajn resursojn, memoron, bufrojn, teksturajn objektojn kaj kompilitajn grafikombrilojn. Ĉi tiu aliro permesas vin atingi pli altan rendimenton por grafikaj aplikoj reduktante superkostojn kaj pliigante la efikecon labori kun la GPU.

WebGPU ebligas krei plenrajtajn kompleksajn 3D-projektojn por la Reto, kiuj funkcias ne pli malbone ol memstaraj programoj, kiuj rekte aliras Vulkan, Metalon aŭ Direct3D, sed ne estas ligitaj al specifaj platformoj. WebGPU ankaŭ disponigas kromajn kapablojn dum portado de indiĝenaj grafikaj programoj en ret-ebligitan formon per la uzo de WebAssembly-teknologio. Krom 3D-grafikaĵoj, WebGPU ankaŭ kovras kapablojn rilatajn al malŝarĝado de kalkuloj al la GPU kaj subtenado de ombradisvolviĝo. Ombriloj eble esti kreita en la WebGPU Shading Language aŭ specifita en la meza SPIR-V-formato, kaj poste tradukita al shader-lingvoj subtenataj de nunaj ŝoforoj.

WebGPU uzas apartan administradon de rimedoj, preparan laboron kaj transdonon de komandoj al la GPU (en WebGL, unu objekto respondecis pri ĉio samtempe). Tri apartaj kuntekstoj estas disponigitaj:
GPUAparato por krei rimedojn kiel teksturoj kaj bufroj; GPUCommandEncoder por kodi individuajn komandojn, inkluzive de bildigo kaj komputado-etapoj; GPUCommandBuffer vidos por ekzekuto sur la GPU. La rezulto povas esti prezentita en areo asociita kun unu aŭ pluraj kanvaselementoj, aŭ prilaborita sen eligo (ekzemple, kiam oni rulas komputajn taskojn). Apartigi la stadiojn plifaciligas disigi operaciojn pri kreado kaj preparado de rimedoj en malsamaj prizorgantoj, kiuj povas funkcii per malsamaj fadenoj.

La dua diferenco inter WebGPU kaj WebGL estas malsama aliro al pritraktado de ŝtatoj. WebGPU ofertas du objektojn - GPURenderPipeline kaj GPUComputePipeline, kiuj ebligas al vi kombini diversajn statojn antaŭdifinitajn de la programisto, kio permesas al la retumilo ne malŝpari rimedojn por plia laboro, kiel rekompili ombrantojn. Subtenataj ŝtatoj inkluzivas: nuanciloj, vertica bufro kaj atributaj aranĝoj, gluiĝemaj grupaj aranĝoj, miksado, profundo kaj ŝablonoj, kaj post-bildaj eligoformatoj.

La tria trajto de WebGPU estas nomita la biliga modelo, plejparte
rememoriga pri la iloj pri grupigo de rimedoj ĉeestantaj en Vulkan.
Por grupigi rimedojn, WebGPU disponigas GPUBindGroup-objekton, kiu povas esti asociita kun aliaj similaj objektoj por uzo en ombriloj dum skribado de komandoj. Krei tiajn grupojn permesas al la ŝoforo plenumi la necesajn preparajn agojn anticipe, kaj permesas al la retumilo ŝanĝi rimedajn ligojn inter remizovokoj multe pli rapide. La aranĝo de rimedligoj povas esti antaŭdifinita uzante la objekton GPUBindGroupLayout.

Noktaj konstruoj de Firefox nun inkluzivas WebGPU-subtenon

En Fajrovulpo, por ebligi WebGPU en about:config, ekzistas agordo "dom.webgpu.enabled". CanvasContext-bildigo ankaŭ postulas komponadon esti ebligita Retejo ("gfx.webrender.all" en about:config), skribita en Rust kaj subkontraktado de paĝenhavaj bildigaj operacioj al la GPU. WebGPU-efektivigo baziĝas sur projektkodo
wgpu, skribita en Rust kaj kapabla funkcii sur la DX12, Vulkan kaj Metal API-oj en Linukso, Android, Vindozo kaj macOS (DX11 kaj OpenGL ES 3.0-subteno estas ankaŭ en evoluo). Paralele, Guglo disvolvas alian efektivigon, kiu estas havebla en Kanaria branĉo Chromium kaj estas ebligita per la flago "chrome://flags/#enable-unsafe-webgpu", sed ĝis nun funkcias nur ĉe macOS kaj Vindozo.

fonto: opennet.ru

Aldoni komenton