Co nowego w WebGPU (Chrome 116)

François Beaufort
François Beaufort

Integracja WebCodecs

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

Początkowa specyfikacja WebGPU nie zezwalała jednak na tworzenie obiektów GPUExternalTexture z obiektów VideoFrame WebCodecs. Ta funkcja jest ważna w przypadku zaawansowanych aplikacji do przetwarzania wideo, które korzystają już z WebCodecs i chcą zintegrować WebGPU z potokiem przetwarzania wideo. Integracja WebCodecs dodaje obsługę używania VideoFrame jako źródła wywołania GPUExternalTexture i copyExternalImageToTexture(). Zapoznaj się z tym przykładem i wpisem w 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 eksperymentalny przykład przesyłania filmów za pomocą WebCodecs.

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

Jeśli metoda requestDevice() na GPUAdapter nie powiedzie się, ponieważ została już użyta do utworzenia GPUDevice, teraz zwraca GPUDevice natychmiast oznaczony jako utracony, zamiast zwracać obietnicę, która odrzuca 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;

Zapewnienie płynnego odtwarzania wideo po wywołaniu funkcji importExternalTexture()

Gdy funkcja importExternalTexture() jest wywoływana z parametrem HTMLVideoElement, powiązane odtwarzanie wideo nie jest już ograniczane, gdy film nie jest widoczny w obszarze widoku. Zobacz problem chromium:1425252.

Zgodność ze specyfikacją

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

Błąd jest wywoływany podczas wywoływania funkcji createShaderModule(), jeśli źródło WGSL code zawiera \0. Zobacz problem dawn:1345.

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

Ulepszanie środowiska programistycznego

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

Komunikaty o błędach weryfikacji bufora są natychmiast wyświetlane w konsoli JavaScript Narzędzi deweloperskich, gdy funkcja getMappedRange() zakończy się niepowodzeniem, bez konieczności wysyłania przez deweloperów poleceń do kolejki. Zobacz change chromium:4597950.

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

Aktualizacje o świcie

Przełącznik debugowania disallow_unsafe_apis został zmieniony na allow_unsafe_apis i domyślnie jest wyłączony. Ten przełącznik pomija 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 dawn:1685.

Wycofany atrybut wgpu::ShaderModuleWGSLDescriptor source został usunięty na rzecz atrybutu code. Zobacz change dawn:130321.

Brakująca metoda wgpu::RenderBundle::SetLabel() została zaimplementowana. Zobacz change dawn:134502.

Aplikacje mogą prosić o określony backend podczas pobierania adaptera za pomocą opcji wgpu::RequestAdapterOptionsBackendType. Zobacz przykład poniżej i wydaj 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 tekstur łańcucha wymiany, dzięki czemu wartość zwracana wgpu::Texture może być używana w kopiach. Zobacz przykład poniżej i issue dawn:1551.

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

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

Nowości w WebGPU

Lista wszystkich tematów omówionych w serii Co nowego w WebGPU.

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

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