HDR-Unterstützung mit dem Modus „Canvas-Tonzuordnung“
Webentwickler haben nur begrenzte Möglichkeiten, HDR-Inhalte bereitzustellen. Sie sind hauptsächlich auf die Elemente <img>
und <video>
angewiesen. Das <canvas>
-Element ist jedoch weiterhin auf SDR beschränkt. Wenn Sie dynamische HDR-Inhalte in einem Canvas generieren, müssen Sie die Inhalte als HDR-Bild codieren, bevor Sie sie anzeigen (Beispiel).
Mit dem neuen Parameter GPUCanvasToneMappingMode
in der WebGPU-Canvas-Konfiguration können mit WebGPU jetzt Farben gezeichnet werden, die heller als Weiß (#FFFFFF
) sind. Dies ist in den folgenden Modi möglich:
"standard"
: Das Standardverhalten beschränkt Inhalte auf den SDR-Bereich des Bildschirms. In diesem Modus werden alle Farbwerte im Farbraum des Bildschirms auf das Intervall[0, 1]
begrenzt."extended"
: Schaltet den vollen HDR-Bereich des Displays frei. In diesem Modus wird"standard"
im[0, 1]
-Bereich des Displays angezeigt. Die Begrenzung oder Projektion erfolgt auf den erweiterten Dynamikbereich des Bildschirms, nicht auf[0, 1]
.
Das folgende Code-Snippet zeigt, wie Sie einen Canvas für einen hohen Dynamikbereich konfigurieren.
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" },
});
Weitere Informationen zu HDR mit WebGPU finden Sie im Beispiel für Partikel (HDR) und im WebGPU-HDR-Beispiel sowie im chromestatus-Eintrag.

Erweiterte Unterstützung von Untergruppen
Nach der Ankündigung von Untergruppen-Tests können die integrierten Untergruppenfunktionen jetzt sowohl in Compute-Shadern als auch in Fragment-Shadern verwendet werden. Sie sind nicht mehr auf Compute-Shader beschränkt. Siehe Problem 354738715.
Der integrierte Wert subgroup_size
ist in Fragment-Shadern derzeit fehlerhaft. Vermeide es vorerst.
Außerdem wurden die folgenden integrierten Funktionen für Untergruppen hinzugefügt:
subgroupAdd(value)
: Gibt die Summe aller aktiven Aufrufevalue
s in der Untergruppe zurück.subgroupExclusiveAdd(value)
: Gibt die exklusive Scan-Summierung aller aktiven Aufrufevalue
s in der Untergruppe zurück.subgroupMul(value)
: Gibt das Produkt aller aktiven Aufrufevalue
s in der Untergruppe zurück.subgroupExclusiveMul(value)
: Gibt das exklusive Scan-Produkt aller aktiven Aufrufevalue
s in der Untergruppe zurück.subgroupAnd(value)
: Gibt das binäre UND aller aktiven Aufrufevalue
s in der Untergruppe zurück.subgroupOr(value)
: Gibt das binäre ODER aller aktiven Aufrufevalue
s in der Untergruppe zurück.subgroupXor(value)
: Gibt das binäre XOR aller aktiven Aufrufevalue
s in der Untergruppe zurück.subgroupMin(value)
: Gibt den Minimalwert aller aktiven Aufrufevalue
s in der Untergruppe zurück.subgroupMax(value)
: Gibt den Maximalwert aller aktiven Aufrufevalue
s in der Untergruppe zurück.subgroupAll(value)
: Gibt „true“ zurück, wennvalue
für alle aktiven Aufrufe in der Untergruppe „true“ ist.subgroupAny(value)
: Gibt „true“ zurück, wennvalue
für einen aktiven Aufruf in der Untergruppe „true“ ist.subgroupElect()
: Gibt „true“ zurück, wenn dieser Aufruf den niedrigstensubgroup_invocation_id
unter den aktiven Aufrufen in der Untergruppe hat.subgroupBroadcastFirst(value)
: Sendetvalue
aus dem aktiven Aufruf mit dem niedrigstensubgroup_invocation_id
in der Untergruppe an alle anderen aktiven Aufrufe.subgroupShuffle(value, id)
: Gibtvalue
vom aktiven Aufruf zurück, dessensubgroup_invocation_id
mitid
übereinstimmt.subgroupShuffleXor(value, mask)
: Gibtvalue
vom aktiven Aufruf zurück, dessensubgroup_invocation_id
mitsubgroup_invocation_id ^ mask
übereinstimmt.mask
muss dynamisch einheitlich sein.subgroupShuffleUp(value, delta)
: Gibtvalue
vom aktiven Aufruf zurück, dessensubgroup_invocation_id
mitsubgroup_invocation_id - delta
übereinstimmt.subgroupShuffleDown(value, delta)
: Gibtvalue
vom aktiven Aufruf zurück, dessensubgroup_invocation_id
mitsubgroup_invocation_id + delta
übereinstimmt.quadBroadcast(value, id)
: Sendetvalue
aus dem Quad-Aufruf mit der IDid
.id
muss ein konstanter Ausdruck sein.quadSwapX(value)
: Tauschtvalue
zwischen Aufrufen im Quad in X-Richtung.quadSwapY(value)
: Tauschtvalue
zwischen Aufrufen im Quad in Y-Richtung.quadSwapDiagonal(value)
: Tauschtvalue
zwischen Aufrufen im Quadrat diagonal.
Dawn-Updates
Die wgpu::PrimitiveState
-Struktur enthält jetzt direkt die Einstellung für die Tiefenbegrenzung. Eine separate wgpu::PrimitiveDepthClipControl
-Struktur ist nicht mehr erforderlich. Weitere Informationen finden Sie im folgenden Code-Snippet und im webgpu-headers-PR.
// Before
wgpu::PrimitiveState primitive = {};
wgpu::PrimitiveDepthClipControl depthClipControl;
depthClipControl.unclippedDepth = true;
primitive.nextInChain = &depthClipControl;
// Now
wgpu::PrimitiveState primitive = {};
primitive.unclippedDepth = true;
Dies sind nur einige der wichtigsten Neuerungen. Vollständige Liste der Commits
Neues zu WebGPU
Eine Liste mit allen Themen, die in der Reihe Neu in WebGPU behandelt wurden.
Chrome 140
- Geräteanfragen verbrauchen Adapter
- Abkürzung für die Verwendung von Textur, wenn die Texturansicht verwendet wird
- WGSL-Funktion „textureSampleLevel“ unterstützt 1D-Texturen
- Einstellung der Verwendung von schreibgeschützten bgra8unorm-Speichertexturen
- Entfernen des GPUAdapter-Attributs „isFallbackAdapter“
- Updates zu Dawn
Chrome 139
- Unterstützung von 3D-Texturen für BC- und ASTC-komprimierte Formate
- Neue Funktion „core-features-and-limits“
- Ursprungstest für den WebGPU-Kompatibilitätsmodus
- Updates zu Dawn
Chrome 138
- Kurzform für die Verwendung des Puffers als Bindungsressource
- Änderungen der Größenanforderungen für Puffer, die bei der Erstellung zugeordnet werden
- Architekturbericht für aktuelle GPUs
- GPUAdapter-Attribut „isFallbackAdapter“ wird nicht mehr unterstützt
- Updates zu Dawn
Chrome 137
- Texturansicht für die Bindung von „externalTexture“ verwenden
- Puffer werden ohne Angabe von Offsets und Größe kopiert
- WGSL-Funktion „workgroupUniformLoad“ mit Zeiger auf atomaren Typ
- GPUAdapterInfo-Attribut „powerPreference“
- Entfernen des Attributs „compatibilityMode“ von GPURequestAdapterOptions
- Updates zu Dawn
Chrome 136
- GPUAdapterInfo-Attribut „isFallbackAdapter“
- Verbesserungen bei der Shader-Kompilierungszeit unter D3D12
- Canvas-Bilder speichern und kopieren
- Einschränkungen für den Kompatibilitätsmodus für die Analyse der Anzeigenwirkung
- Updates zu Dawn
Chrome 135
- Erstellen von Pipeline-Layouts mit Null-Bindungsgruppen-Layout zulassen
- Zulassen, dass Viewports über die Grenzen der Renderziele hinausgehen
- Einfacherer Zugriff auf den experimentellen Kompatibilitätsmodus unter Android
- Entfernen des Limits „maxInterStageShaderComponents“
- Updates zu Dawn
Chrome 134
- Arbeitslasten für maschinelles Lernen mit Untergruppen verbessern
- Unterstützung für float-filterbare Texturtypen als blendable entfernen
- Updates zu Dawn
Chrome 133
- Zusätzliche unorm8x4-bgra- und 1-Komponenten-Vertexformate
- Anfrage von unbekannten Limits mit undefiniertem Wert zulassen
- Änderungen an den WGSL-Ausrichtungsregeln
- WGSL-Leistungssteigerungen mit „discard“
- VideoFrame.displaySize für externe Texturen verwenden
- Bilder mit nicht standardmäßigen Ausrichtungen mit copyExternalImageToTexture verarbeiten
- Entwicklererfahrung verbessern
- Kompatibilitätsmodus mit „featureLevel“ aktivieren
- Bereinigung experimenteller Untergruppenfunktionen
- maxInterStageShaderComponents-Limit einstellen
- Updates zu Dawn
Chrome 132
- Nutzung der Texturansicht
- Mischen von 32-Bit-Gleitkomma-Texturen
- GPUDevice-Attribut „adapterInfo“
- JavaScript-Fehler beim Konfigurieren des Canvas-Kontexts mit ungültigem Format
- Einschränkungen für das Filtern von Samplern für Texturen
- Erweiterte Tests mit Untergruppen
- Entwicklererfahrung verbessern
- Experimentelle Unterstützung für normalisierte 16‑Bit-Texturformate
- Updates zu Dawn
Chrome 131
- Clip-Distanzen in WGSL
- GPUCanvasContext getConfiguration()
- Punkt- und Linien-Primitiven dürfen keine Tiefenabweichung haben
- Integrierte Funktionen für inklusive Scans für Untergruppen
- Experimentelle Unterstützung für indirekte Multi-Draw-Funktionen
- Kompilierungsoption für Shadermodule „strict math“
- Entfernen von GPUAdapter.requestAdapterInfo()
- Updates zu Dawn
Chrome 130
- Zusammenführen von zwei Quellen
- Verbesserungen bei der Shader-Kompilierungszeit auf Metal
- Einstellung von GPUAdapter.requestAdapterInfo()
- Updates zu Dawn
Chrome 129
- HDR-Unterstützung mit dem Canvas-Tone-Mapping-Modus
- Erweiterte Unterstützung für Untergruppen
- Updates zu Dawn
Chrome 128
- Mit Untergruppen experimentieren
- Festlegen des Tiefen-Bias für Linien und Punkte wird eingestellt
- Warnung zu nicht abgefangenen Fehlern in den Entwicklertools ausblenden, wenn preventDefault
- WGSL-Interpolation zuerst und entweder
- Updates zu Dawn
Chrome 127
- Experimentelle Unterstützung für OpenGL ES unter Android
- GPUAdapter-Attribut „info“
- Verbesserungen der WebAssembly-Interop-Funktion
- Verbesserte Fehlerbehebung bei der Befehlscodierung
- Updates zu Dawn
Chrome 126
- maxTextureArrayLayers-Limit erhöhen
- Optimierung des Puffer-Uploads für das Vulkan-Backend
- Verbesserungen bei der Shader-Kompilierungszeit
- Eingereichte Befehlspuffer müssen eindeutig sein
- Updates zu Dawn
Chrome 125
Chrome 124
- Schreibgeschützte und Lese-/Schreibspeicher-Texturen
- Unterstützung von Service Workern und Shared Workers
- Neue Adapterinformationsattribute
- Diverse Fehlerkorrekturen
- Updates zu Dawn
Chrome 123
- Unterstützung von integrierten DP4a-Funktionen in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- Syntax-Zucker für das Dereferenzieren von Composites in WGSL
- Separater schreibgeschützter Status für Schablonen- und Tiefenaspekte
- Updates zu Dawn
Chrome 122
- Reichweite mit dem Kompatibilitätsmodus erhöhen (Funktion in der Entwicklung)
- Limit für maxVertexAttributes erhöhen
- Updates zu Dawn
Chrome 121
- WebGPU auf Android unterstützen
- DXC anstelle von FXC für die Shader-Kompilierung unter Windows verwenden
- Zeitstempelabfragen in Compute- und Render-Passes
- Standardeinstiegspunkte für Shader-Module
- Unterstützung von „display-p3“ als GPUExternalTexture-Farbraum
- Informationen zu Speicher-Heaps
- Updates zu Dawn
Chrome 120
- Unterstützung von 16‑Bit-Gleitkommawerten in WGSL
- An die Grenzen gehen
- Änderungen am Tiefen-/Schablonenzustand
- Aktualisierungen der Adapterinformationen
- Quantisierung von Zeitstempelabfragen
- Funktionen für den Frühjahrsputz
Chrome 119
- Filterbare 32-Bit-Gleitkomma-Texturen
- unorm10-10-10-2-Vertexformat
- rgb10a2uint-Texturformat
- Updates zu Dawn
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für Lese-/Schreib- und schreibgeschützte Speichertexturen
- Updates zu Dawn
Chrome 117
- Vertex-Puffer zurücksetzen
- Bindungsgruppe aufheben
- Fehler bei der asynchronen Pipelineerstellung unterdrücken, wenn das Gerät verloren geht
- Aktualisierungen bei der Erstellung von SPIR-V-Shadermodulen
- Entwicklererfahrung verbessern
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Updates zu Dawn
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe flüssig halten, wenn
importExternalTexture()
aufgerufen wird - Spezifikationskonformität
- Entwicklererfahrung verbessern
- Updates zu Dawn
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Standardmäßig diskrete GPU bei Stromversorgung über Wechselstrom
- Entwicklererfahrung verbessern
- Updates zu Dawn
Chrome 114
- JavaScript optimieren
- „getCurrentTexture()“ für nicht konfigurierte Canvas-Elemente löst „InvalidStateError“ aus
- WGSL-Updates
- Updates zu Dawn