Mozilla одлучи да овозможи поддршка за WebGPU API и WGSL (WebGPU Shading Language) во Firefox. За платформата 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 обезбедува сличен API како Vulkan, Metal и Direct3D 12 за извршување операции на страната на графичкиот процесор. Покрај 3D графиката, WebGPU опфаќа и можности поврзани со префрлање на пресметките на страната на графичкиот процесор и извршување на шејдери. Концептуално, WebGPU се разликува од старата WebGL спецификација на сличен начин како што Vulkan графичкиот API се разликува од OpenGL. Во исто време, WebGPU не е базиран на специфичен графички API, туку е универзален слој кој ги користи истите примитиви на ниско ниво кои се достапни во Vulkan, Metal и Direct3D.
WebGPU им овозможува на JavaScript апликациите да ја контролираат организацијата, обработката и преносот на команди до графичкиот процесор и да управуваат со поврзаните ресурси, меморијата, баферите, текстурните објекти и компајлираните графички шејдери. Овој пристап овозможува повисоки перформанси на графичките апликации со намалување на општите трошоци и зголемување на ефикасноста на работата со графичкиот процесор.
Со WebGPU, можете да креирате сложени 3D проекти кои не се поврзани со платформа, агностички настроени и кои работат исто толку добро како самостојни програми кои директно користат Vulkan, Metal или Direct3D. WebGPU исто така нуди дополнителни можности за пренесување на нативни графички програми во форма што може да се извршува во прелистувачи, благодарение на компилацијата во WebAssembly.
Клучни карактеристики на WebGPU и разлики од WebGL:
- Одделно управување со ресурсите, подготвителна работа и пренос на команди до графичкиот процесор (во WebGL еден објект беше одговорен за сè одеднаш). Обезбедени се три посебни контексти: GPUУред за создавање ресурси како што се текстури и бафери; GPUCommandEncoder за кодирање на поединечни команди, вклучително и фази на рендерирање и пресметување; GPUCommandBuffer да се чека на ред за извршување на графичкиот процесор. Резултатот може да се прикаже во област поврзана со еден или повеќе елементи на платно или да се обработи без излез (на пример, кога се извршуваат пресметковни задачи). Одвојувањето на фазите го олеснува одделувањето на операциите за создавање и подготовка на ресурси во различни управувачи кои можат да работат на различни нишки.
- Поинаков пристап кон состојбите за обработка. WebGPU нуди два објекта - GPURenderPipeline и GPUComputePipeline, кои ви дозволуваат да комбинирате различни состојби однапред дефинирани од развивачот, што му овозможува на прелистувачот да не троши ресурси за дополнителна работа, како што е повторно компајлирање шејдери. Поддржани состојби вклучуваат: шејдери, распоред на теме бафер и атрибути, распоред на лепливи групи, мешање, длабочина и обрасци и излезни формати по рендерирање.
- Обврзувачки модел многу сличен на карактеристиките за групирање ресурси на Vulkan. За да се групираат ресурсите заедно, WebGPU обезбедува објект GPUBindGroup, кој може да се поврзе со други слични објекти за употреба во шејдери додека пишувате команди. Создавањето такви групи му овозможува на возачот однапред да ги изврши потребните подготвителни дејства и му овозможува на прелистувачот многу побрзо да ги менува врските со ресурсите помеѓу повиците за извлекување. Распоредот на врските за ресурси може да се предефинира со користење на објектот GPUBindGroupLayout.
Извор: opennet.ru
