Experimenteren met subgroepen
De subgroepenfunctie maakt parallellisme op SIMD-niveau mogelijk, waardoor threads binnen een groep kunnen communiceren en collectieve wiskundige bewerkingen kunnen uitvoeren (bijvoorbeeld het berekenen van de som van 16 getallen). Dit biedt een zeer efficiënte vorm van cross-thread datadeling.
Een minimale implementatie van het subgroepenvoorstel is beschikbaar voor lokaal testen achter de vlag "Unsafe WebGPU Support" op chrome://flags/#enable-unsafe-webgpu
.
U kunt ook subgroepen op uw site uitproberen met echte gebruikers door u aan te melden voor de origin-proefperiode . Lees Aan de slag met origin-tests voor instructies over hoe u uw site kunt voorbereiden op het gebruik van origin-tests. De Origin-proefperiode loopt van Chrome 128 tot 131 (eindigt op 19 februari 2025). Zie Intentie om te experimenteren .
Wanneer de functie "subgroups"
beschikbaar is in een GPUAdapter
, vraagt u een GPUDevice
met deze functie aan om ondersteuning voor subgroepen te krijgen in WGSL en controleert u de minSubgroupSize
en maxSubgroupSize
limieten.
U moet deze extensie ook expliciet inschakelen in uw WGSL-code met enable subgroups;
. Indien ingeschakeld, krijgt u toegang tot de volgende toevoegingen:
-
subgroup_invocation_id
: een ingebouwde waarde voor de index van de thread binnen de subgroep. -
subgroup_size
: Een ingebouwde waarde voor toegang tot de subgroepgrootte. -
subgroupBallot(value)
: Retourneert een set bitvelden waarbij de bit die overeenkomt metsubgroup_invocation_id
1 is alsvalue
waar is voor die actieve aanroep en anders 0. -
subgroupBroadcast(value, id)
: Zendt devalue
uit van de aanroep, waarbijsubgroup_invocation_id
overeenkomt metid
voor alle aanroepen binnen de subgroep. Opmerking:id
moet een constante tijdens het compileren zijn.
Meer ingebouwde functies zoals subgroupAdd
, subgroupAll
, subgroupElect
en subgroupShuffle
zullen in de toekomst worden toegevoegd. Zie uitgave 354738715 .
Om f16 in subgroepbewerkingen toe te staan, vraagt u een GPUDevice
aan met de functies "subgroups"
, "subgroups-f16"
en "shader-f16"
, en schakelt u deze vervolgens in uw WGSL-code in met enable f16, subgroups, subgroups_f16;
.
Het volgende codefragment biedt een basis om aan te sleutelen en het potentieel van subgroepen te ontdekken.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
var<workgroup> wgmem : u32;
@group(0) @binding(0)
var<storage, read> inputs : array<u32>;
@group(0) @binding(1)
var<storage, read_write> output : array<u32>;
@compute @workgroup_size(64)
fn main(@builtin(subgroup_size) subgroupSize : u32,
@builtin(subgroup_invocation_id) id : u32,
@builtin(local_invocation_index) lid : u32) {
// One thread per workgroup writes the value to workgroup memory.
if (lid == 0) {
wgmem = inputs[lid];
}
workgroupBarrier();
var v = 0u;
// One thread per subgroup reads the value from workgroup memory
// and shares that value with every other thread in the subgroup
// to reduce local memory bandwidth.
if (id == 0) {
v = wgmem;
}
v = subgroupBroadcast(v, 0);
output[lid] = v;
}`,
});
// Send the appropriate commands to the GPU...
Beëindig het instellen van diepteafwijking voor lijnen en punten
Een WebGPU-specificatiewijziging maakt het een validatiefout om depthBias
, depthBiasSlopeScale
en depthBiasClamp
in te stellen op een waarde die niet nul is wanneer de topologie voor een renderpijplijn een lijn- of punttype is. Om ontwikkelaars voldoende tijd te geven om hun code bij te werken, wordt er in de DevTools Console een waarschuwing weergegeven over deze aanstaande validatie, terwijl de waarden in deze omstandigheden ook op 0 worden gedwongen. Zie uitgave 352567424 .
Niet-opgevangen fout verbergen DevTools-waarschuwing als preventieDefault
In de DevTools Console worden waarschuwingen voor uncapturederror
-gebeurtenissen niet langer weergegeven als er een gebeurtenislistener voor uncapturederror
is geregistreerd en de methode Event preventDefault()
is aangeroepen binnen de callback van de gebeurtenislistener. Dit gedrag komt overeen met de afhandeling van gebeurtenissen in JavaScript. Zie het volgende voorbeeld en geef nummer 40263619 uit .
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.addEventListener("uncapturederror", (event) => {
// Prevents browser warning to show up in the DevTools Console.
event.preventDefault();
// TODO: Handle event.error
});
WGSL interpoleert eerst de bemonstering en een van beide
Met het WGSL- interpolate
kunt u door de gebruiker gedefinieerde IO-gegevensinterpolatie beheren. Nu interpoleren de nieuwe bemonsteringsparameters first
(standaard) en either
u extra controle: gebruikt first
de waarde van het eerste hoekpunt van de primitief, terwijl either
het eerste ofwel het laatste hoekpunt wordt toegestaan. Zie uitgave 340278447 .
Dawn-updates
De implementatie van Dawn's WGPUFuture voor het afhandelen van asynchrone bewerkingen is nu voltooid. Belangrijke concepten zijn onder meer wgpuInstanceProcessEvents voor opportunistische gebeurtenisverwerking en WGPUCallbackMode voor het definiëren van callback-locaties. WGPUFuture betekent eenmalige gebeurtenissen met een oneindige levensduur, en wgpuInstanceWaitAny wacht op de voltooiing van een toekomst of een time-out. Zie uitgave 42240932 .
De waarde CompositeAlphaMode::Auto
wordt nu niet gerapporteerd door Surface::GetCapabilities()
. Het is nog steeds geldig en gelijkwaardig aan Surface::GetCapabilities().alphaMode[0]
. Zie nummer 292 .
De OpenGL-backend ondersteunt nu Surface
met een y-flip-blit voor elke Present()
-aanroep. Zie uitgave 344814083 .
De Adapter::GetProperties()
methode is verouderd ten gunste van het gebruik van Adapter::GetInfo()
.
Jaswant, een externe bijdrager, heeft alle CMake-bestanden herschreven, waardoor ze gemakkelijker kunnen worden bijgewerkt en pre-builds mogelijk zijn. Bekijk de snelstartgids voor het gebruik van Dawn in CMake-projecten.
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
- Wijzigingen 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