Novità di WebGPU (Chrome 130)

François Beaufort
François Beaufort

Combinazione di due origini

La combinazione di due output dello shader di frammenti in un unico framebuffer è chiamata unione di due sorgenti. Questa tecnica è particolarmente utile per le applicazioni che richiedono operazioni di miscelazione complesse, come quelle basate sulle modalità di miscelazione di Porter-Duff. Sostituendo le pass di rendering successive con una singola pass di rendering, la miscelazione con due origini può migliorare le prestazioni e la flessibilità.

La nuova funzionalità "dual-source-blending" WebGPU ti consente di utilizzare l'attributo WGSL @blend_src in @location(0) per indicare l'indice di origine dell'unione e i seguenti fattori di unione: "src1", "one-minus-src1", "src1-alpha" e "one-minus-src1-alpha". Consulta lo snippet seguente, la voce di chromestatus e il problema 341973423.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("dual-source-blending")) {
  throw new Error("Dual source blending support is not available");
}
// Explicitly request dual source blending support.
const device = await adapter.requestDevice({
  requiredFeatures: ["dual-source-blending"],
});

const code = `
  enable dual_source_blending;

  struct FragOut {
    @location(0) @blend_src(0) color : vec4f,
    @location(0) @blend_src(1) blend : vec4f,
  }

  @fragment fn main() -> FragOut {
    var output : FragOut;
    output.color = vec4f(1.0, 1.0, 1.0, 1.0);
    output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
    return output;
  }
`;

const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...

Miglioramenti ai tempi di compilazione degli shader su Metal

Il team di Chrome sta migliorando Tint, il compilatore del linguaggio shader WebGPU, introducendo una rappresentazione intermedia (IR) per i dispositivi che supportano WebGPU con il backend Metal. Questo IR, posizionato tra l'albero sintattico astratto (AST) di Tint e lo scrittore di backend Metal, renderà il compilatore più efficiente e manutenibile, a vantaggio sia degli sviluppatori che degli utenti. I test iniziali dimostrano che la nuova versione di Tint è fino a 10 volte più veloce durante la traduzione degli shader WGSL di Unity in MSL.

Un diagramma di flusso mostra il processo di conversione del codice shader WGSL in istruzioni GPU a basso livello.
Esegui la creazione della pipeline di rendering in macOS.

Questi miglioramenti, già accessibili su Android e ChromeOS, vengono progressivamente estesi ai dispositivi macOS che supportano WebGPU con il backend Metal. Consulta il problema 42251016.

Ritiro di requestAdapterInfo() di GPUAdapter

Il metodo asincrono GPUAdapter requestAdapterInfo() è ridondante perché gli sviluppatori possono già ottenere GPUAdapterInfo in modo sincrono utilizzando l'attributo GPUAdapter info. Di conseguenza, il metodo non standard GPUAdapter requestAdapterInfo() è ora deprecato. Vedi Intento di ritiro.

La console DevTools mostra un avviso di ritiro per requestAdapterInfo().
Avviso relativo alla funzionalità ritirata per requestAdapterInfo() in Chrome DevTools.

Aggiornamenti di Dawn

L'API C webgpu.h ha definito alcune convenzioni di denominazione per le strutture di estensione. Consulta le seguenti modifiche ai nomi e il problema 42241174.

WGPURenderPassDescriptor estensioni
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
WGPUShaderModuleDescriptor estensioni
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
WGPUSurfaceDescriptor estensioni
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

Il tipo di attributo depthWriteEnabled di WGPUDepthStencilState passa da booleano a WGPUOptionalBool per riflettere meglio i tre possibili stati (true, false e undefined) come nell'API JavaScript. Per scoprire di più, consulta il seguente snippet di codice e il PR webgpu-headers.

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

Sono riportati solo alcuni dei punti salienti. Consulta l'elenco completo dei commit.

Novità di WebGPU

Un elenco di tutto ciò che è stato trattato nella serie Novità di WebGPU.

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