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 (ein Beispiel finden Sie in dieser Demo).
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 Bildschirms frei. In diesem Modus wird"standard"im[0, 1]-Bereich des Bildschirms 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 High Dynamic Range 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 für Untergruppen
Nach der Ankündigung von Untergruppen-Tests sind die integrierten Untergruppenfunktionen jetzt sowohl in Compute-Shadern als auch in Fragment-Shadern verfügbar. 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 Aufrufevalues in der Untergruppe zurück.subgroupExclusiveAdd(value): Gibt die exklusive Scan-Summierung aller aktiven Aufrufevalues in der Untergruppe zurück.subgroupMul(value): Gibt das Produkt aller aktiven Aufrufevalues in der Untergruppe zurück.subgroupExclusiveMul(value): Gibt das exklusive Scan-Produkt aller aktiven Aufrufevalues in der Untergruppe zurück.subgroupAnd(value): Gibt das binäre UND aller aktiven Aufrufevaluein der Untergruppe zurück.subgroupOr(value): Gibt das binäre ODER aller aktiven Aufrufevalues in der Untergruppe zurück.subgroupXor(value): Gibt das binäre XOR aller aktiven Aufrufevalues in der Untergruppe zurück.subgroupMin(value): Gibt den Minimalwert aller aktiven Aufrufevalues in der Untergruppe zurück.subgroupMax(value): Gibt den Maximalwert aller aktiven Aufrufevalues in der Untergruppe zurück.subgroupAll(value): Gibt „true“ zurück, wennvaluefür alle aktiven Aufrufe in der Untergruppe „true“ ist.subgroupAny(value): Gibt „true“ zurück, wennvaluefür einen aktiven Aufruf in der Untergruppe „true“ ist.subgroupElect(): Gibt „true“ zurück, wenn dieser Aufruf den niedrigstensubgroup_invocation_idunter den aktiven Aufrufen in der Untergruppe hat.subgroupBroadcastFirst(value): Sendetvaluevom aktiven Aufruf mit dem niedrigstensubgroup_invocation_idin der Untergruppe an alle anderen aktiven Aufrufe.subgroupShuffle(value, id): Gibtvaluevom aktiven Aufruf zurück, dessensubgroup_invocation_idmitidübereinstimmt.subgroupShuffleXor(value, mask): Gibtvaluevom aktiven Aufruf zurück, dessensubgroup_invocation_idmitsubgroup_invocation_id ^ maskübereinstimmt.maskmuss dynamisch einheitlich sein.subgroupShuffleUp(value, delta): Gibtvaluevom aktiven Aufruf zurück, dessensubgroup_invocation_idmitsubgroup_invocation_id - deltaübereinstimmt.subgroupShuffleDown(value, delta): Gibtvaluevom aktiven Aufruf zurück, dessensubgroup_invocation_idmitsubgroup_invocation_id + deltaübereinstimmt.quadBroadcast(value, id): Sendetvalueaus dem Quad-Aufruf mit der IDid.idmuss ein konstanter Ausdruck sein.quadSwapX(value): Tauschtvaluezwischen Aufrufen im Quad in X-Richtung.quadSwapY(value): Tauschtvaluezwischen Aufrufen im Quad in Y-Richtung.quadSwapDiagonal(value): Tauschtvaluezwischen 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 aller Themen, die in der Reihe Neu in WebGPU behandelt wurden.
Chrome 143
- Swizzle-Vorgang für Texturkomponenten
- Entfernen der schreibgeschützten Speichertexturverwendung für bgra8unorm
- Aktualisierungen für Dawn
Chrome 142
Chrome 141
- Tint IR completed (Färbung – IR abgeschlossen)
- Analyse von Ganzzahlbereichen im WGSL-Compiler
- SPIR-V 1.4-Update für das Vulkan-Backend
- Aktualisierungen für Dawn
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“
- Aktualisierungen für 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
- Aktualisierungen für 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
- Aktualisierungen für 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“ für GPURequestAdapterOptions
- Aktualisierungen für Dawn
Chrome 136
- GPUAdapterInfo-Attribut „isFallbackAdapter“
- Verbesserte Shader-Kompilierungszeit unter D3D12
- Canvas-Bilder speichern und kopieren
- Einschränkungen für den Kompatibilitätsmodus für die Analyse der Anzeigenwirkung
- Aktualisierungen für 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“
- Aktualisierungen für Dawn
Chrome 134
- Arbeitslasten für maschinelles Lernen mit Untergruppen verbessern
- Unterstützung für float-filterbare Texturtypen als blendable entfernen
- Aktualisierungen für Dawn
Chrome 133
- Zusätzliche unorm8x4-bgra- und 1-Komponenten-Vertexformate
- Anfordern unbekannter 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
- Für die Entwicklung optimiert
- Kompatibilitätsmodus mit „featureLevel“ aktivieren
- Bereinigung experimenteller Untergruppenfunktionen
- maxInterStageShaderComponents-Limit einstellen
- Aktualisierungen für Dawn
Chrome 132
- Nutzung der Texturansicht
- Mischen von 32-Bit-Gleitkomma-Texturen
- GPUDevice-Attribut „adapterInfo“
- Beim Konfigurieren des Canvas-Kontexts mit einem ungültigen Format wird ein JavaScript-Fehler ausgegeben
- Einschränkungen für das Filtern von Samplern für Texturen
- Erweiterte Untergruppentests
- Für die Entwicklung optimiert
- Experimentelle Unterstützung für normalisierte 16‑Bit-Texturformate
- Aktualisierungen für Dawn
Chrome 131
- Clip-Distanzen in WGSL
- GPUCanvasContext.getConfiguration()
- Punkt- und Linien-Grundtypen dürfen keine Tiefenabweichung haben
- Integrierte Funktionen für inklusive Scans für Untergruppen
- Experimentelle Unterstützung für indirekte Multi-Draw-Funktion
- Kompilierungsoption für Shadermodule „strict math“
- Entfernen von GPUAdapter.requestAdapterInfo()
- Aktualisierungen für Dawn
Chrome 130
- Zusammenführen von zwei Quellen
- Verbesserungen bei der Shader-Kompilierungszeit auf Metal
- Einstellung von GPUAdapter.requestAdapterInfo()
- Aktualisierungen für Dawn
Chrome 129
- HDR-Unterstützung mit Canvas-Tone-Mapping-Modus
- Erweiterte Unterstützung für Untergruppen
- Aktualisierungen für 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
- Aktualisierungen für 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
- Aktualisierungen für Dawn
Chrome 126
- maxTextureArrayLayers-Limit erhöhen
- Optimierung des Pufferuploads für das Vulkan-Backend
- Verbesserungen bei der Shader-Kompilierungszeit
- Eingereichte Befehlspuffer müssen eindeutig sein
- Aktualisierungen für Dawn
Chrome 125
- Untergruppen (Funktion in der Entwicklung)
- In Scheibe einer 3D-Textur rendern
- Aktualisierungen für Dawn
Chrome 124
- Schreibgeschützte und Lese-/Schreibspeicher-Texturen
- Unterstützung von Service Workern und Shared Workers
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Aktualisierungen für 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
- Aktualisierungen für Dawn
Chrome 122
- Reichweite mit dem Kompatibilitätsmodus erhöhen (Funktion in der Entwicklung)
- Limit für „maxVertexAttributes“ erhöhen
- Aktualisierungen für Dawn
Chrome 121
- WebGPU unter 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
- display-p3 als GPUExternalTexture-Farbraum unterstützen
- Informationen zu Speicher-Heaps
- Aktualisierungen für Dawn
Chrome 120
- Unterstützung von 16‑Bit-Gleitkommawerten in WGSL
- An die Grenzen gehen
- Änderungen am Tiefen-Stencil-Status
- 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
- Aktualisierungen für Dawn
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture() - Experimentelle Unterstützung für Lese-/Schreib- und schreibgeschützte Speichertexturen
- Aktualisierungen für 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
- Für die Entwicklung optimiert
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Aktualisierungen für Dawn
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()zurückgegeben wurde - Videowiedergabe flüssig halten, wenn
importExternalTexture()aufgerufen wird - Einhaltung der Spezifikationen
- Für die Entwicklung optimiert
- Aktualisierungen für Dawn
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Standardmäßig diskrete GPU bei Stromversorgung über Wechselstrom
- Für die Entwicklung optimiert
- Aktualisierungen für Dawn
Chrome 114
- JavaScript optimieren
- „getCurrentTexture()“ für nicht konfigurierte Canvas-Elemente löst „InvalidStateError“ aus
- WGSL-Updates
- Aktualisierungen für Dawn