Extension fragment_depth WGSL
Dans les passes de rendu à forte intensité géométrique, les optimisations early-Z sont les meilleures alliées des développeurs. Ils améliorent considérablement les performances en permettant au GPU d'ignorer les pixels masqués avant d'exécuter des nuanceurs de fragments coûteux. Si une profondeur pixélisée échoue au test de profondeur, le GPU ignore complètement le nuanceur de fragment, à condition que le nuanceur n'ait pas d'autres effets secondaires.
Si vous souhaitez en savoir plus sur la façon dont le matériel gère cela, MJP propose un excellent article sur Quand faut-il désactiver Early-Z ?.
Bien que la manipulation de la profondeur personnalisée soit utile, l'effectuer dans votre nuanceur de fragments entraîne un coût caché. L'écriture dans @builtin(frag_depth) à l'intérieur d'un nuanceur de fragments force généralement les pilotes à désactiver ces optimisations early-Z pour l'ensemble de l'appel de dessin. Cela est dû au fait que les heuristiques du pilote ne peuvent pas garantir que la profondeur de sortie calculée du nuanceur correspond à la profondeur interpolée par le rastériseur.
Pour remédier à cette baisse de performances, l'extension WGSL fragment_depth vous permet de spécifier un nom de mode de profondeur less ou greater sur @builtin(frag_depth) pour indiquer explicitement comment la profondeur écrite se compare à la profondeur interpolée, ce qui permet au GPU d'appliquer en toute sécurité les optimisations early-Z.
Cette extension de langage peut être détectée dans JavaScript à l'aide de navigator.gpu.wgslLanguageFeatures. Il est recommandé d'utiliser une directive "requires" pour signaler le risque de non-portabilité avec requires fragment_depth; en haut de votre code de nuanceur WGSL. Consultez l'exemple suivant et l'intention de livraison.
if (!navigator.gpu.wgslLanguageFeatures.has("fragment_depth")) {
throw new Error(`WGSL fragment depth is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires fragment_depth;
@fragment
fn main() -> @builtin(frag_depth, less) f32 {
// Explicitly states that the output fragment depth is less than early-Z depth,
// allowing the GPU to safely preserve early-Z optimizations.
return 0.0f;
}`,
});
Compression de texture non alignée
La fonctionnalité GPU "texture-compression-unaligned" permet de créer des textures compressées dont les dimensions ne sont pas des multiples entiers de la taille du bloc (par exemple, 4x4 pour les formats BC, ETC2 et ASTC). Auparavant, WebGPU exigeait strictement que les tailles de texture s'alignent sur ces limites de bloc. En éliminant la nécessité de remplir ou de redimensionner les textures pour les aligner sur les blocs, cette fonctionnalité préserve la fidélité de la compression d'origine sans introduire de distorsion de redimensionnement. Consultez l'intention de livraison.
L'extrait de code suivant vérifie si l'adaptateur est compatible avec la compression de texture non alignée et, si c'est le cas, demande un appareil avec cette fonctionnalité.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("texture-compression-unaligned")) {
throw new Error("Texture compression unaligned support is not available");
}
// Explicitly request texture compression unaligned support.
const device = await adapter.requestDevice({
requiredFeatures: ["texture-compression-unaligned"],
});
Un grand merci à Ignacio Castaño, contributeur externe de spark.js, pour avoir piloté cette fonctionnalité, les spécifications et le travail sur la CTS !
Espaces colorimétriques srgb-linear et display-p3-linear
Avec l'ajout des espaces colorimétriques prédéfinis "srgb-linear" et "display-p3-linear", le contexte du canevas WebGPU peut désormais s'afficher directement dans des espaces colorimétriques linéaires à plage étendue pour prendre en charge les écrans à large gamme. Ces espaces colorimétriques maintiennent une relation linéaire entre les valeurs de pixel et la luminance physique. Elles sont donc idéales pour le rendu de la lumière physique dans les jeux, ainsi que pour les tâches de traitement spatial telles que l'anticrénelage, l'interpolation et la décimation. Consultez l'intention de livraison et l'exemple de RP Particles (HDR) n° 574.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");
context.configure({
device,
format: "rgba16float",
colorSpace: "display-p3-linear",
});
Format de sommet snorm10-10-10-2 supplémentaire
Le format de sommet "snorm10-10-10-2" est un format 32 bits compressé contenant quatre valeurs normalisées signées : trois composants 10 bits (r, g, b) et un composant 2 bits (a). Ce format vous permet de stocker efficacement des attributs, tels que des vecteurs normaux 3D avec un scalaire 2 bits supplémentaire, ou un indicateur d'alignement, tout en économisant de la bande passante mémoire. Consultez la demande d'extraction de spécification 6491.
Compatibilité avec f16 sous Linux pour NVIDIA
La fonctionnalité facultative "shader-f16", qui permet d'utiliser des valeurs à virgule flottante de 16 bits dans WGSL, est désormais compatible avec Linux pour les pilotes de GPU NVIDIA récents. Consultez le problème chromium:42251215.
Mises à jour de Dawn
Vous pouvez désormais interroger le LUID du DXGIAdapter sous-jacent pour un adaptateur GPU donné à l'aide de la structure WGPUAdapterPropertiesD3D. Consultez le problème chromium:562849566.
Ce commentaire couvre certains des points essentiels. 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 155-156
- Extension fragment_depth WGSL
- Compression de texture non alignée
- Espaces colorimétriques srgb-linear et display-p3-linear
- Format de sommet snorm10-10-10-2 supplémentaire
- Compatibilité avec f16 sous Linux pour NVIDIA
- Mises à jour de Dawn
Chrome 153-154
- Extension buffer_view WGSL
- Extension WGSL swizzle_assignment
- Mises à jour de l'extension WGSL
- Mises à jour de Dawn
Chrome 151-152
- Contrôle de la taille des sous-groupes
- OperationError pour les échecs de validation setImmediates
- Mises à jour de Dawn
Chrome 149-150
Chrome 147-148
Chrome 146
- Prise en charge du mode de compatibilité WebGPU sur OpenGL ES 3.1
- Rattachements temporaires
- Extension WGSL texture_and_sampler_let
- Mises à jour de Dawn
Chrome 145
- Extension WGSL subgroup_uniformity
- Mappage de tampon synchrone expérimental dans les nœuds de calcul
- Mises à jour de Dawn
Chrome 144
- Extension WGSL subgroup_id
- Extension WGSL uniform_buffer_standard_layout
- WebGPU sous Linux
- writeBuffer et writeTexture plus rapides
- Mises à jour de Dawn
Chrome 143
- Swizzle de composant de texture
- Suppression de l'utilisation de la texture de stockage en lecture seule bgra8unorm
- Mises à jour de Dawn
Chrome 142
- Extension de la compatibilité avec les formats de texture
- Index de primitive en WGSL
- Mises à jour de Dawn
Chrome 141
- Réponse aux incidents Tint terminée
- Analyse de la plage d'entiers dans le compilateur WGSL
- Mise à jour de SPIR-V 1.4 pour le backend Vulkan
- Mises à jour de Dawn
Chrome 140
- Les requêtes d'appareil consomment l'adaptateur
- Raccourci pour utiliser une texture là où une vue de texture est utilisée
- WGSL textureSampleLevel est compatible avec les textures 1D
- Abandon de l'utilisation de la texture de stockage en lecture seule bgra8unorm
- Suppression de l'attribut isFallbackAdapter de GPUAdapter
- Mises à jour de Dawn
Chrome 139
- Compatibilité des textures 3D avec les formats compressés BC et ASTC
- Nouvelle fonctionnalité "core-features-and-limits"
- Essai Origin Trial pour le mode de compatibilité WebGPU
- Mises à jour de Dawn
Chrome 138
- Raccourci pour utiliser un tampon comme ressource de liaison
- Modifications des exigences de taille pour les tampons mappés lors de la création
- Rapport sur l'architecture des GPU récents
- Abandon de l'attribut isFallbackAdapter de GPUAdapter
- Mises à jour de Dawn
Chrome 137
- Utiliser la vue de texture pour la liaison externalTexture
- Copie de tampons sans spécifier de décalages ni de taille
- WGSL workgroupUniformLoad using pointer to atomic
- Attribut powerPreference de GPUAdapterInfo
- Suppression de l'attribut compatibilityMode de GPURequestAdapterOptions
- Mises à jour de Dawn
Chrome 136
- Attribut isFallbackAdapter de GPUAdapterInfo
- Amélioration du temps de compilation des nuanceurs sur D3D12
- Enregistrer et copier des images de canevas
- Restrictions du mode de compatibilité Lift
- Mises à jour de Dawn
Chrome 135
- Autoriser la création d'une mise en page de pipeline avec une mise en page de groupe de liaisons nulle
- Autoriser les fenêtres d'affichage à s'étendre au-delà des limites des cibles de rendu
- Accès plus facile au mode de compatibilité expérimental sur Android
- Suppression de la limite maxInterStageShaderComponents
- Mises à jour de Dawn
Chrome 134
- Améliorer les charges de travail de machine learning avec des sous-groupes
- Suppression de la compatibilité des types de textures filtrables à virgule flottante en tant que types mélangeables
- Mises à jour de Dawn
Chrome 133
- Formats de vertex unorm8x4-bgra et à un composant supplémentaires
- Autoriser la demande de limites inconnues avec une valeur non définie
- Modifications des règles d'alignement WGSL
- Amélioration des performances WGSL avec discard
- Utiliser VideoFrame displaySize pour les textures externes
- Gérer les images avec des orientations autres que celles 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 du sous-groupe
- Abandon de la limite maxInterStageShaderComponents
- Mises à jour de Dawn
Chrome 132
- Utilisation de la vue de texture
- Mélange de textures à virgule flottante 32 bits
- Attribut adapterInfo de GPUDevice
- La configuration du contexte du canevas avec un format non valide génère une erreur JavaScript
- Restrictions de filtrage de l'échantillonneur sur les textures
- Tests de sous-groupes étendus
- Améliorer l'expérience des développeurs
- Compatibilité expérimentale avec les formats de texture normalisés 16 bits
- Mises à jour de Dawn
Chrome 131
- Distances de découpe dans WGSL
- GPUCanvasContext getConfiguration()
- Les primitives de point et de ligne ne doivent pas avoir de biais de profondeur
- Fonctions intégrées d'analyse inclusive pour les sous-groupes
- Prise en charge expérimentale du multi-draw indirect
- Option de compilation du module de nuanceur "strict math"
- Suppression de GPUAdapter requestAdapterInfo()
- Mises à jour de Dawn
Chrome 130
- Mélange à double source
- Amélioration du temps de compilation des nuanceurs sur Metal
- Abandon de requestAdapterInfo() de GPUAdapter
- Mises à jour de Dawn
Chrome 129
- Compatibilité HDR avec le mode de mappage des tons du canevas
- Prise en charge étendue des sous-groupes
- Mises à jour de Dawn
Chrome 128
- Tester les sous-groupes
- Abandon de la définition du biais de profondeur pour les lignes et les points
- Masquer l'avertissement des outils de développement concernant les erreurs non capturées si preventDefault
- WGSL interpolate sampling first and either
- Mises à jour de Dawn
Chrome 127
- Compatibilité expérimentale avec OpenGL ES sur Android
- Attribut d'informations GPUAdapter
- Améliorations de l'interopérabilité WebAssembly
- Amélioration des erreurs de l'encodeur de commande
- Mises à jour de Dawn
Chrome 126
- Augmentation de la limite maxTextureArrayLayers
- Optimisation de l'importation de la mémoire tampon pour le backend Vulkan
- Amélioration du temps de compilation des nuanceurs
- Les tampons de commande envoyés doivent être uniques
- Mises à jour de Dawn
Chrome 125
- Sous-groupes (fonctionnalité en cours de développement)
- Afficher dans une tranche de texture 3D
- Mises à jour de Dawn
Chrome 124
- Textures de stockage en lecture seule et en lecture/écriture
- Compatibilité avec les service workers et les shared workers
- Nouveaux attributs d'informations sur l'adaptateur
- Corrections de bugs
- Mises à jour de Dawn
Chrome 123
- Prise en charge des fonctions intégrées DP4a dans WGSL
- Paramètres de pointeur sans restriction dans WGSL
- Sucre syntaxique pour déréférencer les composites dans WGSL
- État en lecture seule distinct pour les aspects de stencil et de profondeur
- Mises à jour de Dawn
Chrome 122
- Élargir la couverture avec le mode de compatibilité (fonctionnalité en cours de développement)
- Augmenter la limite maxVertexAttributes
- Mises à jour de Dawn
Chrome 121
- Compatibilité avec WebGPU sur Android
- Utiliser DXC au lieu de FXC pour la compilation des nuanceurs sous Windows
- Requêtes d'horodatage dans les passes de calcul et de rendu
- Points d'entrée par défaut des modules de nuanceur
- Compatibilité avec display-p3 en tant qu'espace colorimétrique GPUExternalTexture
- Informations sur les tas de mémoire
- Mises à jour de Dawn
Chrome 120
- Compatibilité avec les valeurs à virgule flottante 16 bits dans WGSL
- Repoussez les limites
- Modifications de l'état du tampon de profondeur
- Mises à jour des informations sur l'adaptateur
- Quantification des requêtes d'horodatage
- Fonctionnalités de nettoyage de printemps
Chrome 119
- Textures flottantes 32 bits filtrables
- Format de sommet unorm10-10-10-2
- Format de texture rgb10a2uint
- Mises à jour de Dawn
Chrome 118
- Compatibilité de HTMLImageElement et ImageData dans
copyExternalImageToTexture() - Compatibilité expérimentale avec les textures de stockage en lecture-écriture et en lecture seule
- Mises à jour de Dawn
Chrome 117
- Annuler la définition du tampon de sommets
- Dissocier le groupe de liaisons
- Ignorer les erreurs de création de pipeline asynchrone lorsque l'appareil est perdu
- Mises à jour de la création de modules de nuanceurs 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
- Mises à jour de Dawn
Chrome 116
- Intégration de WebCodecs
- Appareil perdu renvoyé par GPUAdapter
requestDevice() - Assurer la fluidité de la lecture vidéo si
importExternalTexture()est appelé - Conformité aux spécifications
- Améliorer l'expérience des développeurs
- Mises à jour de Dawn
Chrome 115
- Extensions de langage WGSL compatibles
- Compatibilité expérimentale avec Direct3D 11
- Utiliser le GPU dédié par défaut sur secteur
- Améliorer l'expérience des développeurs
- Mises à jour de Dawn
Chrome 114
- Optimiser le code JavaScript
- getCurrentTexture() sur un canevas non configuré génère une erreur InvalidStateError
- Mises à jour de WGSL
- Mises à jour de Dawn