Вечерните версии на Firefox вече включват поддръжка на WebGPU

В нощ Компилации на Firefox се появи поддръжка на спецификация WebGPU, който предоставя интерфейс за програмиране за обработка на 3D графики и изчисления от страна на GPU, концептуално подобен на API Вулкан, метал и Direct3D 12. Спецификацията се разработва от Mozilla, Google, Apple, Microsoft и членове на общността в работна група, създаден от организацията W3C.

Основната цел на WebGPU е да осигури сигурен, удобен за потребителя, преносим и високопроизводителен интерфейс за програмиране за уеб платформата, за да използва 3D графичните технологии и възможности, предоставени от съвременните системни графични API, като Direct3D 12 на Windows, Metal на macOS и Vulkan на Linux. Концептуално, WebGPU се различава от WebGL почти по същия начин, по който Vulkan се различава от OpenGL, и в същото време не се основава на конкретен графичен API, а е универсален слой, който обикновено използва същите примитиви на ниско ниво, открити във Vulkan, Метал и Direct3D.

WebGPU предоставя на приложенията на JavaScript контрол от по-ниско ниво върху организацията, обработката и предаването на команди към GPU, управление на свързани ресурси, памет, буфери, текстурни обекти и компилирани графични шейдъри. Този подход ви позволява да постигнете по-висока производителност за графични приложения чрез намаляване на режийните разходи и повишаване на ефективността на работа с GPU.

WebGPU прави възможно създаването на пълноценни сложни 3D проекти за мрежата, които работят не по-лошо от самостоятелни програми, които имат директен достъп до Vulkan, Metal или Direct3D, но не са обвързани с конкретни платформи. WebGPU също така предоставя допълнителни възможности при пренасяне на естествени графични програми в уеб активирана форма чрез използването на технологията WebAssembly. В допълнение към 3D графики, WebGPU също покрива възможности, свързани с разтоварване на изчисления към GPU и поддържане на разработката на шейдъри. Шейдъри мога да бъдат създадени в WebGPU Shading Language или посочени в междинния SPIR-V формат и след това преведени в шейдърни езици, поддържани от текущите драйвери.

WebGPU използва отделно управление на ресурси, подготвителна работа и предаване на команди към GPU (в WebGL един обект отговаряше за всичко наведнъж). Предоставени са три отделни контекста:
GPUDevice за създаване на ресурси като текстури и буфери; GPUCommandEncoder за кодиране на отделни команди, включително етапи на изобразяване и изчисление; GPUCommandBuffer да бъде поставен на опашка за изпълнение на GPU. Резултатът може да бъде изобразен в област, свързана с един или повече елементи на платното, или обработен без изход (например при изпълнение на изчислителни задачи). Разделянето на етапите улеснява разделянето на операциите по създаване и подготовка на ресурси в различни манипулатори, които могат да се изпълняват на различни нишки.

Втората разлика между WebGPU и WebGL е различен подход за обработка на състояния. WebGPU предлага два обекта - GPURenderPipeline и GPUComputePipeline, които ви позволяват да комбинирате различни състояния, предварително дефинирани от разработчика, което позволява на браузъра да не хаби ресурси за допълнителна работа, като прекомпилиране на шейдъри. Поддържаните състояния включват: шейдъри, буфер на върхове и оформления на атрибути, оформления на лепкави групи, смесване, дълбочина и шаблони и изходни формати след рендиране.

Третата функция на WebGPU се нарича най-вече модел на обвързване
напомня на инструментите за групиране на ресурси, налични във Vulkan.
За групиране на ресурси заедно, WebGPU предоставя обект GPUBindGroup, който може да бъде свързан с други подобни обекти за използване в шейдъри, докато пишете команди. Създаването на такива групи позволява на драйвера да извърши необходимите подготвителни действия предварително и позволява на браузъра да променя обвързванията на ресурсите между повикванията за теглене много по-бързо. Оформлението на обвързванията на ресурсите може да бъде предварително дефинирано с помощта на обекта GPUBindGroupLayout.

Вечерните версии на Firefox вече включват поддръжка на WebGPU

Във Firefox, за да активирате WebGPU в about:config, има настройка „dom.webgpu.enabled“. Рендирането на CanvasContext също изисква композирането да бъде активирано WebRender („gfx.webrender.all“ в about:config), написан на Rust и възлага операциите по изобразяване на съдържанието на страницата към GPU. Внедряването на WebGPU се основава на кода на проекта
wgpu, написан на Rust и способен да работи върху DX12, Vulkan и Metal API на Linux, Android, Windows и macOS (поддръжката на DX11 и OpenGL ES 3.0 също е в процес на разработка). Успоредно с това Google разработва друга реализация, която е достъпна в Канарски клон Chromium и е активиран с помощта на флага „chrome://flags/#enable-unsafe-webgpu“, но досега работи само на macOS и Windows.

Източник: opennet.ru

Добавяне на нов коментар