Obsługa WebGPU zostanie włączona w przeglądarce Chrome

Google ogłosiło domyślną obsługę interfejsu graficznego WebGPU API i języka WebGPU Shading Language (WGSL) w przeglądarce Chrome 113, której premiera zaplanowana jest na 2 maja. WebGPU zapewnia interfejs API podobny do Vulkan, Metal i Direct3D 12 do wykonywania operacji po stronie GPU, takich jak renderowanie i obliczenia, a także umożliwia używanie języka modułu cieniującego do pisania programów po stronie GPU. Implementacja WebGPU będzie początkowo włączona tylko w kompilacjach dla systemów ChromeOS, macOS i Windows. W przypadku systemów Linux i Android obsługa WebGPU zostanie aktywowana w późniejszym terminie.

Oprócz przeglądarki Chrome od kwietnia 2020 r. testowana jest eksperymentalna obsługa WebGPU w przeglądarce Firefox, a od listopada 2021 r. w przeglądarce Safari. Aby włączyć WebGPU w przeglądarce Firefox, ustaw flagi dom.webgpu.enabled i gfx.webgpu.force-enabled w about:config. Nie ma jeszcze planów domyślnego włączania WebGPU w przeglądarkach Firefox i Safari. Implementacje WebGPU opracowane dla Firefoksa i Chrome są dostępne w postaci oddzielnych bibliotek - Dawn (C++) i wgpu (Rust), których możesz użyć do zintegrowania obsługi WebGPU ze swoimi aplikacjami. Trwają także prace nad dodaniem obsługi WebGPU do popularnych bibliotek JavaScript natywnie korzystających z WebGL. Przykładowo, ogłoszono już pełne wsparcie dla WebGPU w Babylon.js, a częściowe wsparcie w Three.js, PlayCanvas i TensorFlow.js.

Koncepcyjnie WebGPU różni się od WebGL w podobny sposób, w jaki graficzny interfejs API Vulkan różni się od OpenGL, ale WebGPU nie jest oparty na konkretnym interfejsie graficznym, ale jest warstwą ogólnego przeznaczenia, która wykorzystuje te same prymitywy niskiego poziomu, które można znaleźć w Vulkan. Metalu 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 uzyskać wyższą wydajność aplikacji graficznych poprzez zmniejszenie obciążenia i zwiększenie wydajności procesora graficznego.

WebGPU umożliwia tworzenie złożonych projektów 3D dla Internetu, które działają, a także samodzielnych programów, które bezpośrednio korzystają z Vulkan, Metal lub Direct3D, ale nie są powiązane z konkretnymi platformami. WebGPU zapewnia również dodatkowe opcje przenoszenia natywnych programów graficznych do formularza obsługującego sieć WWW poprzez kompilację 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, 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