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.
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 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 OR 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
waar is voor elke actieve aanroep in de subgroep. -
subgroupElect()
: Retourneert true als deze aanroep de laagstesubgroup_invocation_id
heeft onder actieve aanroepen in de subgroep. -
subgroupBroadcastFirst(value)
: Zendtvalue
uit 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
overeenkomt metid
. -
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
overeenkomt metsubgroup_invocation_id - delta
. -
subgroupShuffleDown(value, delta)
: Retourneertvalue
van de actieve aanroep waarvansubgroup_invocation_id
overeenkomt metsubgroup_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 de quad in de X-richting. -
quadSwapY(value)
: Wisseltvalue
tussen aanroepen in de quad in de Y-richting. -
quadSwapDiagonal(value)
: Wisseltvalue
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
- Clipafstanden in WGSL
- GPUCanvasContext getConfiguration()
- Punt- en lijnprimitieven mogen geen diepteafwijking hebben
- Inclusief ingebouwde scanfuncties voor subgroepen
- Experimentele ondersteuning voor indirecte meertrekking
- Compilatieoptie Shader-module strikte wiskunde
- GPUAdapter requestAdapterInfo() verwijderen
- Dawn-updates
Chroom 130
- Mengen met dubbele bron
- Verbeteringen in de compilatietijd van Shader op Metal
- Beëindiging van GPUAdapter requestAdapterInfo()
- Dawn-updates
Chroom 129
- HDR-ondersteuning met canvas-tone mapping-modus
- Uitgebreide ondersteuning voor subgroepen
- Dawn-updates
Chroom 128
- Experimenteren met subgroepen
- Beëindig het instellen van diepteafwijking voor lijnen en punten
- Niet-opgevangen fout verbergen DevTools-waarschuwing als preventieDefault
- WGSL interpoleert eerst de bemonstering en een van beide
- Dawn-updates
Chroom 127
- Experimentele ondersteuning voor OpenGL ES op Android
- GPUAdapter info-kenmerk
- Verbeteringen in de interoperabiliteit van WebAssembly
- Verbeterde opdracht-encoderfouten
- Dawn-updates
Chroom 126
- Verhoog de maxTextureArrayLayers-limiet
- Bufferuploadoptimalisatie voor Vulkan-backend
- Verbeteringen in de compilatietijd van Shader
- Ingezonden opdrachtbuffers moeten uniek zijn
- Dawn-updates
Chroom 125
Chroom 124
- Alleen-lezen en lezen-schrijven opslagtexturen
- Ondersteuning van servicemedewerkers en gedeelde medewerkers
- Nieuwe attributen voor adapterinformatie
- Bugfixes
- Dawn-updates
Chroom 123
- DP4a ingebouwde functies ondersteunen in WGSL
- Onbeperkte pointerparameters in WGSL
- Syntaxissuiker voor het derefereren van composieten in WGSL
- Afzonderlijke alleen-lezen-status 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 WebGPU op Android
- Gebruik DXC in plaats van FXC voor shader-compilatie op Windows
- Tijdstempelquery's in reken- en renderpassen
- Standaardingangspunten voor shadermodules
- Ondersteuning display-p3 als GPUExternalTexture-kleurruimte
- Informatie over geheugenheaps
- Dawn-updates
Chroom 120
- Ondersteuning voor 16-bit drijvende-kommawaarden in WGSL
- Verleg de grenzen
- Veranderingen in de staat van de diepte-stencil
- Updates van adapterinformatie
- Kwantisering van tijdstempelquery's
- Lenteschoonmaakfuncties
Chroom 119
- Filterbare 32-bit float-texturen
- unorm10-10-10-2 hoekpuntformaat
- 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
- Schakel hoekpuntbuffer uit
- Schakel de bindingsgroep uit
- Stil fouten bij het maken van asynchrone pijplijnen wanneer het apparaat verloren gaat
- Updates voor het maken van SPIR-V-shadermodules
- Verbetering van de ontwikkelaarservaring
- Caching van pijplijnen met automatisch gegenereerde lay-out
- Dawn-updates
Chroom 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice()
- Houd het afspelen van video soepel als
importExternalTexture()
wordt aangeroepen - Spec-conformiteit
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- Krijg standaard een discrete GPU op wisselstroom
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 114
- Optimaliseer JavaScript
- getCurrentTexture() op een niet-geconfigureerd canvas genereert InvalidStateError
- WGSL-updates
- Dawn-updates