Wat is er nieuw in WebGPU (Chrome 135)

François Beaufort
François Beaufort

Gepubliceerd: 26 maart 2025

Toestaan ​​om pijplijnlay-out te maken met een lay-out voor null-bindgroepen

Voorheen vereiste het maken van een lege bindgroeplayout het toevoegen van een bindgroep met nul bindingen, wat onhandig was. Dit is niet langer nodig, omdat null bindgroeplayouts worden toegestaan ​​en genegeerd bij het maken van een pipelinelayout. Dit zou de ontwikkeling moeten vereenvoudigen.

U wilt bijvoorbeeld een pijplijn maken die alleen bindgroeplayouts 0 en 2 gebruikt. U kunt bindgroeplayout 1 toewijzen aan fragmentgegevens en bindgroeplayout 2 aan vertexgegevens, en vervolgens renderen zonder fragmentshader. Zie probleem 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],
});

Laat viewports zich uitstrekken voorbij de grenzen van de renderdoelen

De vereisten voor viewportvalidatie zijn versoepeld, zodat viewports verder kunnen reiken dan de renderdoelgrenzen. Dit is vooral handig voor het tekenen van 2D-elementen, zoals gebruikersinterfaces, die mogelijk buiten de huidige viewport 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

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

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

Verwijder maxInterStageShaderComponents-limiet

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

  • Redundantie met maxInterStageShaderVariables : Deze limiet dient al een soortgelijk doel: het regelen 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 klein en kunnen ze effectief worden beheerd binnen de maxInterStageShaderVariables -limiet.
  • Vereenvoudiging: Het verwijderen van maxInterStageShaderComponents stroomlijnt de shaderinterface 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 verwijderen 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 is nu WGPUTexelCopyBufferInfo
  • WGPUImageCopyTexture is nu WGPUTexelCopyTextureInfo
  • WGPUTextureDataLayout is nu WGPUTexelCopyBufferLayout

De leden subgroupMinSize en subgroupMaxSize zijn toegevoegd aan de struct WGPUAdapterInfo . Zie webgpu-headers PR .

Het traceren van Dawn API-gebruik in Metal is nu mogelijk wanneer u uw programma uitvoert met de omgevingsvariabele DAWN_TRACE_FILE_BASE Deze variabele slaat een .gputrace-bestand op dat later in XCode's Metal Debugger kan worden geladen. Zie de documentatie voor Dawn Debugging .

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