Co nowego w WebGPU (Chrome 116)

François Beaufort
François Beaufort

Integracja WebCodecs

WebGPU udostępnia interfejs API do tworzenia nieprzezroczystych obiektów „zewnętrznej tekstury” od HTMLVideoElement do importExternalTexture(). Możesz użyć tych obiektów do efektywnego próbkowania klatek wideo, potencjalnie również bez kopiowania bezpośrednio ze źródłowych danych modelu kolorów YUV.

Jednak początkowa specyfikacja WebGPU nie zezwalała na tworzenie obiektów GPUExternalTexture z obiektów WebCodecs VideoFrame. Ta możliwość jest istotna w przypadku zaawansowanych aplikacji do przetwarzania wideo, które korzystają już z WebCodecs i chcą zintegrować WebGPU z procesem przetwarzania wideo. Integracja WebCodecs dodaje obsługę używania VideoFrame jako źródła wywołań GPUExternalTexture i copyExternalImageToTexture(). Zapoznaj się z poniższym przykładem oraz wpisem chromestatus.

// Access the GPU device.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

// Create VideoFrame from HTMLVideoElement.
const video = document.querySelector("video");
const videoFrame = new VideoFrame(video);

// Create texture from VideoFrame.
const texture = device.importExternalTexture({ source: videoFrame });
// TODO: Use texture in bind group creation.

Zapoznaj się z eksperymentalnym przykładem funkcji Przesyłanie filmów przy użyciu WebCodecs.

Utracone urządzenie zwrócone przez GPUAdapter requestDevice()

Jeśli metoda requestDevice() w GPUAdapter nie powiedzie się, ponieważ została już użyta do utworzenia elementu GPUDevice, zostanie teraz zrealizowana przy użyciu elementu GPUDevice oznaczonego natychmiast jako utracony, a nie zwrócenia obietnicy, która zostanie odrzucona z użyciem wartości null. Zobacz issue chromium:1234617.

const adapter = await navigator.gpu.requestAdapter();
const device1 = await adapter.requestDevice();

// New! The promise is not rejected anymore with null.
const device2 = await adapter.requestDevice();
// And the device is immediately marked as lost.
const info = await device2.lost;

Zadbaj o płynne odtwarzanie filmu, jeśli wywołana jest funkcja importExternalTexture()

Gdy funkcja importExternalTexture() zostaje wywołana za pomocą HTMLVideoElement, powiązane odtwarzanie filmu nie jest już ograniczane, gdy film nie jest widoczny w widocznym obszarze. Zobacz issue chromium:1425252.

Zgodność ze specyfikacją

Argument message w konstruktorze GPUPipelineError() jest opcjonalny. Zobacz zmianę chromium:4613967.

Jeśli źródło WGSL code zawiera \0, wywołuje błąd podczas wywoływania funkcji createShaderModule(). Zobacz świt problemu:1345.

Domyślny maksymalny poziom szczegółowości (lodMaxClamp) używany podczas próbkowania tekstury z użyciem createSampler() to 32. Zobacz zmianę chromium:4608063.

Poprawa wrażeń deweloperów

W konsoli JavaScript Narzędzi deweloperskich wyświetlany jest komunikat przypominający deweloperom, że korzystają z WebGPU na nieobsługiwanej platformie. Zobacz zmianę chromium:4589369.

Komunikaty o błędach weryfikacji bufora są natychmiast wyświetlane w konsoli JavaScript Narzędzi deweloperskich, gdy wystąpi błąd getMappedRange() bez konieczności wysyłania poleceń przez programistów do kolejki. Zobacz zmianę chromium:4597950.

Zrzut ekranu przedstawiający konsolę JavaScript Narzędzi deweloperskich z komunikatem o błędzie weryfikacji bufora.
Komunikat o błędzie weryfikacji bufora w konsoli JavaScript Narzędzi deweloperskich.

Powiadomienia o świcie

Nazwa przełącznika debugowania disallow_unsafe_apis została zmieniona na allow_unsafe_apis i domyślnie jest wyłączona. Ten przełącznik eliminuje błędy weryfikacji w punktach wejścia interfejsu API lub kombinacjach parametrów, które nie są jeszcze uznawane za bezpieczne. Może to być przydatne podczas debugowania. Zobacz świt problemu:1685.

Wycofany atrybut source (wgpu::ShaderModuleWGSLDescriptor) został zastąpiony atrybutem code. Zobacz zmianę w świcie:130321.

Wdrożono brakującą metodę wgpu::RenderBundle::SetLabel(). Zobacz zmianę w świcie:134502.

Podczas pobierania adaptera z opcją wgpu::RequestAdapterOptionsBackendType aplikacje mogą żądać określonego backendu. Zobacz przykład poniżej: Data wydania:1875.

wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
backendTypeOptions.backendType = wgpu::BackendType::D3D12;

wgpu::RequestAdapterOptions options = {};
options.nextInChain = &backendTypeOptions;

// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);

Dodano nową metodę SwapChain::GetCurrentTexture() z dodatkowymi zastosowaniami w przypadku tekstur swapchain, aby umożliwić użycie zwracającego elementu wgpu::Texture w kopiach. Zobacz przykład poniżej i issue dawn:1551.

wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();

To tylko niektóre z najważniejszych kwestii. Zobacz pełną listę zatwierdzeń.

Co nowego w WebGPU

Lista wszystkich zagadnień omówionych w serii Co nowego w WebGPU.

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