Wat is er nieuw in WebGPU (Chrome 130)

François Beaufort
François Beaufort

Mengen met dubbele bron

Het combineren van twee fragmentarceringuitvoer in één enkele framebuffer wordt dual source blending genoemd. Deze techniek is vooral handig voor toepassingen die complexe mengbewerkingen vereisen, zoals toepassingen die zijn gebaseerd op de Porter-Duff-mengmodi. Door opeenvolgende renderpassages te vervangen door een enkele renderpassage, kan dual source blending de prestaties en flexibiliteit verbeteren.

Met de nieuwe WebGPU-functie "dual-source-blending" kunt u het WGSL @blend_src attribuut op @location(0) gebruiken om de overvloeibronindex en de volgende overvloeifactoren aan te duiden: "src1" , "one-minus-src1" , "src1-alpha" en "one-minus-src1-alpha" . Zie het volgende fragment, de chromestatus-invoer en uitgave 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...

Verbeteringen in de compilatietijd van Shader op Metal

Het Chrome-team verbetert Tint, de WebGPU shader-taalcompiler, door een tussenliggende representatie (IR) te introduceren voor apparaten die WebGPU ondersteunen met de Metal-backend. Deze IR, gepositioneerd tussen de abstracte syntaxisboom (AST) van Tint en de Metal backend-schrijver, zal de compiler efficiënter en onderhoudbaarder maken, wat uiteindelijk zowel ontwikkelaars als gebruikers ten goede zal komen. Uit eerste tests blijkt dat de nieuwe versie van Tint tot 10 keer sneller is bij het vertalen van Unity's WGSL-shaders naar MSL.

Een stroomdiagram toont het proces van het converteren van WGSL-shadercode naar GPU-instructies op laag niveau.
Render-pijplijncreatie in macOS.

Deze verbeteringen, die al toegankelijk zijn op Android en ChromeOS, worden geleidelijk uitgebreid naar macOS-apparaten die WebGPU ondersteunen met de Metal-backend. Zie uitgave 42251016 .

Beëindiging van GPUAdapter requestAdapterInfo()

De asynchrone methode GPUAdapter requestAdapterInfo() is overbodig omdat ontwikkelaars GPUAdapterInfo al synchroon kunnen ophalen met behulp van het GPUAdapter info -kenmerk. Daarom is de niet-standaard GPUAdapter requestAdapterInfo() -methode nu verouderd. Zie voornemen om af te schaffen .

DevTools-console geeft een beëindigingswaarschuwing weer voor requestAdapterInfo().
Verouderde functiewaarschuwing voor requestAdapterInfo() in Chrome DevTools.

Dawn-updates

De webgpu.h C API heeft enkele naamgevingsconventies voor extensiestructuren gedefinieerd. Zie de volgende naamswijzigingen en uitgave 42241174 .

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

Het kenmerktype depthWriteEnabled van WGPUDepthStencilState schakelt over van boolean naar WGPUOptionalBool om de drie mogelijke statussen (waar, onwaar en ongedefinieerd) beter weer te geven, zoals in de JavaScript-API. Zie het volgende codefragment en de webgpu-headers PR voor meer informatie.

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

Dit behandelt slechts enkele van de belangrijkste hoogtepunten. Bekijk de uitgebreide lijst met commits .

Wat is er nieuw in WebGPU

Een lijst met alles wat aan bod komt in de What's New in WebGPU -serie.

Chroom 131

Chroom 130

Chroom 129

Chroom 128

Chroom 127

Chroom 126

Chroom 125

Chroom 124

Chroom 123

Chroom 122

Chroom 121

Chroom 120

Chroom 119

Chroom 118

Chroom 117

Chroom 116

Chroom 115

Chroom 114

Chroom 113