Nouveautés de WebGPU (Chrome 130)

François Beaufort
François Beaufort

Combinaison de deux sources

La combinaison de deux sorties de nuanceur de fragment dans un seul frame buffer est appelée mélange à deux sources. Cette technique est particulièrement utile pour les applications qui nécessitent des opérations de combinaison complexes, telles que celles basées sur les modes de fusion Porter-Duff. En remplaçant les passes de rendu ultérieures par une seule passe de rendu, le mélange à deux sources peut améliorer les performances et la flexibilité.

La nouvelle fonctionnalité WebGPU "dual-source-blending" vous permet d'utiliser l'attribut WGSL @blend_src sur @location(0) pour désigner l'index source de la combinaison et les facteurs de combinaison suivants: "src1", "one-minus-src1", "src1-alpha" et "one-minus-src1-alpha". Consultez l'extrait de code suivant, l'entrée chromestatus et le problème 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...

Amélioration du temps de compilation des nuanceurs sur Metal

L'équipe Chrome améliore Tint, le compilateur de langage de nuanceurs WebGPU, en introduisant une représentation intermédiaire (IR) pour les appareils compatibles avec WebGPU avec le backend Metal. Cet IR, situé entre l'arbre syntaxique abstrait (AST) de Tint et l'écrivain de backend Metal, rendra le compilateur plus efficace et plus facile à gérer, ce qui profitera à la fois aux développeurs et aux utilisateurs. Les tests initiaux montrent que la nouvelle version de Tint est jusqu'à 10 fois plus rapide lors de la traduction des nuanceurs WGSL d'Unity en MSL.

Un organigramme montre le processus de conversion du code du nuanceur WGSL en instructions GPU de bas niveau.
Création d'un pipeline de rendu sous macOS.

Ces améliorations, déjà disponibles sur Android et ChromeOS, sont progressivement étendues aux appareils macOS compatibles avec WebGPU avec le backend Metal. Consultez le problème 42251016.

Abandon de la méthode requestAdapterInfo() de GPUAdapter

La méthode asynchrone requestAdapterInfo() de GPUAdapter est redondante, car les développeurs peuvent déjà obtenir GPUAdapterInfo de manière synchrone à l'aide de l'attribut info de GPUAdapter. Par conséquent, la méthode requestAdapterInfo() non standard de GPUAdapter est désormais obsolète. Consultez Intention d'abandon.

La console DevTools affiche un avertissement d'abandon pour requestAdapterInfo().
Avertissement concernant une fonctionnalité obsolète pour requestAdapterInfo() dans les outils pour les développeurs Chrome.

Informations Dawn

L'API C webgpu.h définit certaines conventions d'attribution de noms pour les structures d'extension. Consultez les changements de nom suivants et le problème 42241174.

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

Le type d'attribut depthWriteEnabled de WGPUDepthStencilState passe de booléen à WGPUOptionalBool pour mieux refléter ses trois états possibles (vrai, faux et non défini), comme dans l'API JavaScript. Pour en savoir plus, consultez l'extrait de code suivant et le document d'information webgpu-headers.

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

Il ne s'agit là que de quelques-uns des points clés. Consultez la liste exhaustive des commits.

Nouveautés de WebGPU

Liste de tout ce qui a été abordé dans la série Nouveautés de 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