Nowości w WebGPU (Chrome 127)

François Beaufort
François Beaufort

Eksperymentalna obsługa OpenGL ES na Androidzie

Teraz możesz uzyskać dostęp do GPUAdapter z back-endu OpenGL ES, gdy żądasz eksperymentalnego trybu zgodności WebGPU w Chrome na Androida. Jest to szczególnie przydatne w przypadku urządzeń z Androidem, które nie obsługują Vulkana w wersji 1.1 lub nowszej. Zapoznaj się z tym przykładem i problemem dawn:1545.

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
Na stronie raportu WebGPU są widoczne informacje o GPUAdapter z back-endu OpenGL ES na urządzeniu z Androidem.
Informacje o adapterze OpenGL ES na stronie webgpureport.org

Ta funkcja jest nadal w fazie eksperymentalnej, dlatego musisz wykonać te czynności:

  1. Włącz te flagi Chrome: „Niebezpieczne wsparcie WebGPU”, „Funkcje dla deweloperów WebGPU” i „Włącz wiersz poleceń na urządzeniach bez uprawnień roota”.
  2. Włącz debugowanie USB na urządzeniu z Androidem.
  3. Połącz urządzenie z Androidem z komputerem, uruchom adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line', aby preferować backend OpenGL ES nad Vulkan, i uruchom ponownie Chrome.

Atrybut informacji o GPUAdapter

Informacje identyfikujące adapter można teraz pobierać w sposób synchroniczny za pomocą atrybutu GPUAdapter info. Wcześniej wywołanie asynchronicznej metody GPUAdapter requestAdapterInfo() było jedynym sposobem na uzyskanie informacji o adapterze. Jednak metoda requestAdapterInfo() została usunięta ze specyfikacji WebGPU i zostanie usunięta z Chrome jeszcze w tym roku, aby dać deweloperom wystarczająco dużo czasu na przeprowadzenie niezbędnych zmian. Zapoznaj się z tym przykładem, stanem Chromeproblemem 335383516.

const adapter = await navigator.gpu.requestAdapter();
const info = adapter.info;

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

Ulepszenia dotyczące interoperacyjności WebAssembly

Aby uwzględnić stosy WebAssembly przekazywane bezpośrednio do WebGPU, rozmiary tych argumentów BufferSource nie są już ograniczone do 2 GB: dynamicOffsetsDatasetBindGroup(), źródło datawriteBuffer() i źródło data Pin writeTexture(). Zobacz problem 339049388.

Ulepszone błędy kodera poleceń

Niektóre błędy walidacji generowane przez kodery poleceń będą teraz zawierać ulepszone informacje kontekstowe. Na przykład próba uruchomienia etapu przetwarzania, gdy otwarty był jeszcze etap renderowania, spowodowała ten błąd.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

Zawiera ono opis przyczyny błędu, ale nie wskazuje, które wywołanie spowodowało błąd weryfikacji. Ten komunikat o błędzie zawiera ulepszony komunikat, w którym jest widoczne polecenie, które spowodowało błąd. Zobacz zmianę 192245.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

Aktualizacje świtu

Interfejs C API webgpu.h nie udostępnia już funkcji wgpuSurfaceGetPreferredFormat(), która jest odpowiednikiem funkcji wgpu::Surface::GetPreferredFormat() z języka Dawn. Zamiast tego użyj polecenia wgpu::Surface::GetCapabilities(), aby uzyskać listę obsługiwanych formatów, a następnie użyj polecenia formats[0], aby uzyskać format tekstury preferowany dla tej powierzchni. W międzyczasie wywołanie wgpu::Surface::GetPreferredFormat() powoduje wyświetlenie ostrzeżenia o wycofaniu. Zobacz problem 290.

Obsługiwane sposoby użycia tekstury powierzchni są teraz dostępne w funkcji wgpu::SurfaceCapabilities::usages podczas wywoływania funkcji wgpu::Surface::GetCapabilities(). Zawsze powinny one zawierać wgpu::TextureUsage::RenderAttachment. Zobacz problem 301.

Obejmuje to tylko niektóre najważniejsze informacje. Zapoznaj się z pełną listą commitów.

Co nowego w WebGPU

Lista wszystkich tematów omawianych w cyklu Co nowego w WebGPU.

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113