Co nowego w WebGPU (Chrome 116)

François Beaufort
François Beaufort

Integracja z kodekami WebCodecs

WebGPU udostępnia interfejs API do utworzenia nieprzejrzystej „tekstury zewnętrznej” obiekty od HTMLVideoElement do importExternalTexture(). Za pomocą tych obiektów możesz skutecznie próbkować klatki filmu, nawet w formie zerowej bezpośrednio z danych źródłowego modelu kolorów YUV.

Jednak pierwotna specyfikacja WebGPU nie zezwalała na tworzenie obiektów GPUExternalTexture z obiektów WebCodecs VideoFrame. Ta możliwość jest ważna w przypadku zaawansowanych aplikacji do przetwarzania wideo, które korzystają już z kodeków internetowych i chcą zintegrować WebGPU z potokiem przetwarzania wideo. Integracja z WebCodecs umożliwia korzystanie z interfejsu VideoFrame jako źródła wywołań GPUExternalTexture i copyExternalImageToTexture(). Zobacz przykład poniżej oraz wpis 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.

Wypróbuj eksperymentalną próbkę przesyłania filmów przy użyciu WebCodecs.

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

Jeśli metoda requestDevice() w obiekcie GPUAdapter nie zadziała, ponieważ została już użyta do utworzenia GPUDevice, teraz wykonuje działanie za pomocą elementu GPUDevice oznaczonego natychmiast jako stracona, zamiast zwracać obietnicę, która została odrzucona z użyciem funkcji 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;

Zadbaj o płynne odtwarzanie filmu, gdy wywoływana jest funkcja importExternalTexture()

Po wywołaniu funkcji importExternalTexture() za pomocą HTMLVideoElement odtwarzanie powiązanego filmu nie będzie już ograniczane, gdy film nie będzie 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ółowości (lodMaxClamp) używany przy próbkowaniu tekstury za pomocą funkcji createSampler() to 32. Zobacz zmianę chromium:4608063.

Poprawianie wrażeń deweloperów

W konsoli JavaScript Narzędzi deweloperskich wyświetlany jest komunikat przypominający deweloperom, że używają WebGPU na nieobsługiwanej platformie. Zobacz zmianę 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 zmianę chromium:4597950.

Zrzut ekranu konsoli JavaScript w Narzędziach deweloperskich z komunikatem o błędzie weryfikacji bufora.
Komunikat o błędzie weryfikacji buforów w konsoli JavaScript Narzędzi deweloperskich.

Aktualizacje o świcie

Nazwa przełącznika debugowania disallow_unsafe_apis została zmieniona na allow_unsafe_apis i jest domyślnie wyłączona. 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 do debugowania. Zobacz problem świt:1685.

wgpu::ShaderModuleWGSLDescriptorWycofany atrybut source zostanie usunięty na rzecz code. Zobacz zmianę daty:130321.

Brakująca metoda wgpu::RenderBundle::SetLabel() została wdrożona. Zobacz zmianę daty:134502.

Po uzyskaniu adaptera z opcją wgpu::RequestAdapterOptionsBackendType aplikacje mogą żądać konkretnego backendu. Zobacz przykład poniżej i wydanie świtu:1875.

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

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

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

Dodaliśmy nową metodę SwapChain::GetCurrentTexture() z dodatkowymi zastosowaniami do zamiany tekstur, aby można było używać zwróconego wgpu::Texture w kopiach. Zobacz przykład poniżej i problem dawn:1551.

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

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

Co nowego w WebGPU

Lista wszystkiego, co zostało omówione w serii Co nowego w WebGPU.

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