Wat is er nieuw in WebGPU (Chrome 135)

François Beaufort
François Beaufort

Gepubliceerd: 26 maart 2025

Sta het maken van een pijplijnindeling met null-bindgroepindeling toe

Voorheen vereiste het maken van een lege bindgroeplay-out het toevoegen van een bindgroep zonder bindingen, wat lastig was. Dit is niet langer nodig omdat null-bindgroeplay-outs nu zijn toegestaan ​​en genegeerd bij het maken van een pijplijnlay-out. Dit zou de ontwikkeling gemakkelijker moeten maken.

U wilt bijvoorbeeld mogelijk een pijplijn maken die alleen de bindingsgroeplay-outs 0 en 2 gebruikt. U kunt bindingsgroepslay-out 1 toewijzen aan fragmentatie van gegevens en bindingsgroepslay-out 2 aan hoekpuntgegevens, en vervolgens renderen zonder een fragmentarcering. Zie uitgave 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 zichtvensters voorbij de grenzen van de weergavedoelen reiken

De vereisten voor viewport-validatie zijn versoepeld, zodat viewports de grenzen van het renderdoel kunnen overschrijden. Dit is vooral handig voor het tekenen van 2D-elementen, zoals de gebruikersinterface, die zich buiten het huidige venster kunnen uitstrekken. Zie uitgave 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 al de vlag chrome://flags/#enable-unsafe-webgpu maakt nu alle mogelijkheden mogelijk 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 die geen ondersteuning voor Vulkan hebben. Zie het volgende voorbeeld en geef Dawn:389876644 op.

// 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.
Info over compatibiliteitsmodusadapter in webgpureport.org .

Verwijder de 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, namelijk het regelen van de hoeveelheid gegevens die tussen shader-fasen 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 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 het voornemen om 364338810 te verwijderen en uit te geven .

Dawn-updates

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

De structuren WGPURequiredLimits en WGPUSupportedLimits zijn afgevlakt tot WGPULimits . Zie uitgave 374263404 .

De volgende structuren zijn hernoemd. Zie uitgave 42240793 .

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

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

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

Dit behandelt slechts enkele van de belangrijkste hoogtepunten. Bekijk de uitgebreide lijst met commits .

Wat is er nieuw in WebGPU

Een lijst met alles wat aan bod komt in de What's New in WebGPU -serie.

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