Co nowego w WebGPU (Chrome 116)

François Beaufort
François Beaufort

Integracja z WebCodecs

WebGPU udostępnia interfejs API do tworzenia nieprzezroczystych obiektów "tekstury zewnętrznej" z HTMLVideoElement za pomocą 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.

Jednak początkowa specyfikacja WebGPU nie pozwalała na tworzenie obiektów GPUExternalTexture z obiektów WebCodecs VideoFrame. Ta funkcja jest ważna w przypadku zaawansowanych aplikacji do przetwarzania wideo, które już korzystają z WebCodecs i chcą zintegrować WebGPU z potokiem przetwarzania wideo. Integracja z WebCodecs dodaje obsługę używania elementu VideoFrame jako źródła dla wywołania GPUExternalTexture i copyExternalImageToTexture(). Zobacz ten przykład i wpis 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.

Aby się z nią zapoznać, wypróbuj eksperymentalny przykład przesyłania filmów za pomocą WebCodecs.

Utracone urządzenie zwracane przez GPUAdapter requestDevice()

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

Płynne odtwarzanie wideo, gdy wywoływana jest funkcja importExternalTexture()

Gdy importExternalTexture() jest wywoływana z elementem HTMLVideoElement, powiązane odtwarzanie wideo 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.

Podczas wywoływania funkcji createShaderModule() występuje błąd, 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ą createSampler() to 32. Zobacz zmianę chromium:4608063.

Ulepszanie środowiska deweloperskiego

W konsoli JavaScript Narzędzi deweloperskich wyświetla się komunikat przypominający deweloperom, że używają 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 getMappedRange() nie powiedzie się bez konieczności wysyłania poleceń do kolejki. Zobacz zmianę 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 Dawn

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 API lub kombinacjach parametrów, które nie są jeszcze uważane za bezpieczne. Może to być przydatne podczas debugowania. Zobacz problem dawn:1685.

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

Zaimplementowano brakującą metodę wgpu::RenderBundle::SetLabel(). Zobacz zmianę dawn:134502.

Aplikacje mogą zażądać konkretnego backendu podczas pobierania adaptera za pomocą opcji wgpu::RequestAdapterOptionsBackendType. Zobacz przykład poniżej 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 tekstur łańcucha wymiany, dzięki czemu zwracany element wgpu::Texture może być używany w kopiach. Zobacz przykład poniżej i problem dawn:1551.

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

Obejmuje to tylko niektóre z najważniejszych informacji. Pełną listę commitów znajdziesz tutaj.

Co nowego w WebGPU

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

Chrome 147–148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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