W3C przedstawia projekt standardu WebGPU

W3C opublikowało pierwsze wersje robocze specyfikacji WebGPU i WebGPU Shading Language (WGSL), które definiują interfejsy API do wykonywania operacji na GPU, takich jak renderowanie i obliczenia, a także język modułu cieniującego do pisania programów działających na GPU. koncepcyjnie podobny do API Vulkan, Metal i Direct3D 12. Specyfikacje zostały przygotowane przez grupę roboczą, w skład której wchodzili inżynierowie z Mozilli, Google, Apple i Microsoft.

Koncepcyjnie WebGPU różni się od WebGL w podobny sposób, w jaki API graficzne Vulkan różni się od OpenGL, ale nie jest oparte na konkretnym API graficznym, ale jest uniwersalną warstwą, która wykorzystuje te same prymitywy niskiego poziomu, które można znaleźć w Vulkan, Metal i Direct3D. WebGPU zapewnia aplikacjom JavaScript niskopoziomową kontrolę nad organizacją, przetwarzaniem i przesyłaniem poleceń do procesora graficznego, zarządzaniem powiązanymi zasobami, pamięcią, buforami, obiektami tekstur i skompilowanymi modułami cieniującymi grafikę. Takie podejście pozwala osiągnąć wyższą wydajność aplikacji graficznych poprzez zmniejszenie kosztów ogólnych i zwiększenie wydajności pracy z procesorem graficznym.

WebGPU umożliwia tworzenie złożonych projektów 3D dla Internetu, które działają nie gorzej niż samodzielne programy, które mają bezpośredni dostęp do Vulkan, Metal lub Direct3D, ale nie są powiązane z określonymi platformami. WebGPU zapewnia także dodatkowe możliwości przenoszenia natywnych programów graficznych do postaci internetowej poprzez kompilację do WebAssembly. Oprócz grafiki 3D, WebGPU zawiera również możliwości związane z przenoszeniem obliczeń na procesor graficzny i wykonywaniem shaderów.

Kluczowe cechy WebGPU:

  • Oddzielne zarządzanie zasobami, prace przygotowawcze i przekazywanie poleceń do GPU (w WebGL za wszystko odpowiadał jeden obiekt na raz). Dostępne są trzy oddzielne konteksty: GPUDevice do tworzenia zasobów, takich jak tekstury i bufory; GPUCommandEncoder do kodowania poszczególnych poleceń, łącznie z etapami renderowania i obliczeń; GPUCommandBuffer do przekazania do kolejki uruchamiania GPU. Wynik może zostać wyrenderowany w obszarze powiązanym z jednym lub większą liczbą elementów obszaru roboczego lub wyrenderowany bez danych wyjściowych (na przykład podczas wykonywania zadań obliczeniowych). Rozdzielenie etapów ułatwia rozdzielenie operacji tworzenia i udostępniania zasobów na różne procedury obsługi, które mogą działać w różnych wątkach.
  • Inne podejście do obsługi stanów. WebGPU udostępnia dwa obiekty - GPURenderPipeline i GPUComputePipeline, które pozwalają łączyć różne stany predefiniowane przez programistę, dzięki czemu przeglądarka nie marnuje zasobów na dodatkową pracę, np. rekompilację shaderów. Obsługiwane stany obejmują: moduły cieniujące, układy buforów wierzchołków i atrybutów, układy grup trwałych, mieszanie, głębię i wzorce, formaty wyjściowe po renderowaniu.
  • Wiążący model, podobny do narzędzi do grupowania zasobów firmy Vulkan. Aby pogrupować zasoby w grupy, WebGPU udostępnia obiekt GPUBindGroup, który w momencie pisania poleceń można powiązać z innymi podobnymi obiektami do wykorzystania w shaderach. Tworzenie takich grup pozwala sterownikowi na wcześniejsze wykonanie niezbędnych działań przygotowawczych, a przeglądarce pozwala na znacznie szybszą zmianę powiązań zasobów pomiędzy wywołaniami rysowania. Układ powiązań zasobów można wstępnie zdefiniować za pomocą obiektu GPUBindGroupLayout.

Źródło: opennet.ru

Dodaj komentarz