HDR-ondersteuning met canvas-toonmappingmodus
Webontwikkelaars hebben beperkte mogelijkheden voor het leveren van HDR-content en vertrouwen voornamelijk op <img>
en <video>
-elementen. Het <canvas>
-element blijft echter beperkt tot SDR. Om dynamische HDR-content binnen een canvas te genereren, moet de inhoud ervan worden gecodeerd als een HDR-afbeelding voordat deze kan worden weergegeven (zie deze demo voor een voorbeeld).
De nieuwe GPUCanvasToneMappingMode
-parameter in de WebGPU-canvasconfiguratie stelt WebGPU nu in staat om kleuren helderder dan wit te tekenen ( #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 te beperken tot het interval[0, 1]
."extended"
: ontgrendelt het volledige HDR-bereik van het scherm. Deze modus komt overeen met"standard"
in het[0, 1]
-bereik van het scherm. Klemmen of projecteren gebeurt op het uitgebreide dynamische bereik van het scherm, maar niet op[0, 1]
.
Het volgende codefragment laat zien 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" },
});
Ontdek HDR met WebGPU door het Particles (HDR)-voorbeeld en WebGPU HDR-voorbeeld te bekijken en bekijk de vermelding chromestatus .

Uitgebreide subgroepenondersteuning
Na de aankondiging van de experimenten met subgroepen zijn de ingebouwde subgroepfuncties nu beschikbaar voor gebruik in zowel compute shaders als fragment shaders. Ze zijn niet langer beperkt tot alleen compute shaders. Zie issue 354738715 .
Houd er rekening mee dat de ingebouwde waarde subgroup_size
momenteel buggy is in fragment shaders. Vermijd dit voorlopig.
Verder zijn de volgende subgroep ingebouwde functies toegevoegd:
-
subgroupAdd(value)
: Retourneert de som van alle actievevalue
in de subgroep. -
subgroupExclusiveAdd(value)
: Retourneert de exclusieve scansom van alle actievevalue
in de subgroep. -
subgroupMul(value)
: Retourneert de vermenigvuldiging van alle actievevalue
in de subgroep. -
subgroupExclusiveMul(value)
: Retourneert de exclusieve scanvermenigvuldiging van alle actievevalue
in de subgroep. -
subgroupAnd(value)
: retourneert de binaire AND van alle actievevalue
in de subgroep. -
subgroupOr(value)
: Retourneert de binaire OF van alle actievevalue
in de subgroep. -
subgroupXor(value)
: retourneert de binaire XOR van alle actievevalue
in de subgroep. -
subgroupMin(value)
: Retourneert de minimale waarde van alle actievevalue
in de subgroep. -
subgroupMax(value)
: Retourneert de maximale waarde van alle actievevalue
in de subgroep. -
subgroupAll(value)
: Retourneert true alsvalue
true is voor alle actieve aanroepen in de subgroep. -
subgroupAny(value)
: Retourneert true alsvalue
true is voor een actieve aanroep in de subgroep. -
subgroupElect()
: Retourneert true als deze aanroep de laagstesubgroup_invocation_id
heeft van alle actieve aanroepen in de subgroep. -
subgroupBroadcastFirst(value)
: Verzendtvalue
van de actieve aanroep met de laagstesubgroup_invocation_id
in de subgroep naar alle andere actieve aanroepen. -
subgroupShuffle(value, id)
: Retourneertvalue
van de actieve aanroep waarvansubgroup_invocation_id
overeenkomtid
. -
subgroupShuffleXor(value, mask)
: retourneertvalue
van de actieve aanroep waarvansubgroup_invocation_id
overeenkomt metsubgroup_invocation_id ^ mask
.mask
moet dynamisch uniform zijn. -
subgroupShuffleUp(value, delta)
: Retourneertvalue
van de actieve aanroep waarvansubgroup_invocation_id
overeenkomtsubgroup_invocation_id - delta
. -
subgroupShuffleDown(value, delta)
: Retourneertvalue
van de actieve aanroep waarvansubgroup_invocation_id
overeenkomtsubgroup_invocation_id + delta
. -
quadBroadcast(value, id)
: Zendtvalue
uit van de quad-aanroep met id gelijk aanid
.id
moet een constante-expressie zijn. -
quadSwapX(value)
: Wisseltvalue
tussen aanroepen in het quad in de X-richting. -
quadSwapY(value)
: wisseltvalue
tussen aanroepen in het quad in de Y-richting. -
quadSwapDiagonal(value)
: Wisseltvalue
diagonaal tussen aanroepen in het vierkant.
Dawn-updates
De struct wgpu::PrimitiveState
bevat nu direct de instelling voor diepte-clipcontrole, waardoor een aparte struct wgpu::PrimitiveDepthClipControl
niet meer nodig is. 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 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
- Apparaatverzoeken verbruiken adapter
- Afkorting voor het gebruik van textuur waar textuurweergave wordt gebruikt
- WGSL textureSampleLevel ondersteunt 1D-texturen
- Verouder het gebruik van bgra8unorm-alleen-lezen-opslagtextuur
- GPUAdapter isFallbackAdapter-kenmerk verwijderen
- Dawn-updates
Chroom 139
- 3D-textuurondersteuning voor gecomprimeerde BC- en ASTC-formaten
- Nieuwe functie 'kernfuncties en beperkingen'
- Origin-proefversie voor WebGPU-compatibiliteitsmodus
- Dawn-updates
Chroom 138
- Afkorting voor het gebruik van buffer als bindingsbron
- Wijzigingen in de groottevereisten voor buffers die bij het aanmaken in kaart zijn gebracht
- Architectuurrapport voor recente GPU's
- Verouder GPUAdapter isFallbackAdapter-kenmerk
- Dawn-updates
Chroom 137
- Gebruik textuurweergave voor externe textuurbinding
- Buffers kopiëren zonder offsets en grootte op te geven
- WGSL-werkgroepUniformLoad met behulp van een pointer naar atomaire
- GPUAdapterInfo powerPreference-kenmerk
- Verwijder GPURequestAdapterOptions compatibilityMode-kenmerk
- Dawn-updates
Chroom 136
- GPUAdapterInfo isFallbackAdapter-kenmerk
- Verbeteringen in de shadercompilatietijd op D3D12
- Canvasafbeeldingen opslaan en kopiëren
- Beperkingen voor de liftcompatibiliteitsmodus
- Dawn-updates
Chroom 135
- Toestaan om pijplijnlay-out te maken met een lay-out voor null-bindgroepen
- Laat viewports zich uitstrekken voorbij de grenzen van de renderdoelen
- Gemakkelijkere toegang tot de experimentele compatibiliteitsmodus op Android
- Verwijder maxInterStageShaderComponents-limiet
- Dawn-updates
Chroom 134
- Verbeter machine learning-workloads met subgroepen
- Verwijder float-filterbare textuurtypen die ondersteuning bieden als mengbaar
- Dawn-updates
Chroom 133
- Extra unorm8x4-bgra en 1-component vertex-formaten
- Toestaan dat onbekende limieten worden aangevraagd met een ongedefinieerde waarde
- Wijzigingen in de WGSL-uitlijningsregels
- WGSL-prestatiewinst met weggooien
- Gebruik VideoFrame displaySize voor externe texturen
- Verwerk afbeeldingen met niet-standaardoriëntaties met copyExternalImageToTexture
- Verbetering van de ontwikkelaarservaring
- Compatibiliteitsmodus inschakelen met featureLevel
- Opschonen van experimentele subgroepkenmerken
- Verouder maxInterStageShaderComponents-limiet
- Dawn-updates
Chroom 132
- Gebruik van textuurweergave
- 32-bits float-texturen mengen
- GPUDevice adapterInfo-kenmerk
- Het configureren van de canvascontext met een ongeldige indeling levert een JavaScript-fout op
- Filteren van samplerbeperkingen op texturen
- Uitgebreide subgroepsexperimenten
- Verbetering van de ontwikkelaarservaring
- Experimentele ondersteuning voor 16-bits genormaliseerde textuurformaten
- Dawn-updates
Chroom 131
- Clipafstanden in WGSL
- GPUCanvasContext getConfiguration()
- Punt- en lijnprimitieven mogen geen dieptebias hebben
- Inclusief ingebouwde scanfuncties voor subgroepen
- Experimentele ondersteuning voor multi-draw indirect
- Shadermodule-compilatieoptie strikte wiskunde
- GPUAdapter requestAdapterInfo() verwijderen
- Dawn-updates
Chroom 130
- Menging van dubbele bronnen
- Verbeteringen in de shadercompilatietijd op Metal
- Veroudering van GPUAdapter requestAdapterInfo()
- Dawn-updates
Chroom 129
Chroom 128
- Experimenteren met subgroepen
- Diepteafwijking voor lijnen en punten afschaffen
- Verberg niet-vastgelegde fout DevTools-waarschuwing als preventDefault
- WGSL interpoleert eerst de bemonstering en ofwel
- Dawn-updates
Chroom 127
- Experimentele ondersteuning voor OpenGL ES op Android
- GPUAdapter info-kenmerk
- Verbeteringen in WebAssembly-interoperabiliteit
- Verbeterde opdrachtencoderfouten
- Dawn-updates
Chroom 126
- Verhoog maxTextureArrayLayers-limiet
- Bufferuploadoptimalisatie voor Vulkan-backend
- Verbeteringen in de compilatietijd van shaders
- Ingediende opdrachtbuffers moeten uniek zijn
- Dawn-updates
Chroom 125
Chroom 124
- Alleen-lezen en lees-schrijf opslagtexturen
- Ondersteuning van servicemedewerkers en gedeelde werknemers
- Nieuwe adapterinformatie-attributen
- Bugfixes
- Dawn-updates
Chroom 123
- Ondersteuning voor ingebouwde DP4a-functies in WGSL
- Onbeperkte pointerparameters in WGSL
- Syntaxissuiker voor het derefereren van composieten in WGSL
- Afzonderlijke alleen-lezenstatus voor stencil- en diepteaspecten
- Dawn-updates
Chroom 122
- Vergroot het bereik met de compatibiliteitsmodus (functie in ontwikkeling)
- Verhoog de maxVertexAttributes-limiet
- Dawn-updates
Chroom 121
- Ondersteuning voor WebGPU op Android
- Gebruik DXC in plaats van FXC voor shadercompilatie op Windows
- Tijdstempelquery's in compute- en renderpassen
- Standaard toegangspunten tot shadermodules
- Ondersteuning display-p3 als GPUExternalTexture-kleurruimte
- Geheugenstapels info
- Dawn-updates
Chroom 120
- Ondersteuning voor 16-bits drijvende-kommawaarden in WGSL
- Verleg de grenzen
- Wijzigingen in de dieptestencilstatus
- Adapterinformatie-updates
- Kwantificering van tijdstempelquery's
- Voorjaarsschoonmaakfuncties
Chroom 119
- Filterbare 32-bits float-texturen
- unorm10-10-10-2 vertex-formaat
- rgb10a2uint textuurformaat
- Dawn-updates
Chroom 118
- HTMLImageElement en ImageData-ondersteuning in
copyExternalImageToTexture()
- Experimentele ondersteuning voor lees-schrijf- en alleen-lezen-opslagtextuur
- Dawn-updates
Chroom 117
- Vertexbuffer ongedaan maken
- Bindgroep ongedaan maken
- Fouten bij het maken van een asynchrone pijplijn uitschakelen wanneer het apparaat verloren gaat
- Updates voor het maken van SPIR-V shadermodules
- Verbetering van de ontwikkelaarservaring
- Caching-pipelines met automatisch gegenereerde lay-out
- Dawn-updates
Chroom 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice()
- Zorg ervoor dat de videoweergave vloeiend blijft als
importExternalTexture()
wordt aangeroepen - Specificatieconformiteit
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- Standaard discrete GPU op netstroom
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 114
- JavaScript optimaliseren
- getCurrentTexture() op een niet-geconfigureerd canvas genereert InvalidStateError
- WGSL-updates
- Dawn-updates