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 tampon de frame est appelée mélange à double source. 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 combinaison Porter-Duff. En remplaçant les passes de rendu suivantes par une seule passe de rendu, la fusion à double source peut améliorer les performances et la flexibilité.

La nouvelle fonctionnalité WebGPU "dual-source-blending" vous permet d'utiliser l'attribut WGSL @blend_src à @location(0) pour indiquer l'index de la source de fusion et les facteurs de fusion suivants : "src1", "one-minus-src1", "src1-alpha" et "one-minus-src1-alpha". Consultez l'extrait 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 (RI) pour les appareils compatibles avec WebGPU avec le backend Metal. Ce RI, situé entre l'arbre syntaxique abstrait (AST) de Tint et le module d'écriture du backend Metal, rendra le compilateur plus efficace et plus facile à gérer, ce qui profitera à la fois aux développeurs et aux utilisateurs. Les premiers tests montrent que la nouvelle version de Tint est jusqu'à 10 fois plus rapide pour traduire les nuanceurs WGSL d'Unity en MSL.

Un organigramme montre le processus de conversion du code de 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.

Obsolescence de GPUAdapter requestAdapterInfo()

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 l'intention d'abandon.

La console des outils de développement affiche un avertissement de dépréciation pour requestAdapterInfo().
Avertissement concernant une fonctionnalité obsolète pour requestAdapterInfo() dans les outils pour les développeurs Chrome.

Mises à jour de l'Aube

L'API C webgpu.h a défini des conventions d'attribution de noms pour les structs 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 (true, false et undefined), comme dans l'API JavaScript. Pour en savoir plus, consultez l'extrait de code suivant et la demande d'extraction webgpu-headers.

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

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

Nouveautés de WebGPU

Liste de tous les sujets abordés dans la série Nouveautés de 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