Wat is er nieuw in WebGPU (Chrome 129)

François Beaufort
François Beaufort

HDR-ondersteuning met canvas-tone mapping-modus

Webontwikkelaars hebben beperkte mogelijkheden voor het leveren van HDR-inhoud, waarbij ze voornamelijk vertrouwen op <img> en <video> -elementen. Het <canvas> -element blijft echter beperkt tot SDR. Om dynamische HDR-inhoud binnen een canvas te genereren, moet de inhoud ervan worden gecodeerd als een HDR-afbeelding voordat deze wordt weergegeven (zie voor een voorbeeld deze demo ).

Met de nieuwe GPUCanvasToneMappingMode parameter in de WebGPU-canvasconfiguratie kan WebGPU nu kleuren tekenen die helderder zijn dan wit ( #FFFFFF ). Dit gebeurt via de volgende modi:

  • "standard" : het standaardgedrag beperkt de inhoud tot het SDR-bereik van het scherm. Deze modus wordt bereikt door alle kleurwaarden in de kleurruimte van het scherm vast te zetten op het interval [0, 1] .

  • "extended" : ontgrendelt het volledige HDR-bereik van het scherm. Deze modus komt overeen met "standard" in het bereik [0, 1] van het scherm. Er wordt geklemd of geprojecteerd op het uitgebreide dynamische bereik van het scherm, maar niet op [0, 1] .

In het volgende codefragment ziet u hoe u een canvas configureert voor een hoog dynamisch bereik.

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");

context.configure({
  device,
  format: "rgba16float",
  toneMapping: { mode: "extended" },
});

Verken HDR met WebGPU door het Particles (HDR)-voorbeeld en het WebGPU HDR-voorbeeld te bekijken en het chromestatus-item te bekijken.

Een laptop met een HDR-scherm dat een levendig beeld weergeeft.
Het deeltjesmonster (HDR) dat wordt weergegeven op een HDR-scherm.

Uitgebreide ondersteuning voor subgroepen

Na de aankondiging van experimenten met subgroepen zijn de ingebouwde functies van de subgroepen nu beschikbaar voor gebruik in zowel compute shaders als fragment shaders. Ze zijn niet langer beperkt tot alleen computer-shaders. Zie uitgave 354738715 .

Houd er rekening mee dat de ingebouwde waarde subgroup_size momenteel bugs bevat in fragment-shaders. Vermijd het voorlopig.

Verder zijn de volgende ingebouwde functies van de subgroep toegevoegd:

  • subgroupAdd(value) : Retourneert de som van alle actieve value in de subgroep.
  • subgroupExclusiveAdd(value) : Retourneert de exclusieve scansom van alle actieve value in de subgroep.
  • subgroupMul(value) : Retourneert de vermenigvuldiging van alle actieve value in de subgroep.
  • subgroupExclusiveMul(value) : Retourneert de exclusieve scanvermenigvuldiging van alle actieve value in de subgroep.

  • subgroupAnd(value) : Retourneert de binaire AND van alle actieve value in de subgroep.
  • subgroupOr(value) : Retourneert de binaire OR van alle actieve value in de subgroep.
  • subgroupXor(value) : Retourneert de binaire XOR van alle actieve value in de subgroep.

  • subgroupMin(value) : Retourneert de minimale waarde van alle actieve value in de subgroep.
  • subgroupMax(value) : Retourneert de maximale waarde van alle actieve value in de subgroep.

  • subgroupAll(value) : Retourneert true als value true is voor alle actieve aanroepen in de subgroep.
  • subgroupAny(value) : Retourneert true als value waar is voor elke actieve aanroep in de subgroep.

  • subgroupElect() : Retourneert true als deze aanroep de laagste subgroup_invocation_id heeft onder actieve aanroepen in de subgroep.
  • subgroupBroadcastFirst(value) : Zendt value uit van de actieve aanroep met de laagste subgroup_invocation_id in de subgroep naar alle andere actieve aanroepen.

  • subgroupShuffle(value, id) : Retourneert value van de actieve aanroep waarvan subgroup_invocation_id overeenkomt met id .
  • subgroupShuffleXor(value, mask) : Retourneert value van de actieve aanroep waarvan subgroup_invocation_id overeenkomt met subgroup_invocation_id ^ mask . mask moet dynamisch uniform zijn.
  • subgroupShuffleUp(value, delta) : Retourneert value van de actieve aanroep waarvan subgroup_invocation_id overeenkomt met subgroup_invocation_id - delta .
  • subgroupShuffleDown(value, delta) : Retourneert value van de actieve aanroep waarvan subgroup_invocation_id overeenkomt met subgroup_invocation_id + delta .

  • quadBroadcast(value, id) : Zendt value uit van de quad-aanroep met id gelijk aan id . id moet een constante expressie zijn.
  • quadSwapX(value) : Wisselt value tussen aanroepen in de quad in de X-richting.
  • quadSwapY(value) : Wisselt value tussen aanroepen in de quad in de Y-richting.
  • quadSwapDiagonal(value) : Wisselt value diagonaal tussen aanroepen in de quad.

Dawn-updates

De wgpu::PrimitiveState -structuur bevat nu rechtstreeks de instelling voor diepteclipcontrole, waardoor de noodzaak voor een afzonderlijke wgpu::PrimitiveDepthClipControl -structuur wordt geëlimineerd. Zie het volgende codefragment en de webgpu-headers PR voor meer informatie.

// Before
wgpu::PrimitiveState primitive = {};
wgpu::PrimitiveDepthClipControl depthClipControl;
depthClipControl.unclippedDepth = true;
primitive.nextInChain = &depthClipControl;
// Now
wgpu::PrimitiveState primitive = {};
primitive.unclippedDepth = true;

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 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