Подобрена поддръжка на WebGPU в nightly версии на Firefox

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

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

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

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

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

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

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

Подобрена поддръжка на WebGPU в nightly версии на Firefox

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

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

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