Wat is er nieuw in WebGPU (Chrome 135)

François Beaufort
François Beaufort

Gepubliceerd: 26 maart 2025

Maakt het mogelijk om een ​​pipeline-layout te creëren met een null-bindgroep-layout.

Voorheen was het onhandig om een ​​lege bindgroeplayout te maken door een bindgroep met nul bindingen toe te voegen. Dit is nu niet meer nodig, omdat lege bindgroeplayouts zijn toegestaan ​​en genegeerd worden bij het maken van een pipelinelayout. Dit zou de ontwikkeling moeten vereenvoudigen.

Je zou bijvoorbeeld een pipeline kunnen maken die alleen gebruikmaakt van bind group layouts 0 en 2. Je zou bind group layout 1 kunnen toewijzen aan fragmentdata en bind group layout 2 aan vertexdata, en vervolgens renderen zonder fragmentshader. Zie issue 377836524 .

const bgl0 = myDevice.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = myDevice.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = myDevice.createBindGroupLayout({ entries: myVertexEntries });

// Create a pipeline layout that will be used to render without a fragment shader.
const myPipelineLayout = myDevice.createPipelineLayout({
  bindGroupLayouts: [bgl0, null, bgl2],
});

Sta toe dat viewports buiten de grenzen van de render targets uitsteken.

De vereisten voor viewportvalidatie zijn versoepeld, waardoor viewports nu buiten de grenzen van het rendertarget kunnen reiken. Dit is vooral handig voor het tekenen van 2D-elementen zoals gebruikersinterfaces die buiten de huidige viewport kunnen vallen. Zie issue 390162929 .

const passEncoder = myCommandEncoder.beginRenderPass({
  colorAttachments: [
    {
      view: myColorTexture.createView(),
      loadOp: "clear",
      storeOp: "store",
    },
  ],
});

// Set a viewport that extends past the render target's bounds by 8 pixels
// in all directions.
passEncoder.setViewport(
  /*x=*/ -8,
  /*y=*/ -8,
  /*width=*/ myColorTexture.width + 16,
  /*height=*/ myColorTexture.height + 16,
  /*minDepth=*/ 0,
  /*maxDepth=*/ 1,
);

// Draw geometry and complete the render pass as usual.

Gemakkelijkere toegang tot de experimentele compatibiliteitsmodus op Android.

De vlag chrome://flags/#enable-unsafe-webgpu maakt nu alle mogelijkheden mogelijk die nodig zijn voor de experimentele WebGPU-compatibiliteitsmodus op Android. Hiermee kunt u een GPUAdapter in compatibiliteitsmodus aanvragen met de optie featureLevel: "compatibility" en zelfs toegang krijgen tot de OpenGL ES-backend op apparaten die geen ondersteuning bieden voor Vulkan. Zie het volgende voorbeeld en issue dawn:389876644 .

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
De WebGPU-rapportpagina toont een GPUAdapter in compatibiliteitsmodus op een Android-apparaat.
Informatie over de compatibiliteitsmodusadapter is te vinden op webgpureport.org .

Verwijder de maxInterStageShaderComponents-limiet

Zoals eerder aangekondigd , wordt de limiet maxInterStageShaderComponents verwijderd vanwege een combinatie van factoren:

  • Redundantie met maxInterStageShaderVariables : Deze limiet dient al een vergelijkbaar doel, namelijk het beheersen van de hoeveelheid gegevens die tussen shaderfasen wordt doorgegeven.
  • Kleine verschillen: Hoewel er kleine verschillen zijn in de manier waarop de twee limieten worden berekend, zijn deze verschillen gering en kunnen ze effectief worden beheerd binnen de maxInterStageShaderVariables -limiet.
  • Vereenvoudiging: Het verwijderen van maxInterStageShaderComponents stroomlijnt de shader-interface en vermindert de complexiteit voor ontwikkelaars. In plaats van twee afzonderlijke limieten met subtiele verschillen te beheren, kunnen ze zich concentreren op de beter benoemde en uitgebreidere maxInterStageShaderVariables .

Zie voornemen tot verwijdering en probleem 364338810 .

Dawn-updates

Het is niet langer mogelijk om een ​​filterende sampler te gebruiken om een ​​dieptetextuur te samplen. Ter herinnering: een dieptetextuur kan alleen worden gebruikt met een niet-filterende sampler of een vergelijkingssampler. Zie probleem 379788112 .

De structuren WGPURequiredLimits en WGPUSupportedLimits zijn samengevoegd tot WGPULimits . Zie issue 374263404 .

De volgende structuren zijn hernoemd. Zie probleem 42240793 .

  • WGPUImageCopyBuffer heet nu WGPUTexelCopyBufferInfo
  • WGPUImageCopyTexture heet nu WGPUTexelCopyTextureInfo
  • WGPUTextureDataLayout heet nu WGPUTexelCopyBufferLayout

De leden subgroupMinSize en subgroupMaxSize zijn toegevoegd aan de WGPUAdapterInfo structuur. Zie de pull request webgpu-headers .

Het traceren van het gebruik van de Dawn API in Metal is nu mogelijk door uw programma uit te voeren met de omgevingsvariabele DAWN_TRACE_FILE_BASE Hiermee wordt een .gputrace-bestand opgeslagen dat later in de Metal-debugger van Xcode kan worden geladen. Zie de documentatie over het debuggen van Dawn .

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