Novità di WebGPU (Chrome 116)

François Beaufort
François Beaufort

Integrazione di WebCodecs

WebGPU espone un'API per creare oggetti "texture esterna" opachi da HTMLVideoElement tramite importExternalTexture(). Puoi utilizzare questi oggetti per campionare in modo efficiente i frame video, potenzialmente senza copia direttamente dai dati del modello di colore YUV di origine.

Tuttavia, la specifica WebGPU iniziale non consentiva la creazione di oggetti GPUExternalTexture da oggetti VideoFrame WebCodecs. Questa funzionalità è importante per le app di elaborazione video avanzata che utilizzano già WebCodecs e che vogliono integrare WebGPU nella pipeline di elaborazione video. L'integrazione di WebCodecs aggiunge il supporto per l'utilizzo di un VideoFrame come origine per una chiamata GPUExternalTexture e copyExternalImageToTexture(). Vedi l'esempio seguente e la voce di 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.

Dai un'occhiata all'esempio sperimentale di caricamento di video con WebCodecs per provarlo.

Dispositivo perso restituito da GPUAdapter.requestDevice()

Se il metodo requestDevice() su GPUAdapter non va a buon fine perché è già stato utilizzato per creare un GPUDevice, ora viene completato con un GPUDevice immediatamente contrassegnato come smarrito, anziché restituire una promessa che viene rifiutata con null. Vedi 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;

Mantenere la riproduzione video fluida se viene chiamato importExternalTexture()

Quando importExternalTexture() viene chiamato con un HTMLVideoElement, la riproduzione video associata non viene più limitata quando il video non è visibile nell'area visibile. Vedi issue chromium:1425252.

Conformità alle specifiche

L'argomento message nel costruttore GPUPipelineError() è facoltativo. Vedi change chromium:4613967.

Viene generato un errore quando si chiama createShaderModule() se l'origine WGSL code contiene \0. Vedi issue dawn:1345.

Il livello di dettaglio massimo predefinito (lodMaxClamp) utilizzato durante il campionamento di una texture con createSampler() è 32. Vedi change chromium:4608063.

Migliorare l'esperienza degli sviluppatori

Nella console JavaScript di DevTools viene visualizzato un messaggio per ricordare agli sviluppatori quando utilizzano WebGPU su una piattaforma non supportata. Vedi change chromium:4589369.

I messaggi di errore di convalida del buffer vengono visualizzati immediatamente nella console JavaScript di DevTools quando getMappedRange() non va a buon fine senza costringere gli sviluppatori a inviare comandi alla coda. Vedi change chromium:4597950.

Screenshot della console JavaScript di DevTools con il messaggio di errore di convalida del buffer.
Messaggio di errore di convalida del buffer nella console JavaScript di DevTools.

Aggiornamenti all'alba

L'opzione di attivazione/disattivazione del debug disallow_unsafe_apis è stata rinominata in allow_unsafe_apis e disattivata per impostazione predefinita. Questo pulsante attiva/disattiva la soppressione degli errori di convalida nei punti di accesso API o nelle combinazioni di parametri che non sono ancora considerati sicuri. Può essere utile per il debug. Vedi issue dawn:1685.

L'attributo wgpu::ShaderModuleWGSLDescriptor deprecato source viene rimosso a favore di code. Vedi change dawn:130321.

Il metodo wgpu::RenderBundle::SetLabel() mancante è stato implementato. Vedi change dawn:134502.

Le applicazioni possono richiedere un backend specifico quando ottengono un adattatore con l'opzione wgpu::RequestAdapterOptionsBackendType. Vedi un esempio di seguito e problema alba:1875.

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

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

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

È stato aggiunto un nuovo metodo SwapChain::GetCurrentTexture() con utilizzi aggiuntivi per le texture swapchain, in modo che il valore restituito wgpu::Texture possa essere utilizzato nelle copie. Vedi un esempio di seguito e emetti dawn:1551.

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

Questi sono solo alcuni dei punti salienti. Consulta l'elenco completo dei commit.

Novità di WebGPU

Un elenco di tutti gli argomenti trattati nella serie Novità di 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