Dodano obsługę WebGPU do nocnych kompilacji Firefoksa

В noc Tworzy się Firefox pojawił się wsparcie specyfikacji WebGPU, który zapewnia interfejs programistyczny do przetwarzania grafiki 3D i obliczeń po stronie GPU, koncepcyjnie podobny do API Vulkan, Metal и Direct3D 12. Specyfikacja jest opracowywana przez Mozillę, Google, Apple, Microsoft i członków społeczności w Grupa robocza, stworzony przez organizację W3C.

Kluczowym celem WebGPU jest zapewnienie bezpiecznego, przyjaznego dla użytkownika, przenośnego i wydajnego interfejsu programistycznego dla platformy internetowej, aby wykorzystać technologie grafiki 3D i możliwości zapewniane przez nowoczesne interfejsy API grafiki systemowej, takie jak Direct3D 12 w systemach Windows, Metal na macOS i Vulkan na Linuksie. Koncepcyjnie WebGPU różni się od WebGL w podobny sposób, w jaki Vulkan różni się od OpenGL, a jednocześnie nie jest oparty na konkretnym API graficznym, ale jest uniwersalną warstwą, która generalnie wykorzystuje te same prymitywy niskiego poziomu, co Vulkan, Metalu i Direct3D.

WebGPU zapewnia aplikacjom JavaScript kontrolę niższego poziomu 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 pełnoprawnych, 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 konkretnymi platformami. WebGPU zapewnia również dodatkowe możliwości podczas przenoszenia natywnych programów graficznych do postaci obsługującej sieć internetową dzięki wykorzystaniu technologii WebAssembly. Oprócz grafiki 3D, WebGPU obejmuje również możliwości związane z przenoszeniem obliczeń na procesor graficzny i obsługą rozwoju modułów cieniujących. Shadery puszka zostać utworzony w języku WebGPU Shading Language lub określony w pośrednim formacie SPIR-V, a następnie przetłumaczony na języki shaderowe obsługiwane przez aktualne sterowniki.

WebGPU wykorzystuje osobne 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:
GPUUrządzenie do tworzenia zasobów takich jak tekstury i bufory; GPUCommandEncoder do kodowania poszczególnych poleceń, w tym etapów renderowania i obliczeń; GPUCommandBuffer, który ma zostać umieszczony w kolejce do wykonania na GPU. Wynik można wyrenderować w obszarze powiązanym z jednym lub większą liczbą elementów kanwy lub przetworzyć bez danych wyjściowych (na przykład podczas uruchamiania zadań obliczeniowych). Oddzielenie etapów ułatwia rozdzielenie operacji tworzenia i przygotowywania zasobów na różne procedury obsługi, które mogą działać w różnych wątkach.

Drugą różnicą pomiędzy WebGPU i WebGL jest odmienne podejście do obsługi stanów. WebGPU oferuje dwa obiekty - GPURenderPipeline i GPUComputePipeline, które pozwalają łączyć różne stany predefiniowane przez programistę, co pozwala przeglądarce nie marnować 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 oraz formaty wyjściowe po renderowaniu.

Trzecia funkcja WebGPU nazywana jest w dużej mierze modelem wiązania
przypominające narzędzia do grupowania zasobów obecne w Vulkan.
Aby pogrupować zasoby, WebGPU udostępnia obiekt GPUBindGroup, który można powiązać z innymi podobnymi obiektami w celu wykorzystania w modułach cieniujących podczas pisania poleceń. 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.

Dodano obsługę WebGPU do nocnych kompilacji Firefoksa

W przeglądarce Firefox ustawienie „dom.webgpu.enabled” znajduje się w about:config, aby włączyć WebGPU. Renderowanie CanvasContext wymaga również włączenia komponowania WebRender („gfx.webrender.all” w about:config), napisany w Rust i zlecający operacje renderowania zawartości strony do GPU. Implementacja WebGPU opiera się na kodzie projektu
wgpu, napisany w języku Rust i mogący działać na interfejsach API DX12, Vulkan i Metal w systemach Linux, Android, Windows i macOS (obsługa DX11 i OpenGL ES 3.0 jest również w fazie rozwoju). Równolegle Google pracuje nad kolejną implementacją, która jest dostępna w Oddział kanaryjski Chromium i jest włączany przy użyciu flagi „chrome://flags/#enable-unsafe-webgpu”, ale jak dotąd działa tylko na macOS i Windows.

Źródło: opennet.ru

Dodaj komentarz