Wat is er nieuw in WebGPU (Chrome 130)

François Beaufort
François Beaufort

Mengen met twee bronnen

Het combineren van de uitvoer van twee fragmentshaders tot één framebuffer wordt dual source blending genoemd. Deze techniek is met name nuttig voor toepassingen die complexe blending-bewerkingen vereisen, zoals toepassingen gebaseerd op Porter-Duff blend-modi. Door opeenvolgende renderpasses te vervangen door één enkele renderpass, kan dual source blending de prestaties en flexibiliteit verbeteren.

De nieuwe WebGPU-functie "dual-source-blending" maakt het mogelijk om het WGSL-attribuut @blend_src op @location(0) te gebruiken om de index van de mengbron aan te duiden, samen met de volgende mengfactoren : "src1" , "one-minus-src1" , "src1-alpha" en "one-minus-src1-alpha" . Zie het volgende codefragment, 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 compilatietijd van shaders op Metal

Het Chrome-team verbetert Tint, de WebGPU-shadertaalcompiler, door een tussenliggende representatie (IR) te introduceren voor apparaten die WebGPU met de Metal-backend ondersteunen. Deze IR, die zich bevindt tussen de abstracte syntaxisboom (AST) van Tint en de Metal-backendwriter, zal de compiler efficiënter en beter onderhoudbaar maken, wat uiteindelijk zowel ontwikkelaars als gebruikers ten goede komt. Eerste tests tonen aan dat de nieuwe versie van Tint tot wel 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.
Het aanmaken van een renderpipeline in macOS.

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

De functie GPUAdapter requestAdapterInfo() wordt afgeschaft.

De asynchrone methode requestAdapterInfo() van de `GPUAdapter` is overbodig, omdat ontwikkelaars `GPUAdapterInfo` al synchroon kunnen verkrijgen via het info attribuut van de `GPUAdapter`. Daarom is de niet-standaard `GPUAdapter`-methode requestAdapterInfo() nu afgekeurd. Zie de intentie tot afkeuring .

De DevTools-console geeft een waarschuwing weer dat requestAdapterInfo() verouderd is.
Waarschuwing voor verouderde functie requestAdapterInfo() in Chrome DevTools.

Dawn-updates

De C API van webgpu.h heeft een aantal naamgevingsconventies gedefinieerd voor extensiestructuren. 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 attribuut depthWriteEnabled van WGPUDepthStencilState verandert 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 pull request webgpu-headers voor meer informatie.

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

Dit is slechts een greep uit de belangrijkste hoogtepunten. Bekijk de volledige lijst met commits .

Wat is er nieuw in WebGPU?

Een lijst van alles wat in de serie ' Wat is nieuw in WebGPU' aan bod is gekomen.

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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