Co nowego w WebGPU (Chrome 116)

François Beaufort
François Beaufort

Integracja kodeków internetowych

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

Jednak początkowa specyfikacja WebGPU nie pozwalała na tworzenie obiektów GPUExternalTexture z obiektów WebCodecs VideoFrame. Ta funkcja jest ważna dla zaawansowanych aplikacji do przetwarzania wideo, które korzystają już z WebCodecs i chcą zintegrować WebGPU w procesie przetwarzania wideo. Integracja z WebCodecs umożliwia korzystanie z VideoFrame jako źródła wywołania GPUExternalTexture i copyExternalImageToTexture(). Zobacz poniższy przykład i entry 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 przykładem eksperymentalnego przesyłania filmów za pomocą WebCodecs.

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

Jeśli metoda requestDevice()GPUAdapter zakończy się niepowodzeniem, ponieważ została już użyta do utworzenia GPUDevice, zostanie teraz spełniona z użyciem GPUDevice natychmiast oznaczonego jako utracony, zamiast zwracania obietnicy, która odrzuca null. Zobacz problem 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;

Utrzymywanie płynnego odtwarzania filmu, jeśli wywołano importExternalTexture()

Gdy wywołujesz funkcję importExternalTexture() z argumentem HTMLVideoElement, odtwarzanie powiązanego filmu nie jest już ograniczane, gdy film nie jest widoczny w widocznym obszarze. Zobacz problem chromium:1425252.

Zgodność ze specyfikacją

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

Jeśli źródło WGSL code zawiera wartość \0, wywoływany jest błąd.createShaderModule() Zobacz problem: świt:1345.

Domyślny maksymalny poziom szczegółów (lodMaxClamp) używany podczas próbkowania tekstury za pomocą createSampler() to 32. Zobacz zmianę chromium:4608063.

Ulepszenie środowiska programisty

W konsoli JavaScript DevTools wyświetla się komunikat przypominający deweloperom, że używają WebGPU na nieobsługiwanej platformie. Zobacz change chromium:4589369.

Komunikaty o błędach weryfikacji buforów są natychmiast wyświetlane w konsoli JavaScript Narzędzi deweloperskich, gdy błąd getMappedRange() się nie powiedzie. Deweloperzy nie muszą wysyłać poleceń do kolejki. Zobacz change chromium:4597950.

Zrzut ekranu konsoli JavaScript w Narzędziach deweloperskich pokazujący komunikat o błędzie weryfikacji bufora
Komunikat o błędzie weryfikacji bufora w konsoli JavaScript w Narzędziach deweloperskich.

Aktualizacje świtu

Przełącznik debugowania disallow_unsafe_apis został przemianowany na allow_unsafe_apis i domyślnie jest wyłączony. Ten przełącznik ukrywa błędy weryfikacji w punktach wejścia interfejsu API lub kombinacjach parametrów, które nie są jeszcze uważane za bezpieczne. Może to być przydatne podczas debugowania. Zobacz issue dawn:1685.

Wycofany atrybut source został zastąpiony atrybutem code.wgpu::ShaderModuleWGSLDescriptor Zobacz zmianę daty:130321.

Wdrożono brakującą metodę wgpu::RenderBundle::SetLabel(). Zobacz change dawn:134502.

Aplikacje mogą prosić o konkretny backend podczas uzyskiwania adaptera z opcją wgpu::RequestAdapterOptionsBackendType. Poniżej znajdziesz przykład i problem dawn: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 dla tekstur swapchain, aby zwracana wartość wgpu::Texture mogła być używana w kopiach. Poniżej znajdziesz przykład i problem dawn:1551.

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

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

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