Intégration de WebCodecs
WebGPU expose une API pour créer des objets de "texture externe" opaques de HTMLVideoElement
à importExternalTexture()
. Vous pouvez utiliser ces objets pour échantillonner efficacement les images vidéo, potentiellement avec une copie 0 directement à partir des données du modèle de couleur YUV source.
Cependant, la spécification WebGPU initiale n'autorisait pas la création d'objets GPUExternalTexture
à partir d'objets WebCodecs VideoFrame
. Cette fonctionnalité est importante pour les applications de traitement vidéo avancées qui utilisent déjà WebCodecs et souhaitent intégrer WebGPU dans leur pipeline de traitement vidéo. L'intégration de WebCodecs permet d'utiliser VideoFrame
comme source pour un appel GPUExternalTexture
et copyExternalImageToTexture()
. Consultez l'exemple suivant et l'entrée chromestatus.
// 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.
Consultez l'exemple expérimental Video Upload with WebCodecs (Mise en ligne de vidéos avec WebCodecs) pour jouer.
Appareil perdu renvoyé par GPUAdapter requestDevice()
Si la méthode requestDevice()
sur GPUAdapter
échoue, car elle a déjà été utilisée pour créer un GPUDevice
, elle répond désormais à un GPUDevice
immédiatement marqué comme perdu, au lieu de renvoyer une promesse qui est rejetée avec null
. Consultez problème 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;
Maintenir une lecture fluide de la vidéo si la fonction importExternalTexture() est appelée
Lorsque importExternalTexture()
est appelé avec un HTMLVideoElement
, la lecture de la vidéo associée n'est plus limitée si elle n'est pas visible dans la fenêtre d'affichage. Consultez problème chromium:1425252.
Conformité aux spécifications
L'argument message
dans le constructeur GPUPipelineError()
est facultatif. Consultez la section Modifier chromium:4613967.
Une erreur est déclenchée lors de l'appel de createShaderModule()
si la source WGSL code
contient \0
. Voir issue dawn:1345.
Le niveau de détail maximal par défaut (lodMaxClamp
) utilisé lors de l'échantillonnage d'une texture avec createSampler()
est de 32. Consultez la section Modifier chromium:4608063.
Améliorer l'expérience des développeurs
Un message s'affiche dans la console JavaScript des outils de développement pour rappeler aux développeurs qu'ils utilisent WebGPU sur une plate-forme non compatible. Consultez Modifier chromium:4589369.
Les messages d'erreur de validation du tampon s'affichent instantanément dans la console JavaScript des outils de développement en cas d'échec de getMappedRange()
, sans obliger les développeurs à envoyer des commandes à la file d'attente. Consultez Modifier chromium:4597950.
Mises à jour de l'aube
Le bouton de débogage de disallow_unsafe_apis
a été renommé allow_unsafe_apis
et est désactivé par défaut. Ce bouton d'activation/de désactivation supprime les erreurs de validation sur les points d'entrée de l'API ou les combinaisons de paramètres qui ne sont pas encore considérées comme sécurisées. Cela peut être utile pour le débogage.
Voir issue dawn:1685.
L'attribut source
obsolète de wgpu::ShaderModuleWGSLDescriptor
est supprimé au profit de code
. Voir change dawn:130321.
La méthode wgpu::RenderBundle::SetLabel()
manquante a été implémentée. Voir change dawn:134502.
Les applications peuvent demander un backend particulier lors de l'obtention d'un adaptateur avec l'option wgpu::RequestAdapterOptionsBackendType
. Consultez l'exemple ci-dessous et le code 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);
Une nouvelle méthode SwapChain::GetCurrentTexture()
a été ajoutée avec des utilisations supplémentaires pour les textures de chaîne d'échange afin que le wgpu::Texture
renvoyé puisse être utilisé dans des copies. Consultez l'exemple ci-dessous et le code issue dawn:1551.
wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();
Nous n'aborderons ici que certains des points clés. Consultez la liste exhaustive des commits.
Nouveautés de WebGPU
Liste des points abordés dans la série Nouveautés de WebGPU.
Chrome 125
- Sous-groupes (fonctionnalité en cours de développement)
- Effectuer le rendu sur une tranche de texture 3D
- Informations dès l'aube
Chrome 124
- Textures de stockage en lecture seule et en lecture/écriture
- Assistance pour les service workers et les workers partagés
- Nouveaux attributs d'informations sur l'adaptateur
- Corrections de bugs
- Informations dès l'aube
Chrome 123
- Compatibilité des fonctions intégrées DP4a en WGSL
- Paramètres de pointeur non restreints dans WGSL
- Sucre syntaxique pour déréférencer des composites en WGSL
- État en lecture seule distinct pour les aspects du pochoir et de la profondeur
- Informations dès l'aube
Chrome 122
- Élargir la couverture grâce au mode de compatibilité (fonctionnalité en développement)
- Augmenter la limite maxVertexAttributes
- Informations dès l'aube
Chrome 121
- Prendre en charge WebGPU sur Android
- Utiliser DXC au lieu de FXC pour la compilation de nuanceurs sous Windows
- Horodatage des requêtes dans les passes de calcul et de rendu
- Points d'entrée par défaut des modules de nuanceurs
- Prendre en charge display-p3 en tant qu'espace colorimétrique GPUExternalTexture
- Informations sur les segments de mémoire
- Informations dès l'aube
Chrome 120
- Compatibilité avec les valeurs à virgule flottante 16 bits dans WGSL
- Repoussez les limites
- Modifications de l'état du pochoir de profondeur
- Mises à jour des informations concernant l'adaptateur
- Quantification des requêtes d'horodatage
- Fonctionnalités de nettoyage de printemps
Chrome 119
- Textures flottantes 32 bits filtrables
- Format des sommets unorm10-10-10-2
- format de texture rgb10a2uint
- Informations dès l'aube
Chrome 118
- Compatibilité avec HTMLImageElement et ImageData dans
copyExternalImageToTexture()
- Compatibilité expérimentale avec la texture de stockage en lecture/écriture et en lecture seule
- Informations dès l'aube
Chrome 117
- Tampon des sommets non défini
- Groupe de liaisons non défini
- Couper le son des erreurs lors de la création asynchrone d'un pipeline en cas de perte d'un appareil
- Mises à jour apportées à la création du module de nuanceur SPIR-V
- Améliorer l'expérience des développeurs
- Mettre en cache des pipelines avec une mise en page générée automatiquement
- Informations dès l'aube
Chrome 116
- Intégration de WebCodecs
- Appareil perdu renvoyé par GPUAdapter
requestDevice()
- Assurer une lecture vidéo fluide si
importExternalTexture()
est appelé - Conformité aux spécifications
- Améliorer l'expérience des développeurs
- Informations dès l'aube
Chrome 115
- Extensions de langage WGSL compatibles
- Compatibilité expérimentale avec Direct3D 11
- Utiliser un GPU distinct par défaut sur secteur
- Améliorer l'expérience des développeurs
- Informations dès l'aube
Chrome 114
- Optimiser JavaScript
- getCurrentTexture() sur un canevas non configuré génère une erreur InvalidStateError
- Mises à jour WGSL
- Informations dès l'aube