Nieuw in WebGPU (Chrome 130)

François Beaufort
François Beaufort

Mengen met 2 bronnen

Als je 2 uitvoeren van fragment shaders combineert tot één framebuffer, heet dat blending met 2 bronnen. Deze techniek is vooral handig voor apps die complexe mengbewerkingen vereisen, zoals die gebaseerd zijn op Porter-Duff-mengmodi. Door opeenvolgende weergavepasses te vervangen door één weergavepass, kan mengen met 2 bronnen de prestaties en flexibiliteit verbeteren.

Met de nieuwe "dual-source-blending"WebGPU-functie kunt u het WGSL-kenmerk @blend_src op @location(0) gebruiken om de index van de mengbron en de volgende mengfactoren aan te geven: "src1", "one-minus-src1", "src1-alpha" en "one-minus-src1-alpha". Raadpleeg het volgende fragment, het chromestatus-item en issue 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 compiler voor de WebGPU-shader-taal, door een tussentijdse representatie (IR) te introduceren voor apparaten die WebGPU ondersteunen met de Metal-backend. Deze IR, die tussen de abstracte syntaxisboom (AST) van Tint en de Metal-backend-schrijver is geplaatst, maakt de compiler efficiënter en beter onderhoudbaar, wat uiteindelijk zowel ontwikkelaars als gebruikers ten goede komt. Uit eerste tests blijkt dat de nieuwe versie van Tint tot 10 keer sneller is bij de vertaling van WGSL-shaders van Unity naar MSL.

Een stroomdiagram toont het proces om WGSL-shadercode om te zetten in instructies op laag niveau voor de GPU.
Maak een renderpipeline 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. Ga naar probleem 42251016.

Beëindiging van GPUAdapter requestAdapterInfo()

De asynchrone methode GPUAdapter requestAdapterInfo() is overbodig, omdat ontwikkelaars GPUAdapterInfo al synchroon kunnen ophalen met het kenmerk GPUAdapter info. Daarom is de niet-standaard GPUAdapter-methode requestAdapterInfo() nu beëindigd. Ga naar Beëindigingsmelding.

De DevTools-console toont een waarschuwing voor beëindiging voor requestAdapterInfo().
Waarschuwing voor beëindigde functie voor requestAdapterInfo() in Chrome DevTools.

Updates voor Dawn

De C API webgpu.h heeft enkele naamgevingsconventies gedefinieerd voor extensiestructuren. Bekijk 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 van WGPUDepthStencilStatedepthWriteEnabled wordt gewijzigd van Booleaans naar WGPUOptionalBool om de 3 mogelijke statussen (waar, onwaar en ongedefinieerd) beter weer te geven, net als in de JavaScript API. Ga voor meer informatie naar het volgende codefragment en de webgpu-headers PR.

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

Dit zijn maar enkele van de belangrijkste punten. Neem de uitgebreide lijst met doorvoeringen door.

Wat is er nieuw in WebGPU?

Een lijst met alles wat is behandeld in de serie Nieuw in WebGPU.

Chrome 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

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