Publié le 29 janvier 2025
Autres formats de vertex unorm8x4-bgra et à un seul composant
Le format de sommet "unorm8x4-bgra"
et les formats de sommet à un composant suivants ont été ajoutés: "uint8"
, "sint8"
, "unorm8"
, "snorm8"
, "uint16"
, "sint16"
, "unorm16"
, "snorm16"
et "float16"
.
Le format de sommet "unorm8x4-bgra"
permet de charger plus facilement les couleurs de sommet encodées en BGRA tout en conservant le même nuanceur. De plus, le format de sommet à un composant vous permet de ne demander que les données nécessaires, alors qu'auparavant, au moins deux fois plus de données étaient requises pour les types de données 8 et 16 bits. Consultez l'entrée chromestatus et le problème 376924407.
Autoriser les limites inconnues à être demandées avec une valeur non définie
Pour rendre l'API WebGPU moins fragile à mesure qu'elle évolue, vous pouvez désormais demander des limites inconnues avec la valeur undefined
lorsque vous demandez un appareil GPU. Cela est utile dans le code d'application suivant, par exemple, où adapter.limits.someLimit
peut être undefined
si someLimit
n'existe plus. Consultez la spécification PR 4781.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice({
requiredLimits: { someLimit: adapter.limits.someLimit }, // someLimit can be undefined
});
Modifications apportées aux règles d'alignement WGSL
Il n'est plus possible de fournir une valeur d'alignement trop faible pour un membre de struct, car @align(n)
doit désormais diviser RequiredAlignOf
pour toutes les structs. Cette modification non rétrocompatible simplifie l'utilisation du langage WGSL et le rend plus compatible avec Firefox et Safari. Vous trouverez un exemple de code illustrant les différences entre les compilateurs Tint, Naga et WebKit dans la PR de spécification.
Gains de performances WGSL avec la suppression
En raison d'une baisse de performances importante observée lors de l'affichage d'un effet de réflexion dans l'espace d'écran (SSR) complexe, l'implémentation de l'instruction de suppression utilise la sémantique fournie par la plate-forme pour rétrograder vers une invocation d'assistant lorsqu'elle est disponible. Cela améliore les performances des nuanceurs qui utilisent l'abandon. Consultez le problème 372714384.
Utiliser la taille d'affichage VideoFrame pour les textures externes
Les dimensions displayWidth
et displayHeight
doivent être utilisées comme taille apparente de la GPUExternalTexture lors de l'importation d'un VideoFrame conformément à la spécification WebGPU. Toutefois, la taille visible a été utilisée de manière incorrecte, ce qui a entraîné des problèmes lors de l'utilisation de textureLoad()
sur une GPUExternalTexture. Ce problème est désormais résolu. Consultez le problème 377574981.
Gérer les images avec des orientations autres que par défaut à l'aide de copyExternalImageToTexture
La méthode GPUQueue copyExternalImageToTexture()
permet de copier le contenu d'une image ou d'un canevas dans une texture. Il gère désormais correctement les images dont l'orientation n'est pas par défaut. Ce n'était pas le cas auparavant lorsque la source était un ImageBitmap avec imageOrientation
"from-image"
ou une image dont l'orientation n'était pas par défaut. Voir le problème 384858956.
Améliorer l'expérience des développeurs
Il peut être surprenant que adapter.limits
affiche des valeurs élevées, mais vous ne réalisez pas que vous devez demander explicitement une limite plus élevée lorsque vous demandez un appareil GPU. Sinon, vous risquez d'atteindre des limites inattendues par la suite.
Pour vous aider, les messages d'erreur ont été développés avec des conseils vous indiquant de demander explicitement une limite plus élevée lorsqu'aucune limite n'a été spécifiée dans requiredLimits
lors de l'appel de requestDevice()
. Voir le problème 42240683.
L'exemple suivant montre un message d'erreur amélioré enregistré dans la console DevTools lors de la création d'un tampon GPU dont la taille dépasse la limite d'appareil de taille de tampon maximale par défaut.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create a GPU buffer with a size exceeding the default max buffer size device limit.
const size = device.limits.maxBufferSize + 1;
const buffer = device.createBuffer({ size, usage: GPUBufferUsage.MAP_READ });
device.queue.submit([]);
⚠️ Buffer size (268435457) exceeds the max buffer size limit (268435456). This adapter supports a higher maxBufferSize of 4294967296, which can be specified in requiredLimits when calling requestDevice(). Limits differ by hardware, so always check the adapter limits prior to requesting a higher limit. - While calling [Device].CreateBuffer([BufferDescriptor]).
Activer le mode de compatibilité avec featureLevel
Il est désormais possible de demander un adaptateur GPU en mode compatibilité expérimentale en définissant l'option featureLevel
standardisée sur "compatibility"
. Les chaînes "core"
(par défaut) et "compatibility"
sont les seules valeurs autorisées. Consultez l'exemple suivant et la spécification PR 4897.
// Request a GPU adapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
if (adapter?.featureLevel === "compatibility") {
// Any devices created from this adapter will support only compatibility mode.
}
L'option featureLevel
remplace l'option compatibilityMode
non normalisée, tandis que l'attribut featureLevel
non normalisé remplace l'attribut isCompatibilityMode
.
Comme il s'agit d'une fonctionnalité expérimentale, vous devez exécuter Chrome avec l'indicateur "Unsafe WebGPU Support" (Compatibilité avec WebGPU non sécurisé) défini sur chrome://flags/#enable-unsafe-webgpu
pour le moment. Consultez webgpureport.org pour l'essayer.
Nettoyage des fonctionnalités expérimentales des sous-groupes
Les fonctionnalités expérimentales de sous-groupe "chromium-experimental-subgroups"
et "chromium-experimental-subgroup-uniform-control-flow"
obsolètes sont supprimées. Consultez le problème 377868468.
La fonctionnalité expérimentale "subgroups"
est désormais tout ce dont vous avez besoin pour tester des sous-groupes. La fonctionnalité expérimentale "subgroups-f16"
est obsolète et sera bientôt supprimée. Vous pouvez utiliser des valeurs f16 avec des sous-groupes lorsque votre application demande à la fois des fonctionnalités "shader-f16"
et "subgroups"
. Voir le problème 380244620.
Rendre obsolète la limite maxInterStageShaderComponents
La limite maxInterStageShaderComponents
est obsolète pour plusieurs raisons:
- Redundance avec
maxInterStageShaderVariables
: cette limite remplit déjà un objectif similaire, à savoir contrôler la quantité de données transmises entre les étapes de nuanceur. - Différences mineures: bien que les deux limites soient calculées de manière légèrement différente, ces différences sont mineures et peuvent être gérées efficacement dans la limite
maxInterStageShaderVariables
. - Simplification: la suppression de
maxInterStageShaderComponents
simplifie l'interface du nuanceur et réduit la complexité pour les développeurs. Au lieu de gérer deux limites distinctes avec des différences subtiles, ils peuvent se concentrer surmaxInterStageShaderVariables
, qui est plus approprié et plus complet.
L'objectif est de la supprimer complètement dans Chrome 135. Consultez l'intention d'abandon et le problème 364338810.
Informations Dawn
wgpu::Device::GetAdapterInfo(adapterInfo)
vous permet d'obtenir des informations sur l'adaptateur directement à partir d'un wgpu::Device
. Consultez le problème 376600838.
La structure WGPUProgrammableStageDescriptor
a été rebaptisée WGPUComputeState
pour que l'état de calcul soit cohérent avec les états de vertex et de fragment. Voir le problème 379059434.
La valeur d'énumération wgpu::VertexStepMode::VertexBufferNotUsed
a été supprimée. Une mise en page de tampon de sommets qui n'est pas utilisée peut désormais être exprimée avec {.stepMode=wgpu::VertexStepMode::Undefined, .attributeCount=0}
. Consultez le problème 383147017.
Il ne s'agit là que de quelques-uns des points clés. Consultez la liste exhaustive des commits.
Nouveautés de WebGPU
Liste de tout ce qui a été abordé dans la série Nouveautés de WebGPU.
Chrome 133
- Formats de sommets unorm8x4-bgra et à un seul composant supplémentaires
- Autoriser les limites inconnues à être demandées avec une valeur non définie
- Modifications des règles d'alignement WGSL
- Amélioration des performances WGSL avec la suppression
- Utiliser la taille d'affichage VideoFrame pour les textures externes
- Gérer les images avec des orientations autres que par défaut à l'aide de copyExternalImageToTexture
- Améliorer l'expérience des développeurs
- Activer le mode de compatibilité avec featureLevel
- Nettoyage des fonctionnalités expérimentales des sous-groupes
- Abandon de la limite maxInterStageShaderComponents
- Informations sur Dawn
Chrome 132
- Utilisation de la vue Texture
- Mélange de textures à virgule flottante 32 bits
- Attribut adapterInfo de GPUDevice
- Configurer le contexte de canevas avec un format non valide génère une erreur JavaScript
- Filtrer les restrictions d'échantillonneur sur les textures
- Test étendu des sous-groupes
- Améliorer l'expérience des développeurs
- Compatibilité expérimentale avec les formats de texture normalisés 16 bits
- Informations sur Dawn
Chrome 131
- Couper les distances en WGSL
- GPUCanvasContext getConfiguration()
- Les primitives de point et de ligne ne doivent pas comporter de biais de profondeur.
- Fonctions intégrées d'analyse inclusive pour les sous-groupes
- Compatibilité expérimentale avec le multi-dessin indirect
- Option de compilation du module de nuanceur : mathématiques strictes
- Suppression de la méthode requestAdapterInfo() de GPUAdapter
- Informations sur Dawn
Chrome 130
- Mélange de deux sources
- Améliorations du temps de compilation des nuanceurs sur Metal
- Obsolete de la méthode requestAdapterInfo() de GPUAdapter
- Informations sur Dawn
Chrome 129
- Compatibilité HDR avec le mode de mappage des tons du canevas
- Prise en charge des sous-groupes étendus
- Informations sur Dawn
Chrome 128
- Tester les sous-groupes
- Abandon du paramètre de biais de profondeur pour les lignes et les points
- Masquer l'avertissement DevTools d'erreur non capturée si preventDefault
- WGSL effectue d'abord l'interpolation de l'échantillonnage, puis
- Informations sur Dawn
Chrome 127
- Compatibilité expérimentale d'OpenGL ES sur Android
- Attribut info de GPUAdapter
- Améliorations de l'interopérabilité WebAssembly
- Amélioration des erreurs de l'encodeur de commandes
- Informations sur Dawn
Chrome 126
- Augmentation de la limite maxTextureArrayLayers
- Optimisation de l'importation de tampons pour le backend Vulkan
- Améliorations du temps de compilation des nuanceurs
- Les tampons de commande envoyés doivent être uniques
- Informations sur Dawn
Chrome 125
- Sous-groupes (fonctionnalité en cours de développement)
- Affichage d'une tranche de texture 3D
- Informations sur Dawn
Chrome 124
- Textures de stockage en lecture seule et en lecture/écriture
- Compatibilité avec les service workers et les workers partagés
- Nouveaux attributs d'informations sur l'adaptateur
- Corrections de bugs
- Informations sur Dawn
Chrome 123
- Compatibilité des fonctions intégrées DP4a avec WGSL
- Paramètres de pointeur non restreints dans WGSL
- Syntaxe simplifiée pour le déréférencement des composites en WGSL
- État en lecture seule distinct pour les aspects du pochoir et de la profondeur
- Informations sur Dawn
Chrome 122
- Élargir la couverture avec le mode de compatibilité (fonctionnalité en cours de développement)
- Augmentation de la limite maxVertexAttributes
- Informations sur Dawn
Chrome 121
- Compatibilité avec WebGPU sur Android
- Utiliser DXC au lieu de FXC pour la compilation de nuanceurs sous Windows
- Requêtes de code temporel dans les passes de calcul et de rendu
- Points d'entrée par défaut vers les modules de nuanceurs
- Compatibilité avec display-p3 en tant qu'espace de couleurs GPUExternalTexture
- Informations sur les tas de mémoire
- Informations sur Dawn
Chrome 120
- Compatibilité avec les valeurs à virgule flottante 16 bits dans WGSL
- Repousser les limites
- Modifications apportées à l'état du tampon de profondeur
- Modifications des informations sur les adaptateurs
- Quantification des requêtes d'horodatage
- Fonctionnalités de nettoyage de printemps
Chrome 119
- Textures à virgule flottante 32 bits filtrables
- Format de sommet unorm10-10-10-2
- Format de texture rgb10a2uint
- Informations sur Dawn
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 sur Dawn
Chrome 117
- Désactiver le tampon de sommets
- Désactiver le groupe de liaisons
- Ignorer les erreurs de création de pipeline asynchrone en cas de perte de l'appareil
- Mise à jour de la création de modules de nuanceurs SPIR-V
- Améliorer l'expérience des développeurs
- Mise en cache des pipelines avec une mise en page générée automatiquement
- Informations sur Dawn
Chrome 116
- Intégration de WebCodecs
- Appareil égaré renvoyé par GPUAdapter
requestDevice()
- Maintenir la fluidité de la lecture vidéo si
importExternalTexture()
est appelé - Conformité aux spécifications
- Améliorer l'expérience des développeurs
- Informations sur Dawn
Chrome 115
- Extensions de langage WGSL prises en charge
- Compatibilité expérimentale avec Direct3D 11
- Obtenir un GPU distinct par défaut sur l'alimentation secteur
- Améliorer l'expérience des développeurs
- Informations sur Dawn
Chrome 114
- Optimiser JavaScript
- getCurrentTexture() sur un canevas non configuré génère une erreur InvalidStateError
- Mises à jour de WGSL
- Informations sur Dawn