Nieuw in WebGPU (Chrome 135)

François Beaufort
François Beaufort

Gepubliceerd: 26 maart 2025

Maak pijplijnindeling met null-bindgroepindeling mogelijk

Eerder moest je een bindgroep met 0 bindingen toevoegen om een lege indeling voor een bindgroep te maken. Dit was onhandig. Dit is niet meer nodig omdat indelingen van null-bindingsgroepen nu zijn toegestaan en worden genegeerd als u een pijplijnindeling maakt. Dit maakt de ontwikkeling makkelijker.

U kunt bijvoorbeeld een pijplijn maken die alleen bindgroepindelingen 0 en 2 gebruikt. Je kunt bindgroepindeling 1 toewijzen aan fragmentgegevens en bindgroepindeling 2 aan hoekpuntgegevens en daarna renderen zonder fragmentshader. Ga naar 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],
});

Toestaan dat viewports buiten de grenzen van de weergavedoelen vallen

De vereisten voor viewportvalidatie zijn versoepeld, zodat viewports buiten de grenzen van het weergavedoel kunnen vallen. Dit is vooral handig om 2D-elementen te tekenen, zoals een UI die buiten het huidige kijkvenster kan vallen. Ga naar probleem 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.

Makkelijkere toegang tot de experimentele compatibiliteitsmodus op Android

Met de chrome://flags/#enable-unsafe-webgpu-flag alleen zet je nu alle mogelijkheden aan die nodig zijn voor de experimentele WebGPU-compatibiliteitsmodus op Android. Je kunt een GPUAdapter in de compatibiliteitsmodus aanvragen met de optie featureLevel: "compatibility" en zelfs toegang krijgen tot de OpenGL ES-backend op apparaten die Vulkan niet ondersteunen. Neem het volgende voorbeeld en het probleem dawn:389876644 door.

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

Limiet voor maxInterStageShaderComponents verwijderen

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

  • Redundantie met maxInterStageShaderVariables: Deze limiet dient al een vergelijkbaar doel, namelijk de hoeveelheid gegevens beheren die tussen shaderfasen wordt doorgegeven.
  • Kleine verschillen: Er zijn kleine verschillen in de manier waarop de 2 limieten worden berekend, maar deze verschillen zijn klein en kunnen effectief worden beheerd binnen de limiet van maxInterStageShaderVariables.
  • Vereenvoudiging: Door maxInterStageShaderComponents te verwijderen, wordt de shaderinterface gestroomlijnd en wordt de complexiteit voor ontwikkelaars verminderd. In plaats van 2 afzonderlijke limieten met subtiele verschillen te beheren, kunnen ze zich richten op de beter benoemde en uitgebreidere maxInterStageShaderVariables.

Ga naar Intentie om te verwijderen en Issue 364338810.

Updates voor Dawn

Het is niet meer mogelijk om een filterende sampler te gebruiken om een dieptetextuur te samplen. Een dieptetextuur kan alleen worden gebruikt met een niet-filterende of een vergelijkingssampler. Ga naar probleem 379788112.

De structuren WGPURequiredLimits en WGPUSupportedLimits zijn samengevoegd tot WGPULimits. Ga naar probleem 374263404.

De namen van de volgende structs zijn gewijzigd. Ga naar probleem 42240793.

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

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

Je kunt nu het gebruik van de Dawn API in Metal bijhouden als je je programma uitvoert met de omgevingsvariabele DAWN_TRACE_FILE_BASE. Hiermee wordt een .gputrace-bestand opgeslagen dat je later in de Metal-debugger van Xcode kunt laden. Ga naar de documentatie Fouten opsporen in Dawn.

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