В
Основната цел на 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 използва отделно управление на ресурси, подготвителна работа и предаване на команди към GPU (в WebGL един обект отговаряше за всичко наведнъж). Предоставени са три отделни контекста:
GPUDevice за създаване на ресурси като текстури и буфери; GPUCommandEncoder за кодиране на отделни команди, включително етапи на изобразяване и изчисление; GPUCommandBuffer да бъде поставен на опашка за изпълнение на GPU. Резултатът може да бъде изобразен в област, свързана с един или повече елементи на платното, или обработен без изход (например при изпълнение на изчислителни задачи). Разделянето на етапите улеснява разделянето на операциите по създаване и подготовка на ресурси в различни манипулатори, които могат да се изпълняват на различни нишки.
Втората разлика между WebGPU и WebGL е различен подход за обработка на състояния. WebGPU предлага два обекта - GPURenderPipeline и GPUComputePipeline, които ви позволяват да комбинирате различни състояния, предварително дефинирани от разработчика, което позволява на браузъра да не хаби ресурси за допълнителна работа, като прекомпилиране на шейдъри. Поддържаните състояния включват: шейдъри, буфер на върхове и оформления на атрибути, оформления на лепкави групи, смесване, дълбочина и шаблони и изходни формати след рендиране.
Третата функция на WebGPU се нарича най-вече модел на обвързване
напомня на инструментите за групиране на ресурси, налични във Vulkan.
За групиране на ресурси заедно, WebGPU предоставя обект GPUBindGroup, който може да бъде свързан с други подобни обекти за използване в шейдъри, докато пишете команди. Създаването на такива групи позволява на драйвера да извърши необходимите подготвителни действия предварително и позволява на браузъра да променя обвързванията на ресурсите между повикванията за теглене много по-бързо. Оформлението на обвързванията на ресурсите може да бъде предварително дефинирано с помощта на обекта GPUBindGroupLayout.
Във Firefox, за да активирате WebGPU в about:config, има настройка „dom.webgpu.enabled“. Рендирането на CanvasContext също изисква композирането да бъде активирано
Източник: opennet.ru