dimanche 5 mars 2023

Microsoft PIX 2303.02

 Microsoft PIX est conçu pour être utilisé comme un outil de réglage et de débogage des performances pour les développeurs de jeux.
Microsoft PIX peut également être utilisé pour analyser les jeux DirectX 12 sur Windows. Il utilise le processus de capture GPU pour restituer des images uniques. Le processus de capture GPU donne aux développeurs la possibilité d'approfondir les détails spécifiques du processus.
Les développeurs trouveront la possibilité de régler leurs jeux DirectX 12, en les gardant pertinents dans l'arène de développement de jeux PC toujours compétitive.

PIX sur Windows version 2303.02, qui peut être téléchargée ici . Nous avons également publié une nouvelle version de WinPixEventRuntime, qui peut être téléchargée ici .

Cette version comporte de nombreuses nouvelles fonctionnalités et corrections de bogues en réponse directe aux demandes et aux commentaires que nous avons reçus des utilisateurs PIX. Merci pour tous vos commentaires et suggestions jusqu'à présent, et continuez à nous en faire part ! Les moyens de nous contacter incluent le serveur DirectX Discord ( discord.gg/directx ) et le bouton de commentaires dans PIX.

Cette version comprend :

Captures GPU

Captures de synchronisation

Autre

Débogage du shader RayGen :

Cette version inclut une prise en charge complète du débogage des shaders de génération de rayons (DXR 1.0) dans le débogueur de shader de PIX. Cela s'appuie sur la version préliminaire de PIX que nous avons publiée en décembre, corrigeant les problèmes que beaucoup d'entre vous nous ont signalés. Merci encore pour vos commentaires, et s'il vous plaît contactez-nous à nouveau si vous avez d'autres questions ou suggestions.

Image raygenDébogage

Améliorations de la vue du pipeline DXR

Cette version inclut une prise en charge complète du "suivi d'accès aux shaders", où la vue du pipeline de PIX vous indique exactement quelles ressources ont été consultées par chaque entrée de shader dans vos tables de shaders de lancer de rayons. Cela s'appuie également sur la version préliminaire de PIX que nous avons publiée en décembre, corrigeant les problèmes que beaucoup d'entre vous nous ont signalés. Merci encore.

Cette version inclut également la possibilité de voir le HLSL et le DXIL pour vos shaders raygen et miss.

Prise en charge des plugins pour les nouveaux GPU

Cette version inclut de nouveaux plugins d'AMD, NVIDIA et Qualcomm, complétant le plugin d'Intel qui a été mis à jour dans la dernière version de PIX . Un grand merci à nos partenaires matériels pour leur soutien continu et leur collaboration !

Le nouveau plugin AMD ajoute la prise en charge des GPU AMD Radeon RX 7900 XTX et AMD Radeon RX 7900 XT. Le nouveau plug-in NVIDIA ajoute la prise en charge des GPU NVIDIA série 4000. Les nouveaux plugins prennent en charge toutes les dernières fonctionnalités du plugin PIX, y compris les compteurs matériels de bas niveau dans la liste des événements et les graphiques des compteurs matériels dans la chronologie PIX.

Le nouveau plug-in Qualcomm ajoute la prise en charge de la fonction de sélection de l'état d'alimentation du GPU sur les appareils Qualcomm Snapdragon 8cx Gen3 tels que la Surface Pro 9 ou le PC de bureau Windows Dev Kit 2023.

Image qualcommpowerstates

Le nouveau plugin NVIDIA est livré avec des termes et restrictions supplémentaires. Pour les afficher, veuillez lire le CLUF que vous devez accepter lorsque vous installez PIX.

Prise en charge de la capture/relecture pour les nouvelles fonctionnalités D3D

En octobre, nous avons publié une version préliminaire de PIX avec prise en charge des barrières améliorées et de diverses autres fonctionnalités D3D12. Nous sommes heureux de dire que la version PIX d'aujourd'hui inclut une prise en charge complète des barrières améliorées, de ces fonctionnalités D3D12 et de plusieurs fonctionnalités D3D12 plus récentes.

Voici la liste complète des fonctionnalités D3D12 nouvellement prises en charge :

  • Barrières améliorées (ID3D12GraphicsCommandList7 et ID3D12Device8)
  • Périphériques indépendants (ID3D12DeviceFactory, ID3D12SDKConfiguration1, etc.)
  • ID3D12GraphicsCommandList8 et ID3D12GraphicsCommandList9
  • ID3D12Device11 (CreateSampler2)
  • D3D12_UAV_DIMENSION_TEXTURE2DMS[TABLEAU]
  • D3D12_RASTERIZER_DESC1
  • D3D12_DEPTH_STENCIL_DESC2
  • Ventilateurs triangulaires
  • Files d'attente de commandes logicielles (D3D12_COMMAND_LIST_TYPE_NONE)
  • D3D12_COMPARISON_FUNC_NONE

Nouvelles API intégrées à l'application

Cette version ajoute également les API suivantes que vous pouvez utiliser dans votre jeu tout en prenant des captures GPU programmatiques :

  • PIXIsAttachedForGpuCapture() : cette fonction renvoie vrai si l'interface utilisateur PIX (ou pixtool) est en cours d'exécution et est attachée au processus en cours, sinon elle renvoie faux.
  • PIXOpenCaptureInUI() : cette fonction ouvre le nom de fichier saisi (soit une capture GPU, soit une capture temporelle) dans l'interface utilisateur PIX.

Cette version corrige également quelques bogues dans d'autres API PIX. Par exemple, il corrige un bogue provoquant l'affichage du HUD sur toutes les fenêtres même si SHOW_ON_TARGET_WINDOW est défini.

Nouveaux visualiseurs d'images dans la visionneuse de texture

Cette version ajoute deux nouveaux visualiseurs très demandés à la visionneuse de texture. Ils sont conçus pour faciliter la recherche de votre tirage : « Surligner le tirage en cours » et « Effacer avant le tirage ».

Nous prévoyons d'ajouter plus de visualiseurs d'images comme celui-ci à PIX plus tard en 2023. Si vous avez des visualisations spécifiques que vous souhaitez que nous ajoutions, veuillez nous contacter !

Visualisation d'image1

Visualisation d'image2

Débogage de processus enfant remanié

Si vous lancez une application pour GPU Capture via PIX, PIX s'injectera dans tous les processus enfants lancés par votre application. Cette version de PIX corrige certains bogues de longue date dans ce domaine et améliore l'expérience utilisateur en vous permettant de sélectionner le processus enfant que vous souhaitez capturer :

Image gpucaptureselect

L'icône de pinceau à côté d'un processus signifie qu'il a créé un périphérique D3D12 et qu'il est potentiellement capturable.

Cette fonctionnalité sera particulièrement utile pour les scénarios multi-processus, tels que les jeux avec des lanceurs ou des applications telles que Microsoft Edge

Coloration des événements pour les captures GPU

Les API PIXBeginEvent() et PIXSetMarker() incluent un paramètre de couleur UINT64. Les captures GPU de PIX afficheront désormais la couleur à côté de chaque événement.

Cette fonctionnalité est désactivée par défaut pour le moment. Pour activer la fonctionnalité, cliquez sur Accueil->Paramètres et cochez cette case :

Image useeventscoloring

Liste d'événements d'image avec couleurs

Différence de liste d'événements (captures GPU)

Nous avons ajouté un nouvel outil de comparaison pour aider à comparer les données de synchronisation entre deux captures GPU similaires. Pour utiliser l'outil, vous devrez :

  1. Ouvrez la première capture dans PIX, démarrez l'analyse, puis collectez les données temporelles.
  2. Cliquez avec le bouton droit sur la liste des événements de la première capture, accédez à "Comparer" et définissez-la comme côté gauche pour la comparaison
    • Sur le matériel AMD : vous devez fermer la première capture à ce stade. Cette exigence sera supprimée dans une future version de PIX.
  3. Ouvrez la deuxième capture dans PIX, démarrez l'analyse, puis collectez les données de synchronisation.
  4. Faites un clic droit sur la liste des événements de l'autre capture, allez dans « Comparer » et cliquez sur « Comparer à… »

Les captures n'ont pas besoin de contenir exactement les mêmes événements dans le même ordre, car l'outil diff essaiera d'aligner des événements équivalents entre les captures. Cependant, l'outil diff fonctionnera mieux si vous essayez de minimiser les différences entre les captures.

Nous prévoyons d'étendre cette fonctionnalité dans les prochaines versions. N'hésitez pas à nous faire part de vos réflexions, commentaires et demandes de fonctionnalités !

Image de gauchecomparer

Image eventlistcomparer

Événements de résidence de ressources

Dans une version précédente, nous avons ajouté la prise en charge de l'affichage des informations sur les ressources D3D12 et les objets de tas aux captures temporelles. Dans cette version, nous avons ajouté la prise en charge de l'affichage des événements de résidence liés à ces allocations. Plus précisément, les appels D3D12 MakeResident et Evict sont affichés ainsi que les événements PageIn et PageOut, qui indiquent quand la mémoire est paginée entre le GPU et la mémoire système.

Pour collecter ces informations, vous devez activer les ressources GPU dans les options de capture de synchronisation. Ensuite, dans la vue Détails de la plage de capture temporelle, vous verrez une nouvelle option Opérations de résidence dans la liste déroulante Éléments à afficher. Vous verrez également une nouvelle voie d'opérations de résidence dans la chronologie qui montre les événements de résidence.

Case à cocher Image GpuResources

Image ResidenceOpérations

Captures de synchronisation programmatiques

Cette version ajoute la prise en charge de la prise de captures de synchronisation par programmation via les API PIXBeginCapture/PIXEndCapture. Cela complète la prise en charge existante de PIX pour prendre des captures GPU par programmation via les mêmes API.

Pour effectuer une capture de synchronisation programmatique, vous devez procéder comme suit :

  • Exécutez votre application en tant qu'administrateur (également appelé "élevé").
  • Chargez WinPixTimingCapturer.dll à partir du répertoire d'installation PIX
    • Nous avons ajouté l'API PIXLoadLatestWinPixTimingCapturerLibrary () à pix3.h pour simplifier cela. L'API trouvera votre dernière installation de PIX et en chargera WinPixTimingCapturer.dll
  • Appelez PIXBeginCapture(PIX_CAPTURE_TIMING, params) pour commencer votre capture. Le paramètre params est utilisé pour spécifier le nom du fichier et pour spécifier les fonctionnalités que vous souhaitez capturer.
  • Appelez PIXEndCapture(PIX_CAPTURE_TIMING) pour terminer votre capture.

Nouvelle présentation de résumé dans les captures temporelles

Les captures temporelles incluent une nouvelle présentation récapitulative qui fournit un ensemble de statistiques de capture et met en évidence les aspects des performances susceptibles de faire l'objet d'une enquête supplémentaire, tels que les événements PIX les plus longs.

Synchronisation de l'imagecapturerésumé

Améliorations de la vue des métriques

Les unités d'affichage peuvent désormais être personnalisées

Les unités d'affichage des événements PIX et de toutes les métriques liées à la mémoire peuvent être personnalisées. Par exemple, la durée, l'exécution et le temps de blocage des événements PIX peuvent désormais être représentés graphiquement en millisecondes au lieu des nanosecondes par défaut.

Image présentoirs personnalisés

Nouveau contrôle d'histogramme

Lorsqu'une métrique est représentée graphiquement dans la vue des métriques de capture temporelle, un histogramme est maintenant créé qui montre la distribution des valeurs de la métrique sur la durée de la capture. Les utilisateurs peuvent naviguer de l'histogramme à la vue Chronologie pour une analyse plus approfondie des métriques pour chaque compartiment d'histogramme.

Chronométrage de l'imagecapturehistogramme

Analyse du code source C++ pour les allocations de mémoire

Les fonctionnalités de profilage de la mémoire dans les captures de synchronisation PIX incluent désormais un onglet d'analyse de la source qui affiche une liste de code source qui montre quelles lignes dans une fonction sélectionnée ont alloué de la mémoire.

Analyse du type de données dans les captures temporelles

Les fonctionnalités de profilage de la mémoire dans PIX Timing Captures incluent désormais une analyse de toutes les allocations de mémoire par type de données. L'analyse des allocations par type de données peut être utilisée pour voir la quantité de mémoire allouée par type de données. De plus, la quantité de remplissage présente dans chaque type est affichée, ainsi que la quantité globale de mémoire occupée par le remplissage. La connaissance de la quantité de remplissage peut être utilisée pour trouver des opportunités d'éliminer le remplissage inutile, réduisant ainsi la taille du type de données et réduisant la quantité de mémoire utilisée.

Suivi des allocations de mémoire personnalisées à l'aide de l'API PIXRecordMemoryAllocationEvent

Les nouvelles API PIXRecordMemoryAllocationEvent et PIXRecordMemoryFreeEvent fournissent les données dont PIX a besoin pour afficher des informations sur toutes les allocations de mémoire effectuées à partir des allocations de mémoire personnalisées de votre titre dans les captures temporelles. En fournissant ces données, PIX affiche les mêmes données pour vos répartiteurs personnalisés que pour les appels à XMemVirtualAlloc/VirtualFree et HeapAlloc/HeapFree. Ces nouvelles API font partie de la dernière version du WinPIXEventRuntime.

L'extrait de code suivant fournit un exemple d'utilisation des nouvelles API pour instrumenter votre répartiteur personnalisé.

Pour afficher les événements de mémoire correspondant à vos appels à PIXRecordMemoryAllocationEvent et PIXRecordMemoryFreeEvent, cochez la case Custom Allocator events avant de démarrer une capture temporelle, comme illustré dans la figure suivante.

Événements du localisateur d'image personnalisé

Nouveaux compteurs PresentMon dans System Monitor

Cette version de PIX inclut la dernière version de PresentMon . Cela permet à PIX d'afficher beaucoup plus d'informations PresentMon dans la vue Moniteur système de PIX : par exemple, vous pouvez maintenant voir quel mode de présentation a été utilisé par l'application cible et voir des graphiques de statistiques de présentation importantes. Un grand merci aux personnes qui maintiennent PresentMon sur GitHub !

Système d'image

Autres améliorations et corrections de bogues

  • Captures GPU :
    • Afficher le nom de l'événement PIX environnant dans les entrées de l'historique des ressources
    • Afficher PSO, RTPSO, signature racine, signature racine locale dans la vue Pipeline
    • Ajoutez plus de boutons "Play" pour faciliter le démarrage du débogage des shaders
    • Correction de divers problèmes de capture/relecture de tampons > 4 Go
    • Améliorer les performances de temps de capture pour les captures multi-images
    • Améliorez la stabilité tout en prenant à plusieurs reprises des captures GPU programmatiques
    • Correction d'un bogue qui faisait que PIX n'affichait parfois pas toutes les liaisons d'emplacements de vertex valides
    • Divers correctifs apportés à la visionneuse de texture lors de l'utilisation des cases à cocher "Retourner" pour retourner la texture
    • Évitez les plantages lors de SetStateObject() en évitant de modifier la description de l'objet d'état de l'application
    • Améliorer la précision des données de synchronisation autour des limites de la liste de commandes
    • Améliorer les performances lors de la copie de données hors de la visionneuse de tampon
    • Mesh Viewer : recentrez la caméra arcball lorsque la taille de la fenêtre change
    • Visionneuse de maillage : prise en charge des dispositions de clavier Azerty dans les commandes de la caméra
    • Correction de la capture/relecture des applications vidéo qui laissent les ressources dans des états spécifiques à la vidéo
    • WriteToSubresource() : corrige le problème de la boîte de temps de capture pour les mips > 0
    • WriteToSubresource() : corrige les problèmes de compression de bloc au moment de la capture
    • Réduire le changement de blocage ETW lors de la collecte des données de synchronisation
    • Fixer le panneau UV Atlas
    • Correction de l'erreur de non-concordance WinPixGpuCapturer.dll lors de l'attachement à un processus dans certains scénarios arm64
    • Correction de l'attachement aux processus pour la capture GPU dans certains scénarios arm64
    • Assistance ID3D12DeviceRemovedExtendedData2
  • Exporter vers C++
    • Correction d'un problème de terminateur nul lors de l'énumération des adaptateurs de lecture
    • Correction d'un problème avec la géométrie d'entrée de la structure d'accélération
    • Prise en charge des appareils de calcul uniquement
    • Corrigez certains scénarios 11On12 en convertissant en DXGI_FORMAT compatible avec le modèle de retournement
  • Captures temporelles :
    • Hachage des événements PIX lorsqu'il n'y a pas d'exécution GPU corrélée
  • pixtool
    • Ajouter l'option –disable-gpu-plugins à pixtool
    • Correction de divers problèmes de chemin relatif lors du lancement/de la prise de captures
  • WinPixEventRuntime
    • Ajouter un nom de débogage pour les threads internes
    • Correction des performances en utilisant la spécialisation de modèle appropriée pour les événements et les marqueurs PIX simples
    • Correction d'erreurs de compilation diverses (par exemple avec clang 15.0.1 ou avec des projets GDK)
  • Corrections/améliorations diverses
    • Activation des captures par glisser-déposer dans PIX
    • Correction d'une erreur trompeuse lorsque le mode développeur n'est pas activé
    • Correction des hyperliens de l'interface utilisateur (par exemple vers des sites Web) sur les versions ARM64 (.net6)
    • Supprimer la clause d'utilisation commerciale du CLUF
    • Enregistrez beaucoup plus d'erreurs de temps de capture dans la fenêtre de sortie PIX
    • Résoudre divers problèmes spécifiques à HoloLens
    • Mise à jour vers D3D12 Agility SDK 1.608.2
    • Mettre à jour PIX vers .NET6

 Développeur Austin Kinross , PIX sous Windows

Page d’accueil : Microsoft PIX


Aucun commentaire: