WebCodecs-Integration
WebGPU macht eine API verfügbar, um eine undurchsichtige „externe Textur“ zu erstellen Objekte 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 fortgeschrittene Videoverarbeitungsanwendungen, die bereits WebCodecs verwenden und WebGPU in die Videoverarbeitungspipeline integrieren möchten. Durch die WebCodecs-Integration wird die Verwendung eines 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.
Sehen Sie sich dazu das Testbeispiel Video-Upload mit WebCodecs an.
Von GPUAdapter requestDevice() zurückgegebenes Gerät
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 issue 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;
Für eine reibungslose Videowiedergabe, wenn importExternalTexture() aufgerufen wird
Wenn importExternalTexture()
mit einer HTMLVideoElement
aufgerufen wird, wird die zugehörige Videowiedergabe nicht mehr gedrosselt, wenn das Video nicht im Darstellungsbereich sichtbar ist. Siehe Problem „chromium:1425252“.
Spezifikationen
Das Argument message
im Konstruktor GPUPipelineError()
ist optional. Siehe chromium:4613967 ändern.
Beim Aufrufen von createShaderModule()
wird ein Fehler ausgelöst, wenn die WGSL-Quelle code
\0
enthält. Siehe issue dawn:1345.
Die maximale Detailebene (lodMaxClamp
), die beim Sampling einer Textur mit createSampler()
verwendet wird, beträgt standardmäßig 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. Siehe chromium:4589369 ändern.
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.
Updates zur Morgendämmerung
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 Ein/Aus-Schaltfläche werden Validierungsfehler bei API-Einstiegspunkten oder Parameterkombinationen unterdrückt, die noch nicht als sicher gelten. Sie kann beim Debugging hilfreich sein.
Siehe issue dawn:1685.
Das eingestellte Attribut „source
“ (wgpu::ShaderModuleWGSLDescriptor
) wird zugunsten von „code
“ entfernt. Weitere Informationen finden Sie unter change dawn:130321.
Die fehlende Methode wgpu::RenderBundle::SetLabel()
wurde implementiert. Weitere Informationen finden Sie unter 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, sodass die Rückgabe-wgpu::Texture
in Kopien verwendet werden kann. Unten findest du ein Beispiel mit issue dawn:1551.
wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();
Hier werden nur einige der wichtigsten Vorteile behandelt. Vollständige Liste der Commits
Das ist neu bei WebGPU
Eine Liste aller behandelten Themen der Reihe What's New in WebGPU.
Chrome 128
- Tests mit Untergruppen
- Einstellung der Tiefenverzerrung für Linien und Punkte verwerfen
- Entwicklertools-Warnung für nicht erfassten Fehler ausblenden, wenn „preventDefault“ festgelegt ist
- WGSL-interpolierte Stichprobenerhebung
- Updates zur Morgendämmerung
Chrome 127
- Experimentelle Unterstützung von OpenGL ES unter Android
- GPUAdapter-Infoattribut
- Verbesserungen der WebAssembly-Interoperabilität
- Verbesserte Fehler des Befehls-Encoders
- Updates zur Morgendämmerung
Chrome 126
- Limit für maxTextureArrayLayers erhöhen
- Optimierung des Zwischenspeicheruploads für das Vulkan-Backend
- Schnellere Kompilierungszeiten
- Gesendete Befehlspuffer müssen eindeutig sein
- Updates zur Morgendämmerung
Chrome 125
Chrome 124
- Schreibgeschützte Speichertexturen
- Unterstützung für Service Worker und Shared Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Updates zur Morgendämmerung
Chrome 123
- Unterstützung der integrierten DP4a-Funktionen in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- „Zucker“-Syntax für die Dereferenzierung von zusammengesetzten Daten in WGSL
- Separater schreibgeschützter Status für Schablonen- und Tiefenaspekte
- Updates zur Morgendämmerung
Chrome 122
- Reichweite mit dem Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- maxVertexAttributes-Limit erhöhen
- Updates zur Morgendämmerung
Chrome 121
- Unterstützung von WebGPU unter Android
- DXC anstelle von FXC für die Shader-Kompilierung unter Windows verwenden
- Zeitstempelabfragen in Rechen- und Renderingdurchläufen
- Standardeinstiegspunkte für Shader-Module
- Unterstützung von „display-p3“ als GPUExternalTexture-Farbraum
- Informationen zu Arbeitsspeicher-Heaps
- Updates zur Morgendämmerung
Chrome 120
- Unterstützung von 16-Bit-Gleitkommawerten in WGSL
- Gehe an deine Grenzen
- Änderungen am Status der Tiefenschablonen
- Aktualisierung der Adapterinformationen
- Zeitstempelquantisierung von Abfragen
- Frühjahrsputz
Chrome 119
- Filterbare 32-Bit-Float-Texturen
- unorm10-10-10-2 Vertexformat
- rgb10a2uint-Texturformat
- Updates zur Morgendämmerung
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für nicht schreibgeschützte und schreibgeschützte Speichertexturen
- Updates zur Morgendämmerung
Chrome 117
- Vertex-Zwischenspeicher aufheben
- Bindungsgruppe aufheben
- Fehler bei der asynchronen Pipelineerstellung stummschalten, wenn Gerät verloren geht
- Aktualisierungen beim Erstellen von SPIR-V-Shadermodulen
- Entwicklererfahrung verbessern
- Caching-Pipelines mit automatisch generiertem Layout
- Updates zur Morgendämmerung
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe ruckelfrei, wenn
importExternalTexture()
aufgerufen wird - Konformität mit Spezifikationen
- Entwicklererfahrung verbessern
- Updates zur Morgendämmerung
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Separate GPU standardmäßig im Netzbetrieb nutzen
- Entwicklererfahrung verbessern
- Updates zur Morgendämmerung
Chrome 114
- JavaScript-Code optimieren
- getCurrentTexture() bei nicht konfiguriertem Canvas löst InvalidStateError aus
- Wichtige Informationen von WGSL
- Updates zur Morgendämmerung