Ondersteuning voor ingebouwde DP4a-functies in WGSL.
DP4a (Dot Product of 4 Elements and Accumulate) verwijst naar een set GPU-instructies die veelvuldig worden gebruikt in deep learning-inferentie voor kwantisering. Het voert efficiënt 8-bits integer dotproducten uit om de berekening van dergelijke int8-gekwantiseerde modellen te versnellen. Het kan (tot 75%) geheugen en netwerkbandbreedte besparen en de prestaties van machine learning-modellen in inferentie verbeteren in vergelijking met hun f32-versie. Daardoor wordt het nu veelvuldig gebruikt in diverse populaire AI-frameworks.
Wanneer de WGSL -taalextensie "packed_4x8_integer_dot_product" aanwezig is in navigator.gpu.wgslLanguageFeatures , kunt u nu 32-bits integer scalaire waarden, die 4-componenten vectoren van 8-bits integers bevatten, gebruiken als invoer voor de dotproductinstructies in uw WGSL-shadercode met de ingebouwde functies dot4U8Packed en dot4I8Packed . U kunt ook inpak- en uitpakinstructies gebruiken met ingepakte 4-componenten vectoren van 8-bits integers met de ingebouwde WGSL-functies pack4xI8 , pack4xU8 , pack4xI8Clamp , pack4xU8Clamp , unpack4xI8 en unpack4xU8 .
Het is aan te raden een `requires`-richtlijn te gebruiken om de mogelijke niet-draagbaarheid aan te geven met requires packed_4x8_integer_dot_product; bovenaan uw WGSL-shadercode. Zie het volgende voorbeeld en voer het commando `tint:1497` uit .
if (!navigator.gpu.wgslLanguageFeatures.has("packed_4x8_integer_dot_product")) {
throw new Error(`DP4a built-in functions are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires packed_4x8_integer_dot_product;
fn main() {
const result: u32 = dot4U8Packed(0x01020304u, 0x02040405u); // 42
}`,
});
Speciale dank aan het Web Graphics-team van Intel in Shanghai voor hun inzet bij de realisatie van deze specificatie en implementatie!
Onbeperkte pointerparameters in WGSL
De WGSL -taalextensie "unrestricted_pointer_parameters" versoepelt de beperkingen op welke pointers aan WGSL-functies kunnen worden doorgegeven:
Parameterpointers van
storage,uniformenworkgroupnaar door de gebruiker gedeclareerde functies.Pointers naar structuurleden en array-elementen doorgeven aan door de gebruiker gedeclareerde functies.
Bekijk Pointers als functieparameters | Rondleiding door WGSL voor meer informatie.
Deze functie kan worden gedetecteerd met behulp van navigator.gpu.wgslLanguageFeatures . Het is aan te raden om altijd een `requires`-richtlijn te gebruiken om de mogelijke niet-portabiliteit aan te geven met requires unrestricted_pointer_parameters; bovenaan uw WGSL-shadercode. Zie het volgende voorbeeld, de wijzigingen in de WGSL-specificatie en issue tint:2053 .
if (!navigator.gpu.wgslLanguageFeatures.has("unrestricted_pointer_parameters")) {
throw new Error(`Unrestricted pointer parameters are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires unrestricted_pointer_parameters;
@group(0) @binding(0) var<storage, read_write> S : i32;
fn func(pointer : ptr<storage, i32, read_write>) {
*pointer = 42;
}
@compute @workgroup_size(1)
fn main() {
func(&S);
}`
});
Syntactische suiker voor het dereferentiëren van samengestelde typen in WGSL
Wanneer de WGSL -taalextensie "pointer_composite_access" aanwezig is in navigator.gpu.wgslLanguageFeatures , ondersteunt uw WGSL-shadercode nu toegang tot componenten van complexe gegevenstypen met dezelfde puntnotatie ( . ), ongeacht of u direct met de gegevens werkt of met een pointer ernaar. Zo werkt het:
Als
fooeen pointer is:foo.baris een handigere manier om(*foo).barte schrijven. De asterisk (*) zou normaal gesproken nodig zijn om de pointer om te zetten in een "referentie" die kan worden gedereferentieerd, maar nu zijn pointers en referenties veel meer op elkaar gelijkend en bijna uitwisselbaar.Als
foogeen pointer is: De puntoperator (.) werkt precies zoals je gewend bent voor directe toegang tot leden.
Op dezelfde manier geeft pa , als het een pointer is die het startadres van een array opslaat, je met pa[i] direct toegang tot de geheugenlocatie waar het 'i -de element van die array is opgeslagen.
Het is aan te raden een `requires`-richtlijn te gebruiken om de mogelijke niet-portabiliteit aan te geven met requires pointer_composite_access; bovenaan uw WGSL-shadercode. Zie het volgende voorbeeld en voer het probleem `tint:2113` uit .
if (!navigator.gpu.wgslLanguageFeatures.has("pointer_composite_access")) {
throw new Error(`Pointer composite access is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires pointer_composite_access;
fn main() {
var a = vec3f();
let p : ptr<function, vec3f> = &a;
let r1 = (*p).x; // always valid.
let r2 = p.x; // requires pointer composite access.
}`
});
Aparte alleen-lezen-status voor stencil- en diepteaspecten
Voorheen vereisten alleen-lezen diepte-stencil-attachments in renderpasses dat beide aspecten (diepte en stencil) alleen-lezen waren. Deze beperking is opgeheven. Nu kunt u het diepte-aspect alleen-lezen gebruiken, bijvoorbeeld voor het traceren van contactschaduwen, terwijl de stencilbuffer wordt beschreven om pixels te identificeren voor verdere verwerking. Zie issue dawn:2146 .
Dawn-updates
De niet-vastgelegde foutcallback die is ingesteld met wgpuDeviceSetUncapturedErrorCallback() wordt nu direct aangeroepen wanneer de fout optreedt. Dit is wat ontwikkelaars consistent verwachten en willen voor debugging. Zie wijziging dawn:173620 .
De methode wgpuSurfaceGetPreferredFormat() uit de webgpu.h API is geïmplementeerd. Zie issue dawn:1362 .
Dit is slechts een greep uit de belangrijkste hoogtepunten. Bekijk de volledige lijst met commits .
Wat is er nieuw in WebGPU?
Een lijst van alles wat in de serie ' Wat is nieuw in WebGPU' aan bod is gekomen.
Chrome 144
- WGSL subgroup_id-extensie
- WGSL uniform_buffer_standard_layout-extensie
- WebGPU op Linux
- Snellere writeBuffer en writeTexture
- Dawn-updates
Chrome 143
- Textuurcomponent swizzel
- Verwijder het gebruik van de alleen-lezen opslagtextuur bgra8unorm
- Dawn-updates
Chrome 142
Chrome 141
- Tint IR voltooid
- Analyse van gehele getallenbereiken in de WGSL-compiler
- SPIR-V 1.4-update voor Vulkan-backend
- Dawn-updates
Chrome 140
- Apparaatverzoeken verbruiken de adapter.
- Verkorte notatie voor het gebruik van texturen waar de textuurweergave wordt gebruikt.
- WGSL textureSampleLevel ondersteunt 1D-texturen.
- Het gebruik van de alleen-lezen opslagtextuur bgra8unorm wordt afgekeurd.
- Verwijder het isFallbackAdapter-attribuut van GPUAdapter.
- Dawn-updates
Chrome 139
- Ondersteuning voor 3D-texturen in de gecomprimeerde formaten BC en ASTC.
- Nieuwe functie voor "kernfuncties en -beperkingen".
- Origin-proefversie voor WebGPU-compatibiliteitsmodus
- Dawn-updates
Chrome 138
- Verkorte notatie voor het gebruik van buffer als bindingsbron.
- De vereiste grootte voor buffers die bij de aanmaak worden toegewezen, verandert.
- Architectuurrapport voor recente GPU's
- Het attribuut `isFallbackAdapter` van GPUAdapter wordt afgeschaft.
- Dawn-updates
Chrome 137
- Gebruik de textuurweergave voor het binden van externe texturen.
- Buffers kopiëren zonder specificatie van offsets en grootte.
- WGSL workgroupUniformLoad gebruikt een pointer naar een atomisch object.
- GPUAdapterInfo PowerPreference-attribuut
- Verwijder het compatibilityMode-attribuut van GPURequestAdapterOptions
- Dawn-updates
Chrome 136
- GPUAdapterInfo isFallbackAdapter-attribuut
- Verbeteringen in de compilatietijd van shaders in D3D12
- Canvasafbeeldingen opslaan en kopiëren
- Compatibiliteitsmodusbeperkingen opheffen
- Dawn-updates
Chrome 135
- Maakt het mogelijk om een pipeline-layout te creëren met een null-bindgroep-layout.
- Sta toe dat viewports buiten de grenzen van de render targets uitsteken.
- Gemakkelijkere toegang tot de experimentele compatibiliteitsmodus op Android.
- Verwijder de maxInterStageShaderComponents-limiet
- Dawn-updates
Chrome 134
- Optimaliseer machine learning-workloads met subgroepen.
- Verwijder de ondersteuning voor filterbare textuurtypen met zwevende deeltjes als mengbaar.
- Dawn-updates
Chrome 133
- Aanvullende unorm8x4-bgra- en 1-component-vertexformaten
- Sta toe dat onbekende limieten worden aangevraagd met een ongedefinieerde waarde.
- Wijzigingen in de WGSL-uitlijningsregels
- WGSL-prestatieverbeteringen met discard-effect
- Gebruik VideoFrame displaySize voor externe texturen.
- Verwerk afbeeldingen met een niet-standaardoriëntatie met behulp van copyExternalImageToTexture.
- Verbetering van de ontwikkelaarservaring
- Schakel de compatibiliteitsmodus in met featureLevel.
- Opschoning van experimentele subgroepfuncties
- De limiet maxInterStageShaderComponents wordt afgeschaft.
- Dawn-updates
Chrome 132
- Gebruik van textuurweergave
- 32-bits float-texturen mengen
- GPUDevice adapterInfo-attribuut
- Het configureren van de canvascontext met een ongeldig formaat veroorzaakt een JavaScript-fout.
- Beperkingen van de sampler op texturen filteren
- Uitgebreide subgroepsexperimenten
- Verbetering van de ontwikkelaarservaring
- Experimentele ondersteuning voor 16-bits genormaliseerde textuurformaten
- Dawn-updates
Chrome 131
- Clipafstanden in WGSL
- GPUCanvasContext getConfiguration()
- Punt- en lijnprimitieven mogen geen dieptevoorkeur hebben.
- Inclusieve scan met ingebouwde functies voor subgroepen
- Experimentele ondersteuning voor indirecte meervoudige trekking
- Shadermodule-compilatieoptie strikte wiskunde
- Verwijder GPUAdapter requestAdapterInfo()
- Dawn-updates
Chrome 130
- Mengen met twee bronnen
- Verbeteringen in de compilatietijd van shaders op Metal
- De functie GPUAdapter requestAdapterInfo() wordt afgeschaft.
- Dawn-updates
Chrome 129
Chrome 128
- Experimenteren met subgroepen
- Het instellen van dieptevoorkeur voor lijnen en punten wordt afgeraden.
- Verberg niet-vastgelegde DevTools-foutwaarschuwing als preventDefault is ingeschakeld.
- WGSL interpoleert eerst de bemonstering en of
- Dawn-updates
Chrome 127
- Experimentele ondersteuning voor OpenGL ES op Android
- GPUAdapter-info-attribuut
- Verbeteringen in de interoperabiliteit met WebAssembly
- Verbeterde fouten in de commando-encoder
- Dawn-updates
Chrome 126
- Verhoog de maxTextureArrayLayers-limiet
- Buffer-uploadoptimalisatie voor Vulkan-backend
- Verbeteringen in de compilatietijd van shaders
- De ingediende commandobuffers moeten uniek zijn.
- Dawn-updates
Chrome 125
Chrome 124
- Alleen-lezen en lees-schrijf opslagtexturen
- Ondersteuning voor servicepersoneel en deeltijdwerkers
- Nieuwe adapterinformatie-attributen
- Bugfixes
- Dawn-updates
Chrome 123
- Ondersteuning voor ingebouwde DP4a-functies in WGSL.
- Onbeperkte pointerparameters in WGSL
- Syntactische suiker voor het dereferentiëren van samengestelde typen in WGSL
- Aparte alleen-lezen-status voor stencil- en diepteaspecten
- Dawn-updates
Chrome 122
- Vergroot uw bereik met de compatibiliteitsmodus (functie in ontwikkeling).
- Verhoog de maxVertexAttributes-limiet
- Dawn-updates
Chrome 121
- WebGPU-ondersteuning op Android
- Gebruik DXC in plaats van FXC voor shadercompilatie op Windows.
- Tijdstempelquery's in de reken- en weergavefasen
- Standaard toegangspunten tot shadermodules
- Ondersteuning voor display-p3 als GPUExternalTexture-kleurruimte
- Informatie over geheugenhops
- Dawn-updates
Chrome 120
- Ondersteuning voor 16-bits drijvende-kommawaarden in WGSL
- Verleg de grenzen
- Wijzigingen in de diepte-sjabloonstatus
- Updates van adapterinformatie
- Tijdstempelquery's kwantisering
- Kenmerken van de voorjaarsschoonmaak
Chrome 119
- Filterbare 32-bits float-texturen
- unorm10-10-10-2 vertex-formaat
- rgb10a2uint textuurformaat
- Dawn-updates
Chrome 118
- Ondersteuning voor HTMLImageElement en ImageData in
copyExternalImageToTexture() - Experimentele ondersteuning voor lees-schrijf- en alleen-lezen-opslagtexturen
- Dawn-updates
Chrome 117
- Vertexbuffer niet ingesteld
- Bindingsgroep niet instellen
- Onderdruk fouten bij het aanmaken van asynchrone pipelines wanneer het apparaat verloren gaat.
- Updates over het maken van SPIR-V shader-modules
- Verbetering van de ontwikkelaarservaring
- Caching-pipelines met automatisch gegenereerde lay-out
- Dawn-updates
Chrome 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice() - Zorg ervoor dat de videoweergave soepel blijft als
importExternalTexture()wordt aangeroepen. - conformiteit met specificaties
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chrome 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- De aparte grafische kaart wordt standaard ingeschakeld bij gebruik van netstroom.
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chrome 114
- Optimaliseer JavaScript
- getCurrentTexture() op een niet-geconfigureerd canvas geeft een InvalidStateError.
- WGSL-updates
- Dawn-updates