Публикувана информация за интегриране на спецификацията за помощ на WebGPU във Firefox всяка вечер, която сега осигурява интерфейс за програмиране за обработка на 3D графики и изчисления от страна на GPU, концептуално подобни на API на Vulkan, метал и Direct3D 12. Спецификацията се разработва от Mozilla, Google, Apple, Microsoft и представители на общността в работна група, създадена от организацията W3C.
Основната цел на WebGPU е да създаде сигурен, удобен, преносим и високопроизводителен софтуерен интерфейс за използване в уеб платформата с 3D графична технология и възможности, предоставени от съвременните системни графични API, като Direct3D 12 за Windows, Metal за macOS и Vulkan за Linux.
Концептуално, WebGPU се различава от WebGL по същия начин, по който Vulkan се различава от OpenGL и не се основава на конкретен графичен API, а по-скоро е универсален слой, като цяло използва същите примитиви на ниско ниво, които се предлагат във Vulkan, Metal и Direct3D.
Във Firefox се предоставя настройка "dom.webgpu.enabled", за да се активира WebGPU в около: config. В допълнение към изобразяването на CanvasContext той също така изисква включването на системата за композиция WebRender ("gfx.webrender.all" в about: config).
Реализацията на WebGPU се основава на кода на проекта wgpu, написан на Rust, и може да работи върху API на DX12, Vulkan и Metal на Linux, Android, Windows и macOS (поддръжката на DX11 и OpenGL ES 3.0 също е в процес на разработка).
За WebGPU
WebGPU предоставя на JavaScript приложения с инструменти за контрол на по-ниско ниво за организацията, обработка и предаване на команди към графичния процесор, управление на свързани ресурси, памет, буфери, текстурни обекти и компилирани графични шейдъри. Този подход ще го направи позволява графични приложения с по-висока производителност чрез намаляване на режийните разходи и увеличаване на ефективността при работа с графичния процесор.
WebGPU дава възможност за създаване на цялостни сложни 3D проекти за мрежата те не се представят по-зле от самостоятелните програми, които комуникират директно с Vulkan, Metal или Direct3D, но не са обвързани с конкретни платформи.
също предоставя допълнителни възможности чрез пренасяне на собствени графични програми до форма, която може да функционира на базата на уеб-базирани технологии чрез използване на технологията WebAssembly.
В допълнение към 3D графиката, WebGPU също така обхваща възможностите, свързани с елиминирането на изчисленията до GPU и подкрепа за разработване на шейдър. Шейдърите могат да бъдат създадени на езика на шейдърите WebGPU или да бъдат посочени в междинния формат SPIR-V и след това да бъдат преведени на шейдър езици, поддържани от текущите драйвери.
WebGPU използва отделно управление на ресурсите, подготвителна работа и прехвърляне на команди към GPU (в WebGL един обект е отговорен за всичко наведнъж). Осигурени са три отделни контекста: GPUDevice за създаване на ресурси като текстури и буфери; GPUCommandEncoder за кодиране на отделни команди, включително етапи на изобразяване и изчисление; GPUCommandBuffer за опашка за изпълнение на GPU.
Втората разлика между WebGPU и WebGL е различният подход към обработката на състоянията. В WebGPU са предложени два обекта: GPURenderPipeline и GPUComputePipeline, които позволяват комбиниране на няколко състояния, предварително дефинирани от разработчика, което позволява на браузъра да не губи ресурси за допълнителна работа, като прекомпилиране на шейдъри. Поддържаните състояния включват: шейдъри, буфери на върхове и оформления на атрибути, прикачени групови оформления, смесване, дълбочина и модели, изходни формати след изобразяване.
Третата характеристика на WebGPU е моделът на обвързване, което в много отношения прилича на средствата за обединяване на ресурси, налични във Vulkan. За да групира ресурси в групи, WebGPU предоставя обект GPUBindGroup, който чрез въвеждане на команди може да бъде свързан с други подобни обекти за използване в шейдъри.
Създаването на такива групи позволява на водача да извърши необходимите подготвителни действия предварително, а браузърът му позволява да превключва много по-бързо ресурсните връзки между извикващите повиквания.
Fuente: https://hacks.mozilla.org/