W3C przedstawił roboczą wersję standardu WebGPU

Konsorcjum W3C przedstawiło pierwsze robocze wersje specyfikacji WebGPU i WebGPU Shading Language (WGSL), które definiują API do realizacji operacji na GPU, takich jak renderowanie i obliczenia, oraz język shaderów do pisania programów działających po stronie GPU, koncepcyjnie podobny do API Vulkan, Metal i Direct3D 12. Specyfikacje zostały przygotowane przez grupę roboczą składającą się z inżynierów z Mozilla, Google, Apple i Microsoft.

Koncepcyjnie WebGPU różni się od WebGL w podobny sposób, w jaki graficzne API Vulkan różni się od OpenGL, jednak nie opiera się na konkretnym API graficznym, lecz stanowi uniwersalną warstwę, która wykorzystuje te same niskopoziomowe prymitywy, co Vulkan, Metal i Direct3D. WebGPU zapewnia aplikacjom w JavaScript niskopoziomową kontrolę nad organizacją, przetwarzaniem i przesyłaniem poleceń do GPU, zarządzaniem powiązanymi zasobami, pamięcią, buforami, obiektami tekstur i skompilowanymi shaderami graficznymi. Tego rodzaju podejście pozwala osiągnąć wyższą wydajność aplikacji graficznych dzięki zmniejszeniu narzutów i zwiększeniu efektywności pracy z GPU.

WebGPU daje możliwość tworzenia dla Web zaawansowanych projektów 3D, które działają na poziomie porównywalnym z niezależnymi programami, które bezpośrednio komunikują się z Vulkan, Metal lub Direct3D, ale nie są związane z konkretnymi platformami. WebGPU oferuje również dodatkowe możliwości przy portowaniu natywnych programów graficznych do formy, która może działać w oparciu o technologie webowe, dzięki kompilacji do WebAssembly. Oprócz grafiki 3D, WebGPU obejmuje również możliwości związane z przenoszeniem obliczeń na stronę GPU i wykonywaniem shaderów.

Kluczowe cechy WebGPU:

  • Oddzielne zarządzanie zasobami, pracami przygotowawczymi i wysyłaniem poleceń do GPU (w WebGL jeden obiekt odpowiadał za wszystko). Udostępniane są trzy odrębne konteksty: GPUDevice do tworzenia zasobów, takich jak tekstury i bufory; GPUCommandEncoder do kodowania pojedynczych poleceń, w tym etapów renderowania i obliczeń; GPUCommandBuffer do umieszczania w kolejce do wykonania w GPU. Wynik może być rysowany w obszarze związanym z jednym lub wieloma elementami canvas, lub przetwarzany bez wyjścia (na przykład podczas uruchamiania zadań obliczeniowych). Podział etapów ułatwia rozdzielanie tworzenia zasobów i operacji przygotowawczych na różne obsługiwacze, które mogą działać w różnych wątkach.
  • Inne podejście do przetwarzania stanów. W WebGPU oferowane są dwa obiekty — GPURenderPipeline i GPUComputePipeline, które pozwalają na łączenie różnych stanów wcześniej zdefiniowanych przez programistę, co pozwala przeglądarce zaoszczędzić zasoby na dodatkowej pracy, takiej jak rekonstrukcja shaderów. Wśród wspieranych stanów znajdują się: shadery, układy buforów wierzchołków i atrybutów, układy załączonych grup, mieszanie, głębokość i szablony, formaty wyjściowe po renderowaniu.
  • Model powiązania, w dużej mierze przypominająca obecne w Vulkan narzędzia grupowania zasobów. Do grupowania zasobów w WebGPU udostępniany jest obiekt GPUBindGroup, który podczas zapisywania komend można powiązać z innymi podobnymi obiektami do użycia w shaderach. Tworzenie takich grup daje możliwość sterownikowi wcześniejszego wykonania niezbędnych przygotowań, a przeglądarkom umożliwia znacznie szybszą zmianę powiązań zasobów między wywołaniami renderowania. Układ powiązań zasobów można określić z wyprzedzeniem za pomocą obiektu GPUBindGroupLayout.

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster