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 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