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 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 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.
Von GPUAdapter requestDevice() zurückgegebenes Gerät
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 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;
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 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. 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 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 issue 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, 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();
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 130
- Dual-Source-Mischung
- Verbesserte Shader-Kompilierungszeiten unter Metal
- Einstellung von GPUAdapter requestAdapterInfo()
- Dawn-Updates
Chrome 129
- HDR-Unterstützung mit Canvas-Tone-Mapping-Modus
- Erweiterte Unterstützung von Untergruppen
- Dawn-Updates
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-interpolierte Stichprobenerhebung
- Updates zur Morgendämmerung
Chrome 127
- Experimentelle Unterstützung von OpenGL ES unter Android
- Attribut „info“ von „GPUAdapter“
- Verbesserungen bei der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen beim Befehls-Encoder
- Updates zur Morgendämmerung
Chrome 126
- Limit für „maxTextureArrayLayers“ erhöht
- Optimierung des Pufferuploads für das Vulkan-Backend
- Schnellere 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
- „Zucker“-Syntax für die Dereferenzierung von zusammengesetzten Daten 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 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
- Aktualisierung der Adapterinformationen
- 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-Zwischenspeicher aufheben
- 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 ruckelfrei, wenn
importExternalTexture()
aufgerufen wird - 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
- Entwicklererfahrung verbessern
- Dawn-Updates
Chrome 114
- JavaScript optimieren
- getCurrentTexture() bei nicht konfiguriertem Canvas löst InvalidStateError aus
- WGSL-Updates
- Updates zur Morgendämmerung