WebCodecs-Integration
WebGPU bietet eine API zum Erstellen von undurchsichtigen „externen Texturen“-Objekten von HTMLVideoElement
bis importExternalTexture()
. Sie können diese Objekte verwenden, um die Videoframes effizient zu erfassen, möglicherweise auf 0-Kopie-Basis direkt aus den YUV-Quellfarbmodelldaten.
Die ursprüngliche WebGPU-Spezifikation ließ jedoch das Erstellen von GPUExternalTexture
-Objekten aus WebCodecs-Objekten vom Typ VideoFrame
nicht zu. 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 chromestatus-Eintrag 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()
in GPUAdapter
fehlschlägt, weil sie bereits zum Erstellen eines GPUDevice
verwendet wurde, erfüllt sie jetzt ein GPUDevice
, das sofort als verloren markiert ist, 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. Siehe chromium:4608063 ändern.
Entwicklererfahrung verbessern
In der JavaScript-Konsole der Entwicklertools wird eine Meldung angezeigt, die Entwickler daran erinnert, wenn sie WebGPU auf einer nicht unterstützten Plattform verwenden. Weitere Informationen finden Sie unter Änderung chromium:4589369.
Fehlermeldungen bei der Puffervalidierung werden sofort in der JavaScript-Konsole der Entwicklertools angezeigt, wenn getMappedRange()
fehlschlägt, ohne dass Entwickler gezwungen sind, Befehle an die Warteschlange zu senden. Siehe chromium:4597950 ändern.
Dawn-Updates
Die Ein/Aus-Schaltfläche für die Fehlerbehebung von disallow_unsafe_apis
wurde in allow_unsafe_apis
umbenannt und ist standardmäßig auf „Deaktiviert“ gesetzt. 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 Back-End anfordern, wenn ein Adapter mit der Option wgpu::RequestAdapterOptionsBackendType
abgerufen wird. Unten findest du ein Beispiel mit 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
- Clip-Abstände in WGSL
- GPUCanvasContext getConfiguration()
- Punkt- und Linienprimitive dürfen keine Tiefenverzerrung haben.
- Integrierte Funktionen für inklusive Stichprobenerhebungen für Untergruppen
- Experimentelle Unterstützung für indirekte Multi-Draw-Anweisungen
- Shader-Modul-Kompilierungsoption „strict math“
- GPUAdapter-Methode „requestAdapterInfo()“ entfernen
- Updates zur Morgendämmerung
Chrome 130
- Dual-Source-Mischung
- Verbesserte Shader-Kompilierungszeiten unter Metal
- Einstellung der GPUAdapter-Methode „requestAdapterInfo()“
- Dawn-Updates
Chrome 129
- HDR-Unterstützung mit Canvas-Tone-Mapping-Modus
- Erweiterter Support für Untergruppen
- Updates zur Morgendämmerung
Chrome 128
- Mit Untergruppen experimentieren
- Einstellung der Tiefenverzerrung für Linien und Punkte eingestellt
- Entwicklertools-Warnung für nicht erfassten Fehler ausblenden, wenn „preventDefault“ festgelegt ist
- WGSL interpoliert zuerst die Stichprobe und
- Dawn-Updates
Chrome 127
- Experimentelle Unterstützung für OpenGL ES auf Android-Geräten
- Attribut „info“ von „GPUAdapter“
- Verbesserungen der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen beim Befehls-Encoder
- Dawn-Updates
Chrome 126
- Limit für „maxTextureArrayLayers“ erhöht
- Optimierung des Zwischenspeicheruploads für das Vulkan-Backend
- Verbesserte Shader-Kompilierungszeiten
- Eingereichte Befehlspuffere müssen eindeutig sein.
- Updates zur Morgendämmerung
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 Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Limit für maxVertexAttributes erhöhen
- Dawn-Updates
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 für Shader-Module
- 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
- Zeitstempelquantisierung von Abfragen
- Funktionen für den Frühjahrsputz
Chrome 119
- Filterbare 32-Bit-Float-Texturen
- unorm10-10-10-2-Vertex-Format
- rgb10a2uint-Texturformat
- Updates zur Morgendämmerung
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
- Entwicklererfahrung 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
- Updates zur Morgendämmerung
Chrome 114
- JavaScript-Code optimieren
- Bei nicht konfiguriertem Canvas wird bei getCurrentTexture() ein InvalidStateError geworfen
- WGSL-Updates
- Updates zur Morgendämmerung