WebCodecs-Integration
WebGPU stellt eine API zum Erstellen undurchsichtiger „externer Textur“-Objekte von HTMLVideoElement
bis importExternalTexture()
bereit. Mit diesen Objekten können Sie die Videoframes effizient erfassen, möglicherweise ohne Kopien direkt aus den Quelldaten des YUV-Farbmodells.
Die ursprüngliche WebGPU-Spezifikation erlaubte jedoch nicht, GPUExternalTexture
-Objekte aus WebCodecs-Objekten vom Typ VideoFrame
zu erstellen. Diese Funktion ist wichtig für erweiterte Videoverarbeitungs-Apps, die bereits WebCodecs verwenden und WebGPU in die Videoverarbeitungspipeline einbinden möchten. Durch die WebCodecs-Integration wird die Verwendung von VideoFrame
als Quelle für einen GPUExternalTexture
- und einen copyExternalImageToTexture()
-Aufruf unterstützt. Sehen Sie sich das folgende Beispiel und den Eintrag „chromestatus“ an.
// Access the GPU device.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create VideoFrame from HTMLVideoElement.
const video = document.querySelector("video");
const videoFrame = new VideoFrame(video);
// Create texture from VideoFrame.
const texture = device.importExternalTexture({ source: videoFrame });
// TODO: Use texture in bind group creation.
Im experimentellen Beispiel Video Uploading with WebCodecs kannst du es ausprobieren.
Verlorenes Gerät, das von GPUAdapter requestDevice() zurückgegeben wurde
Wenn die Methode requestDevice()
für GPUAdapter
fehlschlägt, weil sie bereits zum Erstellen einer GPUDevice
verwendet wurde, wird sie jetzt mit einer GPUDevice
erfüllt, die sofort als verloren markiert wird, anstatt ein Versprechen zurückzugeben, das mit null
abgelehnt wird. Siehe Problem chromium:1234617.
const adapter = await navigator.gpu.requestAdapter();
const device1 = await adapter.requestDevice();
// New! The promise is not rejected anymore with null.
const device2 = await adapter.requestDevice();
// And the device is immediately marked as lost.
const info = await device2.lost;
Videowiedergabe bei Aufruf von importExternalTexture() flüssig halten
Wenn importExternalTexture()
mit einem HTMLVideoElement
aufgerufen wird, wird die zugehörige Videowiedergabe nicht mehr gedrosselt, wenn das Video nicht im Darstellungsbereich sichtbar ist. Siehe Problem chromium:1425252.
Einhaltung der Spezifikation
Das Argument message
im Konstruktor GPUPipelineError()
ist optional. Siehe change chromium:4613967.
Beim Aufruf von createShaderModule()
wird ein Fehler ausgegeben, wenn die WGSL-Quelle code
\0
enthält. Siehe Problem dawn:1345.
Die Standardmaximaldetailebene (lodMaxClamp
), die beim Abtasten einer Textur mit createSampler()
verwendet wird, ist 32. Weitere Informationen finden Sie unter chromium:4608063 ändern.
Entwicklerfreundlichkeit verbessern
In der JavaScript-Konsole von DevTools wird eine Nachricht angezeigt, die Entwickler daran erinnert, dass sie WebGPU auf einer nicht unterstützten Plattform verwenden. Weitere Informationen finden Sie unter Änderung chromium:4589369.
Fehlermeldungen bei der Pufferüberprüfung werden sofort in der JavaScript-Konsole der Entwicklertools angezeigt, wenn getMappedRange()
fehlschlägt, ohne dass Entwickler Befehle an die Warteschlange senden müssen. Weitere Informationen finden Sie unter change chromium:4597950.
Dawn-Updates
Die Debug-Ein/Aus-Schaltfläche disallow_unsafe_apis
wurde in allow_unsafe_apis
umbenannt und ist standardmäßig deaktiviert. Mit dieser Option werden Validierungsfehler bei API-Einstiegspunkten oder Parameterkombinationen unterdrückt, die noch nicht als sicher eingestuft werden. Sie kann für das Debugging nützlich sein.
Siehe Problem dawn:1685.
Das veraltete wgpu::ShaderModuleWGSLDescriptor
-Attribut source
wird zugunsten von code
entfernt. Siehe change dawn:130321.
Die fehlende Methode wgpu::RenderBundle::SetLabel()
wurde implementiert. Siehe change dawn:134502.
Anwendungen können ein bestimmtes Backend anfordern, wenn sie einen Adapter mit der Option wgpu::RequestAdapterOptionsBackendType
abrufen. Unten sehen Sie ein Beispiel. Weitere Informationen finden Sie unter issue dawn:1875.
wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
backendTypeOptions.backendType = wgpu::BackendType::D3D12;
wgpu::RequestAdapterOptions options = {};
options.nextInChain = &backendTypeOptions;
// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);
Es wurde eine neue SwapChain::GetCurrentTexture()
-Methode mit zusätzlichen Verwendungsmöglichkeiten für Swapchain-Texturen hinzugefügt, damit das Rückgabeobjekt wgpu::Texture
in Kopien verwendet werden kann. Siehe Beispiel unten und Problem dawn:1551.
wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();
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 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
- Updates zu Dawn
Chrome 130
- Zusammenführen von zwei Quellen
- Verbesserte Shader-Kompilierungszeiten unter Metal
- Einstellung der GPUAdapter-Methode „requestAdapterInfo()“
- Updates zu Dawn
Chrome 129
- HDR-Unterstützung mit Canvas-Tone-Mapping-Modus
- Erweiterter Support für Untergruppen
- Updates zu Dawn
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
- Updates zu Dawn
Chrome 127
- Experimentelle Unterstützung für OpenGL ES auf Android-Geräten
- Attribut „info“ von „GPUAdapter“
- Verbesserungen bei der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen beim Befehls-Encoder
- Updates zu Dawn
Chrome 126
- Limit für „maxTextureArrayLayers“ erhöht
- Optimierung des Pufferuploads für das Vulkan-Backend
- Verbesserte Shader-Kompilierungszeiten
- Eingereichte Befehlspuffere müssen eindeutig sein.
- Updates zu Dawn
Chrome 125
Chrome 124
- Lese- und Lese-/Schreibspeichertextur
- Unterstützung für Dienst- und freigegebene Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Updates zu Dawn
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
- Updates zu Dawn
Chrome 122
- Reichweite mit Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Limit für maxVertexAttributes erhöhen
- Updates zu Dawn
Chrome 121
- Unterstützung von WebGPU auf Android-Geräten
- 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
- Updates zu Dawn
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
- Updates zu Dawn
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für Lese-/Schreib- und schreibgeschützte Speichertextur
- Updates zu Dawn
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
- Updates zu Dawn
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe bei Aufruf von
importExternalTexture()
flüssig halten - Einhaltung der Spezifikation
- Entwicklerfreundlichkeit verbessern
- Updates zu Dawn
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
- Updates zu Dawn
Chrome 114
- JavaScript optimieren
- Bei nicht konfiguriertem Canvas wird bei getCurrentTexture() ein InvalidStateError geworfen
- WGSL-Updates
- Updates zu Dawn