Ondersteuning voor 16-bits drijvende-kommawaarden in WGSL
In WGSL is het f16
type de set van 16-bits floating-pointwaarden in het IEEE-754 binary16-formaat (halfprecision). Dit betekent dat er 16 bits worden gebruikt om een floating-pointgetal weer te geven, in tegenstelling tot 32 bits voor conventionele single-precision floating-point ( f32
). Deze kleinere omvang kan leiden tot aanzienlijke prestatieverbeteringen , vooral bij het verwerken van grote hoeveelheden data.
Ter vergelijking: op een Apple M1 Pro-apparaat is de f16
implementatie van de Llama2 7B-modellen die in de WebLLM-chatdemo worden gebruikt, aanzienlijk sneller dan de f32
implementatie, met een verbetering van 28% in de pre-fill-snelheid en een verbetering van 41% in de decoderingssnelheid, zoals te zien is in de volgende schermafbeeldingen.

f32
(links) en f16
(rechts) Llama2 7B-modellen. Niet alle GPU's ondersteunen 16-bits floating-pointwaarden. Wanneer de functie "shader-f16"
beschikbaar is in een GPUAdapter
, kunt u nu een GPUDevice
met deze functie aanvragen en een WGSL-shadermodule maken die gebruikmaakt van het halfprecisie floating-point type f16
. Dit type is alleen geldig voor gebruik in de WGSL-shadermodule als u de f16
WGSL-extensie inschakelt met enable f16;
. Anders genereert createShaderModule() een validatiefout. Zie het volgende minimale voorbeeld en geef dawn:1510 op .
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("shader-f16")) {
throw new Error("16-bit floating-point value support is not available");
}
// Explicitly request 16-bit floating-point value support.
const device = await adapter.requestDevice({
requiredFeatures: ["shader-f16"],
});
const code = `
enable f16;
@compute @workgroup_size(1)
fn main() {
const c : vec3h = vec3<f16>(1.0h, 2.0h, 3.0h);
}
`;
const shaderModule = device.createShaderModule({ code });
// Create a compute pipeline with this shader module
// and run the shader on the GPU...
Het is mogelijk om zowel f16
als f32
-typen te ondersteunen in de WGSL-shadermodulecode met een alias
, afhankelijk van de ondersteuning van de functie "shader-f16"
zoals weergegeven in het volgende fragment.
const adapter = await navigator.gpu.requestAdapter();
const hasShaderF16 = adapter.features.has("shader-f16");
const device = await adapter.requestDevice({
requiredFeatures: hasShaderF16 ? ["shader-f16"] : [],
});
const header = hasShaderF16
? `enable f16;
alias min16float = f16;`
: `alias min16float = f32;`;
const code = `
${header}
@compute @workgroup_size(1)
fn main() {
const c = vec3<min16float>(1.0, 2.0, 3.0);
}
`;
Verleg de grenzen
Het maximale aantal bytes dat nodig is om één sample (pixel of subpixel) van de uitvoergegevens van de renderpijplijn te bevatten, voor alle kleurbijlagen, is standaard 32 bytes. Het is nu mogelijk om maximaal 64 bytes op te vragen met behulp van de limiet maxColorAttachmentBytesPerSample
. Zie het volgende voorbeeld en de issue dawn:2036 .
const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxColorAttachmentBytesPerSample < 64) {
// When the desired limit isn't supported, take action to either fall back to
// a code path that does not require the higher limit or notify the user that
// their device does not meet minimum requirements.
}
// Request highest limit of max color attachments bytes per sample.
const device = await adapter.requestDevice({
requiredLimits: { maxColorAttachmentBytesPerSample: 64 },
});
De maxInterStageShaderVariables
en maxInterStageShaderComponents
-limieten voor communicatie tussen fasen zijn op alle platforms verhoogd. Zie issue dawn:1448 voor details.
Voor elke shaderfase is het maximale aantal bindgroep-layoutitems in een pipeline-layout die opslagbuffers zijn standaard 8. Het is nu mogelijk om maximaal 10 items aan te vragen met behulp van de limiet maxStorageBuffersPerShaderStage
. Zie issue dawn:2159 .
Er is een nieuwe maxBindGroupsPlusVertexBuffers
-limiet toegevoegd. Deze limiet bestaat uit het maximale aantal bindgroep- en vertexbufferslots dat gelijktijdig wordt gebruikt, inclusief lege slots onder de hoogste index. De standaardwaarde is 24. Zie issue dawn:1849 .
Wijzigingen in de dieptestencilstatus
Om de ontwikkelaarservaring te verbeteren, zijn de kenmerken depth-stencil state depthWriteEnabled
en depthCompare
niet meer altijd vereist: depthWriteEnabled
is alleen vereist voor formaten met diepte, en depthCompare
is niet vereist voor formaten met diepte als ze helemaal niet worden gebruikt. Zie issue dawn:2132 .
Adapterinformatie-updates
Niet-standaard type
en backend
-adapterinfo-attributen zijn nu beschikbaar bij het aanroepen van requestAdapterInfo() wanneer de gebruiker de vlag "WebGPU Developer Features" heeft ingeschakeld op chrome://flags/#enable-webgpu-developer-features
. Het type
kan "discrete GPU", "integrated GPU", "CPU" of "unknown" zijn. De backend
is "WebGPU", "D3D11", "D3D12", "metal", "vulkan", "openGL", "openGLES" of "null". Zie issue dawn:2112 en issue dawn:2107 .

De optionele lijstparameter unmaskHints
in requestAdapterInfo() is verwijderd. Zie issue dawn:1427 .
Kwantificering van tijdstempelquery's
Met tijdstempelquery's kunnen applicaties de uitvoeringstijd van GPU-opdrachten met nanosecondenprecisie meten. De WebGPU-specificatie maakt tijdstempelquery's echter optioneel vanwege zorgen over timingaanvallen . Het Chrome-team is van mening dat het kwantificeren van tijdstempelquery's een goed compromis biedt tussen precisie en beveiliging, door de resolutie te verlagen tot 100 microseconden. Zie issue dawn:1800 .
In Chrome kunnen gebruikers tijdstempelkwantificering uitschakelen door de vlag 'WebGPU Developer Features' in te schakelen via chrome://flags/#enable-webgpu-developer-features
. Houd er rekening mee dat deze vlag alleen de functie "timestamp-query"
niet inschakelt. De implementatie ervan is nog experimenteel en vereist daarom de vlag 'Unsafe WebGPU Support' via chrome://flags/#enable-unsafe-webgpu
.
In Dawn is een nieuwe apparaatschakelaar met de naam "timestamp_quantization" toegevoegd, die standaard is ingeschakeld. Het volgende fragment laat zien hoe u de experimentele functie "timestamp-query" kunt inschakelen zonder tijdstempelkwantificering bij het aanvragen van een apparaat.
wgpu::DawnTogglesDescriptor deviceTogglesDesc = {};
const char* allowUnsafeApisToggle = "allow_unsafe_apis";
deviceTogglesDesc.enabledToggles = &allowUnsafeApisToggle;
deviceTogglesDesc.enabledToggleCount = 1;
const char* timestampQuantizationToggle = "timestamp_quantization";
deviceTogglesDesc.disabledToggles = ×tampQuantizationToggle;
deviceTogglesDesc.disabledToggleCount = 1;
wgpu::DeviceDescriptor desc = {.nextInChain = &deviceTogglesDesc};
// Request a device with no timestamp quantization.
myAdapter.RequestDevice(&desc, myCallback, myUserData);
Voorjaarsschoonmaak
De experimentele functie "timestamp-query-inside-passes" is hernoemd naar "chromium-experimental-timestamp-query-inside-passes" om ontwikkelaars duidelijk te maken dat deze functie experimenteel is en voorlopig alleen beschikbaar in Chromium-gebaseerde browsers. Zie issue dawn:1193 .
De experimentele functie "pipeline-statistics-query", die slechts gedeeltelijk was geïmplementeerd, is verwijderd omdat deze niet langer wordt ontwikkeld. Zie probleem chromium:1177506 .
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 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
- GPURequestAdapterOptions compatibilityMode-kenmerk verwijderen
- 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
- Het maken van een pijplijnlayout met een lay-out voor nulbindingsgroepen toestaan
- 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 als ondersteuning voor 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
- Verouder het instellen van dieptebias voor lijnen en punten
- Verberg niet-vastgelegde fout DevTools-waarschuwing als preventDefault
- WGSL interpoleert eerst de bemonstering en
- Dawn-updates
Chroom 127
- Experimentele ondersteuning voor OpenGL ES op Android
- GPUAdapter info-kenmerk
- Verbeteringen in WebAssembly-interoperabiliteit
- Verbeterde commando-encoderfouten
- Dawn-updates
Chroom 126
- Verhoog de 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
- Voorjaarsschoonmaak
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 is gegaan
- 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