Wat is er nieuw in WebGPU (Chrome 130)

François Beaufort
François Beaufort

Menging van dubbele bronnen

Het combineren van twee fragmentshader-uitvoer in één framebuffer wordt dual source blending genoemd. Deze techniek is vooral handig voor toepassingen die complexe blendingbewerkingen vereisen, zoals toepassingen gebaseerd op Porter-Duff-blendmodi. Door opeenvolgende renderpasses te vervangen door één renderpass, kan dual source blending de prestaties en flexibiliteit verbeteren.

Met de nieuwe WebGPU-functie "dual-source-blending" kunt u het WGSL @blend_src -kenmerk op @location(0) gebruiken om de blendingbronindex en de volgende blendfactoren aan te duiden: "src1" , "one-minus-src1" , "src1-alpha" en "one-minus-src1-alpha" . Zie het volgende fragment, de vermelding in chromestatus en probleem 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 shadercompilatietijd op Metal

Het Chrome-team verbetert Tint, de compiler voor de WebGPU-shadertaal, door een tussenliggende representatie (IR) te introduceren voor apparaten die WebGPU met de Metal-backend ondersteunen. Deze IR, die zich tussen de abstracte syntaxisboom (AST) van Tint en de Metal-backendwriter bevindt, maakt de compiler efficiënter en beter te onderhouden, wat uiteindelijk zowel ontwikkelaars als gebruikers ten goede komt. Eerste tests tonen aan 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 voor het converteren van WGSL-shadercode naar low-level GPU-instructies.
Pijplijncreatie in macOS weergeven.

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

Veroudering 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 de intentie tot verouderd .

De DevTools-console geeft een waarschuwing weer dat requestAdapterInfo() niet langer wordt ondersteund.
Waarschuwing voor verouderde functie voor requestAdapterInfo() in Chrome DevTools.

Dawn-updates

De webgpu.h C API heeft een aantal naamgevingsconventies voor extensiestructuren gedefinieerd. Zie de volgende naamswijzigingen en issue 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 van boolean naar WGPUOptionalBool om de drie mogelijke statussen (true, false en undefined) beter weer te geven, net als 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 volledige lijst met commits .

Wat is er nieuw in WebGPU

Een lijst met alles wat in de serie Wat is er nieuw in WebGPU is behandeld.

Chroom 140

Chroom 139

Chroom 138

Chroom 137

Chroom 136

Chroom 135

Chroom 134

Chroom 133

Chroom 132

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