В 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. Разработват се реализации на WebGPU за Firefox и Chrome, които са достъпни под формата на отделни библиотеки — Dawn (C++) и 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 предоставя възможност за създаване на сложни 3D проекти за Web, които работят по-добре от отделни програми, използващи директно Vulkan, Metal или Direct3D, но не са свързани с конкретни платформи. WebGPU също така предлага допълнителни възможности при портране на нативни графични програми в форма, способна да работи на базата на уеб технологии, благодарение на компилацията в WebAssembly. Освен 3D графика, WebGPU обхваща и възможностите, свързани с извеждане на изчисления на страната на GPU и изпълнение на шейдъри.

Ключови характеристики на WebGPU:

  • Разделно управление на ресурсите, подготвителните работи и прехвърлянето на команди в GPU (в WebGL един обект отговаряше за всичко наведнъж). Предоставят се три отделни контекста: GPUDevice за създаване на ресурси, като текстури и буфери; GPUCommandEncoder за енкодиране на отделни команди, включително етапи на рендеринг и изчисления; GPUCommandBuffer за прехвърляне в опашката за изпълнение в GPU. Резултатът може да бъде визуализиран в област, свързана с един или повече елементи canvas, или обработен без визуализация (например, при изпълнение на изчислителни задачи). Разделянето на етапите опростява разпределянето на създаването на ресурси и подготвителните операции в различни обработвачи, които могат да се изпълняват в различни нишки.
  • Алтернативен подход при обработка на състояния. В WebGPU се предлагат два обекта — GPURenderPipeline и GPUComputePipeline, които позволяват комбинирането на различни състояния, предварително определени от разработчика, което дава възможност на браузъра да не губи ресурси за допълнителна работа, като прекапмилиране на шейдери. Сред поддържаните състояния: шейдери, подреждане на вершинни буфери и атрибути, подреждане на прикрепени групи, смесване, дълбочина и шаблони, формати на извеждане след рендеринг.
  • Модел на свързване, който до голяма степен напомня наличните в Vulkan средства за групиране на ресурси. За обединяване на ресурси в групи в WebGPU се предоставя обект GPUBindGroup, който по време на запис на команди може да бъде свързан с други подобни обекти за използване в шейдерите. Създаването на подобни групи позволява на драйвера предварително да извърши необходимите подготвителни действия, а на браузъра значително да ускори смяната на привързванията на ресурсите между повикванията за рендеринг. Подреждането на привързванията на ресурсите може да бъде определено предварително с помощта на обекта GPUBindGroupLayout.

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster