Veröffentlicht: 26. März 2025
Erstellen von Pipeline-Layouts mit Null-Bindungsgruppenlayout zulassen
Bisher war es erforderlich, eine Bindungsgruppe mit null Bindungen hinzuzufügen, um ein leeres Bindungsgruppenlayout zu erstellen. Das ist nicht mehr erforderlich, da Layouts für Nullbindungsgruppen jetzt zulässig sind und beim Erstellen eines Pipeline-Layouts ignoriert werden. Das sollte die Entwicklung erleichtern.
Beispielsweise möchten Sie eine Pipeline erstellen, die nur die Bindungsgruppenlayouts 0 und 2 verwendet. Sie können Bindegruppenlayout 1 den Fragmentdaten und Bindegruppenlayout 2 den Vertexdaten zuweisen und dann ohne Fragmentshader rendern. Siehe Problem 377836524.
const bgl0 = myDevice.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = myDevice.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = myDevice.createBindGroupLayout({ entries: myVertexEntries });
// Create a pipeline layout that will be used to render without a fragment shader.
const myPipelineLayout = myDevice.createPipelineLayout({
bindGroupLayouts: [bgl0, null, bgl2],
});
Darstellungsbereiche dürfen über die Grenzen der Rendering-Ziele hinausragen
Die Anforderungen an die Validierung des Darstellungsbereichs wurden gelockert, damit Darstellungsbereiche über die Grenzen des Rendering-Ziels hinausgehen können. Dies ist besonders nützlich zum Zeichnen von 2D-Elementen wie der Benutzeroberfläche, die sich über den aktuellen Darstellungsbereich hinaus erstrecken können. Siehe Problem 390162929.
const passEncoder = myCommandEncoder.beginRenderPass({
colorAttachments: [
{
view: myColorTexture.createView(),
loadOp: "clear",
storeOp: "store",
},
],
});
// Set a viewport that extends past the render target's bounds by 8 pixels
// in all directions.
passEncoder.setViewport(
/*x=*/ -8,
/*y=*/ -8,
/*width=*/ myColorTexture.width + 16,
/*height=*/ myColorTexture.height + 16,
/*minDepth=*/ 0,
/*maxDepth=*/ 1,
);
// Draw geometry and complete the render pass as usual.
Einfacherer Zugriff auf den experimentellen Kompatibilitätsmodus unter Android
Allein das Flag chrome://flags/#enable-unsafe-webgpu
aktiviert jetzt alle Funktionen, die für den experimentellen WebGPU-Kompatibilitätsmodus auf Android erforderlich sind. So können Sie mit der Option featureLevel: "compatibility"
einen GPUAdapter im Kompatibilitätsmodus anfordern und sogar auf dem OpenGL ES-Backend auf Geräten zugreifen, die Vulkan nicht unterstützen. Siehe das folgende Beispiel und das Problem dawn:389876644.
// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

Limit für „maxInterStageShaderComponents“ entfernen
Wie bereits angekündigt, wird das Limit „maxInterStageShaderComponents“ aufgrund einer Kombination verschiedener Faktoren entfernt:
- Redundanz mit
maxInterStageShaderVariables
: Dieses Limit dient bereits einem ähnlichen Zweck und steuert die Menge der Daten, die zwischen den Shader-Phasen übergeben werden. - Geringfügige Abweichungen: Es gibt zwar geringfügige Unterschiede bei der Berechnung der beiden Limits, diese Unterschiede sind jedoch gering und können innerhalb des Limits für
maxInterStageShaderVariables
effektiv verwaltet werden. - Vereinfachung: Durch das Entfernen von
maxInterStageShaderComponents
wird die Shader-Oberfläche optimiert und die Komplexität für Entwickler reduziert. Anstatt zwei separate Limits mit geringfügigen Unterschieden zu verwalten, können sie sich auf die passendere und umfassenderemaxInterStageShaderVariables
konzentrieren.
Weitere Informationen finden Sie unter Geplante Entfernung und Problem 364338810.
Dawn-Updates
Es ist nicht mehr möglich, ein Tiefentextur-Muster mit einem Filter-Sampler zu erfassen. Zur Erinnerung: Eine Tiefentextur kann nur mit einem nicht filternden oder einem Vergleichs-Sampler verwendet werden. Siehe Problem 379788112.
Die Strukturen WGPURequiredLimits
und WGPUSupportedLimits
wurden in WGPULimits
zusammengeführt. Siehe Problem 374263404.
Die folgenden Strukturen wurden umbenannt. Siehe Problem 42240793.
WGPUImageCopyBuffer
ist jetztWGPUTexelCopyBufferInfo
WGPUImageCopyTexture
ist jetztWGPUTexelCopyTextureInfo
WGPUTextureDataLayout
ist jetztWGPUTexelCopyBufferLayout
Die Mitglieder subgroupMinSize
und subgroupMaxSize
wurden der Struktur WGPUAdapterInfo
hinzugefügt. Siehe webgpu-headers-PR.
Die Nutzung der Dawn API in Metal kann jetzt mit der Umgebungsvariablen DAWN_TRACE_FILE_BASE
erfasst werden. Dabei wird eine .gputrace-Datei gespeichert, die später in den Metal-Debugger von Xcode geladen werden kann. Weitere Informationen finden Sie in der Debugging Dawn-Dokumentation.
Dies sind nur einige der wichtigsten Highlights. Eine vollständige Liste der Commits
Das ist neu bei WebGPU
Eine Liste aller Themen, die in der Reihe Was ist neu in WebGPU behandelt wurden.
Chrome 135
- Erstellen eines Pipeline-Layouts mit Null-Bindegruppenlayout zulassen
- Viewports dürfen über die Grenzen der Rendering-Ziele hinausragen
- Einfacherer Zugriff auf den experimentellen Kompatibilitätsmodus unter Android
- Das Limit „maxInterStageShaderComponents“ wurde entfernt
- Dawn-Updates
Chrome 134
- Arbeitslasten für maschinelles Lernen mit Untergruppen verbessern
- Unterstützung für mit dem „Flüssigfilter“ filterbare Texturtypen als mischbar entfernen
- Dawn-Updates
Chrome 133
- Zusätzliche Vertexformate vom Typ unorm8x4-bgra und 1-Komponente
- Unbekannte Limits mit einem nicht definierten Wert anfordern
- Änderungen an den Regeln für die Ausrichtung von WGSL
- Leistungssteigerungen bei WGSL mit Discard
- VideoFrame-Anzeigegröße für externe Texturen verwenden
- Mit copyExternalImageToTexture Bilder mit nicht standardmäßigen Ausrichtungen verarbeiten
- Entwicklerfreundlichkeit verbessern
- Kompatibilitätsmodus mit „featureLevel“ aktivieren
- Bereinigung experimenteller Funktionen für Untergruppen
- Das Limit „maxInterStageShaderComponents“ wird eingestellt
- Dawn-Updates
Chrome 132
- Nutzung der Texturansicht
- 32-Bit-Gleitkommatextur-Mischverfahren
- Attribut „adapterInfo“ von „GPUDevice“
- Bei der Konfiguration des Canvas-Kontexts mit einem ungültigen Format wird ein JavaScript-Fehler geworfen
- Einschränkungen für Filter-Sampler bei Texturen
- Erweiterte Tests mit Untergruppen
- Entwicklerfreundlichkeit verbessern
- Experimentelle Unterstützung für 16-Bit-normalisierte Texturformate
- Dawn-Updates
Chrome 131
- Entfernungen in WGSL zuschneiden
- GPUCanvasContext getConfiguration()
- Punkt- und Linienprimitive dürfen keine Tiefenverzerrung haben.
- Integrierte Funktionen für inklusiven Scan für Untergruppen
- Experimentelle Unterstützung für indirekte Multi-Draw-Anweisungen
- Shader-Modul-Kompilierungsoption „strict math“
- GPUAdapter-Methode „requestAdapterInfo()“ entfernen
- Dawn-Updates
Chrome 130
- Zusammenführen von zwei Quellen
- Verbesserungen bei der Shader-Kompilierungszeit unter Metal
- Einstellung der GPUAdapter-Methode „requestAdapterInfo()“
- Dawn-Updates
Chrome 129
Chrome 128
- Mit Untergruppen experimentieren
- Einstellung der Tiefenverzerrung für Linien und Punkte wird eingestellt
- Nicht erfasste Fehlerwarnung in den Entwicklertools bei preventDefault ausblenden
- WGSL interpoliert zuerst die Stichprobe und
- Dawn-Updates
Chrome 127
- Experimenteller Support für OpenGL ES auf Android-Geräten
- Attribut „info“ von „GPUAdapter“
- Verbesserungen bei der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen beim Befehls-Encoder
- Dawn-Updates
Chrome 126
- Maximale Anzahl von Texture-Array-Ebenen erhöhen
- Optimierung des Pufferuploads für das Vulkan-Backend
- Verbesserte Shader-Kompilierungszeiten
- Eingereichte Befehlspuffere müssen eindeutig sein.
- Dawn-Updates
Chrome 125
Chrome 124
- Lese- und Lese-/Schreibspeichertextur
- Unterstützung für Dienst- und freigegebene Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Dawn-Updates
Chrome 123
- Unterstützung für integrierte DP4a-Funktionen in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- Syntax-Optimierung für die Dereferenzierung von Kompositen in WGSL
- Separater schreibgeschützter Status für Stencil- und Tiefenansichten
- Dawn-Updates
Chrome 122
- Reichweite mit dem Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Limit für maxVertexAttributes erhöhen
- Dawn-Updates
Chrome 121
- Unterstützung von WebGPU auf Android
- DXC anstelle von FXC für die Shaderkompilierung unter Windows verwenden
- Zeitstempelabfragen in Compute- und Rendering-Passes
- Standardeinstiegspunkte in Shadermodule
- Unterstützung von display-p3 als GPUExternalTexture-Farbraum
- Informationen zu Speicherheaps
- Dawn-Updates
Chrome 120
- Unterstützung von 16‑Bit-Gleitkommawerten in WGSL
- Grenzen überschreiten
- Änderungen am Tiefen-/Schatten-Status
- Aktualisierte Informationen zu Adaptern
- Quantisierung von Zeitstempelabfragen
- Funktionen für den Frühjahrsputz
Chrome 119
- Filterbare 32-Bit-Gleitkommatextur
- unorm10-10-10-2-Vertex-Format
- rgb10a2uint-Texturformat
- Dawn-Updates
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für Lese-/Schreib- und schreibgeschützte Speichertextur
- Dawn-Updates
Chrome 117
- Vertex-Buffer zurücksetzen
- Bindungsgruppe aufheben
- Fehler bei der Erstellung einer asynchronen Pipeline bei verlorenem Gerät ignorieren
- Änderungen beim Erstellen von SPIR-V-Shadermodulen
- Entwicklerfreundlichkeit verbessern
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Dawn-Updates
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe bei Aufruf von
importExternalTexture()
flüssig halten - Einhaltung der Spezifikationen
- Entwicklerfreundlichkeit verbessern
- Dawn-Updates
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Unterstützung für diskrete GPU standardmäßig bei Wechselstromversorgung
- Entwicklerfreundlichkeit verbessern
- Dawn-Updates
Chrome 114
- JavaScript optimieren
- Bei nicht konfiguriertem Canvas wird bei getCurrentTexture() ein InvalidStateError geworfen
- WGSL-Updates
- Dawn-Updates