W3C представи черновата на стандарта WebGPU

Консорциум W3C представи първоначалните чернови на спецификациите за WebGPU и WebGPU Shading Language (WGSL), които определят API за изпълнение на операции на GPU, като рендеринг и изчисления, както и език за шейдъри за писане на програми, работещи на страната на GPU. концептуално подобен на API Vulkan, Metal и Direct3D 12. Спецификациите са подготвени от работна група, включваща инженери от Mozilla, Google, Apple и Microsoft.

Концептуално WebGPU се различава от WebGL по същия начин, по който графичният API Vulkan се различава от OpenGL, но не е основан на конкретен графичен 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