énumération D3D10DDI_QUERY (d3d10umddi.h)
Le type d’énumération D3D10DDI_QUERY contient des valeurs qui identifient un type de requête.
Syntax
typedef enum D3D10DDI_QUERY {
D3D10DDI_QUERY_EVENT,
D3D10DDI_QUERY_OCCLUSION,
D3D10DDI_QUERY_TIMESTAMP,
D3D10DDI_QUERY_TIMESTAMPDISJOINT,
D3D10DDI_QUERY_PIPELINESTATS,
D3D10DDI_QUERY_OCCLUSIONPREDICATE,
D3D10DDI_QUERY_STREAMOUTPUTSTATS,
D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE,
D3D11DDI_QUERY_PIPELINESTATS,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM1,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM2,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM3,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM0,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3,
D3D10DDI_COUNTER_GPU_IDLE,
D3D10DDI_COUNTER_VERTEX_PROCESSING,
D3D10DDI_COUNTER_GEOMETRY_PROCESSING,
D3D10DDI_COUNTER_PIXEL_PROCESSING,
D3D10DDI_COUNTER_OTHER_GPU_PROCESSING,
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION,
D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION,
D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION,
D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION,
D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION,
D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED,
D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED,
D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED,
D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED,
D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED,
D3D10DDI_COUNTER_PIXELSHADER_COMPUTATION_LIMITED,
D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE,
D3D10DDI_COUNTER_TEXTURE_CACHE_HIT_RATE,
D3D10DDI_COUNTER_DEVICE_DEPENDENT_0
} ;
Constantes
D3D10DDI_QUERY_EVENT Ce type de requête fournit une primitive de synchronisation que la plupart des types de requête suivants imitent pour traiter la nature asynchrone de l’unité de traitement graphique (GPU). Une D3D10DDI_QUERY_EVENT émise est signalée une fois que le GPU est terminé avec toutes les commandes précédemment émises, généralement à partir du back-end du pipeline graphique. Les données que le pilote associe à ce type de requête sont un BOOL. Toutefois, la valeur BOOL est redondante, car chaque fois qu’une requête D3D10DDI_QUERY_EVENT est signalée, la valeur de l’BOOL est toujours TRUE. Le pilote doit toujours renvoyer la valeur de données BOOL true lors de la signalisation du D3D10DDI_QUERY_EVENT. |
D3D10DDI_QUERY_OCCLUSION Les données statistiques que le pilote associe à ce type de requête sont un UINT64. Ces données statistiques contiennent le nombre d’échantillons multiples qui ont passé des tests de profondeur et de gabarit, également appelés multi-échantillons « visibles », pour toutes les primitives depuis la création du contexte de l’appareil. Si la cible de rendu n’est pas multi-échantillonnée, le compteur est incrémenté par le nombre de pixels entiers visibles. Le compteur doit s’enrouler en cas de dépassement de capacité. REMARQUE Le runtime Direct3D peut appeler la fonction QueryGetData du pilote à tout moment pour demander ces données statistiques. Par conséquent, il doit être calculé en permanence avec précision. |
D3D10DDI_QUERY_TIMESTAMP Les données que le pilote associe à ce type de requête sont un UINT64. Le type de requête TIMESTAMP est utilisé de la même manière que le type de requête D3D10DDI_QUERY_EVENT, car le type de requête TIMESTAMP fournit également un type de primitive de synchronisation. Comme D3D10DDI_QUERY_EVENT, TIMESTAMP doit être signalé lorsque le GPU est terminé avec toutes les commandes précédemment émises. Toutefois, TIMESTAMP diffère de D3D10DDI_QUERY_EVENT en renvoyant une valeur d’horodatage 64 bits. Cette valeur d’horodatage 64 bits doit être échantillonné à partir d’un compteur GPU, qui s’incrémente à une fréquence cohérente. La valeur d’horodatage doit être échantillonné au moment où le GPU est terminé avec toutes les commandes émises précédemment. Le GPU n’est pas nécessaire pour s’assurer que tous les caches sont vidés dans la mémoire pour déterminer si le travail est terminé. Ainsi, la satisfaction de plusieurs types de requêtes TIMESTAMP à haute fréquence ne perturbe pas fortement le pipeline. Toutefois, le processeur doit surveiller l’ordre d’écriture de la mémoire bien défini entre lui-même et le GPU, en particulier lorsque D3D10DDI_QUERY_EVENT est pris en charge. Si le processeur devait déterminer que le GPU a écrit une certaine valeur (en particulier une valeur de clôture), le processeur détermine que toutes les écritures de mémoire précédentes qui ont été émises avant l’écriture de clôture doivent être vidées de la mémoire et être visibles immédiatement par le processeur. Le type de vidage qui peut être nécessaire pour obtenir des données à partir des caches GPU et dans la mémoire accessible au processeur ne doit pas être effectué à chaque TIMESTAMP, mais probablement plus à la fin de chaque mémoire tampon de commande. La fréquence du compteur d’horodatage est fournie dans le contexte d’un type de requête D3D10DDI_QUERY_TIMESTAMPDISJOINT. La fréquence de ce compteur doit être supérieure à 10 MHz et résister à la limitation dynamique à haute fréquence du GPU. Le compteur d’horodatage doit être global. Par conséquent, le compteur d’horodatage n’est pas nécessaire pour prendre en compte le découpage du temps GPU des contextes. La valeur initiale du compteur d’horodatage n’est pas spécifiée. Par conséquent, la valeur absolue du compteur d’horodatage est généralement vide de sens. Toutefois, la valeur relative générée à partir de la différence de deux valeurs absolues quantifie un temps écoulé. La différence de deux valeurs d’horodatage n’est exacte que lorsque les deux requêtes TIMESTAMP sont entre crochets dans une plage de D3D10DDI_QUERY_TIMESTAMPDISJOINT et lorsque la valeur disjointe de la requête de la D3D10DDI_QUERY_TIMESTAMPDISJOINT requête retourne FALSE. |
D3D10DDI_QUERY_TIMESTAMPDISJOINT Les données que le pilote associe à ce type de requête sont une structure D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT . TIMESTAMPDISJOINT permet à une application de définir un crochet pour non seulement demander la fréquence de l’horloge TIMESTAMP, mais également pour détecter si cette fréquence était cohérente dans l’ensemble de la plage entre crochets de commandes graphiques. Le membre Disjoint de D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT contient une valeur BOOL qui indique quand un élément a provoqué l’interruption ou la disjointe du compteur d’horodatage. Voici quelques exemples d’événements qui doivent déclencher TIMESTAMPDISJOINT : arrêt de l’alimentation, limitation en raison d’événements d’économie d’énergie d’un ordinateur portable, d’un cordon secteur débranché et d’une surchauffe. De telles occurrences d’événements doivent être suffisamment rares pendant un état d’exécution d’application graphique stable pour être évitées en contrôlant l’environnement d’exécution système. Notez que si de tels événements se produisent, ils réduisent efficacement l’utilité de la fonctionnalité TIMESTAMP. Les requêtes TIMESTAMP après un événement qui déclencherait une requête TIMESTAMPDISJOINT ne sont pas censées être significatives par rapport aux requêtes TIMESTAMP précédant un tel événement. La valeur BOOL dans le membre Disjoint est TRUE si les valeurs des requêtes TIMESTAMP ne peuvent pas être garanties continues pendant toute la durée de la requête TIMESTAMPDISJOINT. Sinon, Disjoint doit avoir la valeur FALSE. La valeur du membre Frequency de D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT doit être égale à la fréquence de l’horloge TIMESTAMP. En outre, les notifications de tels événements de limitation sont utiles pour la surveillance des performances, la régression et les outils d’investigation, en supposant que les notifications entraînent des différences de performances dans l’exécution de l’application. |
D3D10DDI_QUERY_PIPELINESTATS Pour plus de détails, consultez la section Notes. |
D3D10DDI_QUERY_OCCLUSIONPREDICATE Les données que le pilote associe à ce type de requête sont un BOOL. Ce prédicat reflète la spécification de la requête OCCLUSION. Si la requête OCCLUSION pour la même plage entre crochets renvoie 0, le prédicat OCCLUSION retourne FALSE. Sinon, le prédicat OCCLUSION retourne TRUE, ce qui indique qu’au moins un échantillon multiple est visible. Si le prédicat a été indiqué comme étant un indicateur par rapport à garanti, aucun résultat n’est jamais propagé à l’application. Ce type de requête est un prédicat et peut être utilisé pour prédicer des commandes de rendu. |
D3D10DDI_QUERY_STREAMOUTPUTSTATS Les données que le pilote associe à ce type de requête sont une structure D3D10_DDI_QUERY_DATA_SO_STATISTICS . Cette structure contient des statistiques pour surveiller la quantité de données qui sont diffusées en continu à l’étape de sortie du flux du pipeline. Ces statistiques comptent uniquement les primitives complètes (par exemple, les points, les lignes et les triangles) qui sont diffusées en continu. Si le type primitif change (par exemple, les lignes en triangles), le comptage n’est en aucun cas ajusté. Autrement dit, le nombre est toujours total des primitives, quel que soit le type. REMARQUE Le runtime Direct3D peut appeler la fonction QueryGetData du pilote à tout moment pour demander ces statistiques. Par conséquent, il doit être calculé en permanence avec précision. |
D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE Les données que le pilote associe à ce type de requête sont un BOOL. Cette boOL est TRUE si une sortie de flux a débordé. Si deux requêtes D3D10DDI_QUERY_STREAMOUTPUTSTATS ont été utilisées pour surveiller simultanément la même plage entre crochets qu’un type de prédicat STREAMOVERFLOWPREDICATE, la différence des valeurs dans les membres PrimitivesStorageNeeded deD3D10_DDI_QUERY_DATA_SO_STATISTICS aurait entraîné une différence plus importante que celle des valeurs des membres NumPrimitivesWritten . STREAMOVERFLOWPREDICATE ne prend pas en charge la possibilité d’être utilisé comme indicateur. Par conséquent, le type de prédicat doit être garanti. Cette requête est un prédicat qui peut être utilisé pour prédicer des commandes de rendu, ce qui empêche l’affichage d’une trame indésirable à l’application. En cas de diffusion en continu vers plusieurs mémoires tampons simultanément, dès que l’une d’elles dépasse, la sortie du flux écrit pour toutes les mémoires tampons et les données de STREAMOVERFLOWPREDICATE deviennent TRUE. |
D3D11DDI_QUERY_PIPELINESTATS Pris en charge dans Windows 7 et versions ultérieures. Les données que le pilote associe à ce type de requête sont une structure D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS. Cette structure contient des statistiques pour chaque étape du pipeline graphique. Ce type de requête est le même que le type de requête D3D11DDI_QUERY_PIPELINESTATS, sauf D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS ajoute des membres HSInvocations et DSInvocations pour les nuanceurs de coque et de domaine. |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0 Pris en charge dans Windows 7 et versions ultérieures. Les données que le pilote associe à ce type de requête sont une structure D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 Pris en charge dans Windows 7 et versions ultérieures. Les données que le pilote associe à ce type de requête sont une structure D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM2 Pris en charge dans Windows 7 et versions ultérieures. Les données que le pilote associe à ce type de requête sont une structure D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM3 Pris en charge dans Windows 7 et versions ultérieures. Les données que le pilote associe à ce type de requête sont une structure D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM0 Pris en charge dans Windows 7 et versions ultérieures. Les données que le pilote associe à ce type de requête sont un BOOL. Cette boOL est TRUE si la sortie du flux 0 a débordé. Si deux requêtes D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM0 ont été utilisées pour surveiller simultanément la même plage entre crochets comme un type de prédicat STREAMOVERFLOWPREDICATE_STREAM0, la différence des valeurs dans les membres PrimitivesStorageNeededed deD3D10_DDI_QUERY_DATA_SO_STATISTICS aurait entraîné une différence plus importante que celle des valeurs des membres NumPrimitivesWritten . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1 Pris en charge dans Windows 7 et versions ultérieures. Les données que le pilote associe à ce type de requête sont un BOOL. Cette boOL est TRUE si la sortie du flux 1 a débordé. Si deux requêtes D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 ont été utilisées pour surveiller simultanément la même plage entre crochets qu’un type de prédicat STREAMOVERFLOWPREDICATE_STREAM1, la différence entre les valeurs des membres PrimitivesStorageNeeded deD3D10_DDI_QUERY_DATA_SO_STATISTICS aurait entraîné une différence plus importante que celle des valeurs des membres NumPrimitivesWritten . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2 Pris en charge dans Windows 7 et versions ultérieures. Les données que le pilote associe à ce type de requête sont une boOL. Cette valeur d’octet est TRUE si la sortie du flux 2 a été débordée. Si deux requêtes D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 ont été utilisées pour surveiller simultanément la même plage entre crochets en tant que type de prédicat STREAMOVERFLOWPREDICATE_STREAM2, la différence des valeurs dans les membres PrimitivesStorageNeeded deD3D10_DDI_QUERY_DATA_SO_STATISTICS aurait entraîné une différence plus importante que celle des valeurs des membres NumPrimitivesWritten . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3 Pris en charge dans Windows 7 et versions ultérieures. Les données que le pilote associe à ce type de requête sont une boOL. Cette valeur d’ordre d’erreur a la valeur TRUE si la sortie du flux 3 a été débordée. Si deux requêtes D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 ont été utilisées pour surveiller simultanément la même plage entre crochets qu’un type de prédicat STREAMOVERFLOWPREDICATE_STREAM3, la différence entre les valeurs des membres PrimitivesStorageNeeded de D3D10_DDI_QUERY_DATA_SO_STATISTICS aurait entraîné une différence plus importante que celle des valeurs des membres NumPrimitivesWritten . |
D3D10DDI_COUNTER_GPU_IDLE Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de temps d’inactivité gpu. |
D3D10DDI_COUNTER_VERTEX_PROCESSING Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de temps pendant lequel le nuanceur de vertex est occupé à traiter les données. |
D3D10DDI_COUNTER_GEOMETRY_PROCESSING Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de temps pendant lequel le nuanceur de géométrie est occupé à traiter les données. |
D3D10DDI_COUNTER_PIXEL_PROCESSING Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de temps pendant lequel le nuanceur de pixels est occupé à traiter les données. |
D3D10DDI_COUNTER_OTHER_GPU_PROCESSING Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de temps pendant lequel les opérations GPU, autres que les opérations de nuanceur de vertex, de géométrie et de pixels, sont occupées à traiter les données. |
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage d’un maximum théorique d’utilisation de la bande passante de l’adaptateur. |
D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage d’un maximum théorique d’utilisation de la bande passante de la mémoire vidéo. |
D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage d’un maximum théorique d’utilisation du débit de vertex. |
D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage d’un maximum théorique d’utilisation du débit de configuration des triangles. |
D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage d’un maximum théorique d’utilisation du débit de remplissage. |
D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de temps pendant lequel le nuanceur de vertex attend que la mémoire effectue des lectures ou des écritures de données (par rapport au pourcentage de temps pendant lequel le nuanceur de vertex calcule les calculs mathématiques). |
D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de temps pendant lequel le nuanceur de vertex calcule mathématiquement (par rapport au pourcentage de temps pendant lequel le nuanceur de vertex attend que la mémoire effectue des lectures ou des écritures de données). |
D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de temps pendant lequel le nuanceur de géométrie attend que la mémoire effectue des lectures ou des écritures de données (par rapport au pourcentage de temps pendant lequel le nuanceur de géométrie calcule les calculs mathématiques). |
D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de temps pendant lequel le nuanceur de géométrie calcule les calculs mathématiques (par rapport au pourcentage de temps pendant lequel le nuanceur de géométrie attend que la mémoire effectue des lectures ou des écritures de données). |
D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de temps pendant lequel le nuanceur de pixels attend que la mémoire effectue des lectures ou des écritures de données (par rapport au pourcentage de temps pendant lequel le nuanceur de pixels calcule les calculs mathématiques). |
D3D10DDI_COUNTER_PIXELSHADER_COMPUTATION_LIMITED Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de temps pendant lequel le nuanceur de pixels calcule les calculs mathématiques (par rapport au pourcentage de temps pendant lequel le nuanceur de pixels attend que la mémoire effectue des lectures ou des écritures de données). |
D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de sommets que le nuanceur de géométrie ou le nuanceur de pixels a récupérés à partir d’un cache de sommets qui ont déjà été transformés par le nuanceur de vertex. Un cache de sommets transformés (c’est-à-dire, les sommets sur lequel le nuanceur de vertex s’est exécuté) existe immédiatement après le nuanceur de vertex. Ces sommets peuvent être utilisés par le nuanceur de géométrie ou par le nuanceur de pixels. Un taux d’accès de 100 % (résultat d’une requête D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE) indique que chaque sommet nécessaire pour le nuanceur de géométrie ou le nuanceur de pixels a déjà été transformé. Tandis qu’un taux d’accès de 0 % indique que chaque vertex a nécessité un traitement par le nuanceur de vertex avant de pouvoir être utilisé. Le pilote peut restructurer les algorithmes et les données pour augmenter les taux d’accès au cache. |
D3D10DDI_COUNTER_TEXTURE_CACHE_HIT_RATE Les données que le pilote associe à ce type de compteur de requête sont une FLOAT32. Le pilote retourne le pourcentage de texels ou de mémoire de texture qu’un nuanceur a récupérés à partir d’un cache de texels déjà récupérés à partir de la mémoire vidéo. Un cache de mémoire de texture peut exister entre l’affichage des ressources du nuanceur ou éventuellement une mémoire tampon et des nuanceurs constants. Un taux d’accès de 100 % indique que chaque texel nécessaire pour un nuanceur était déjà disponible dans le cache. Tandis qu’un taux d’accès de 0 % indique que chaque texel nécessitait la récupération de données à partir de la mémoire vidéo. Le pilote peut restructurer les algorithmes et les données pour augmenter les taux d’accès au cache. |
D3D10DDI_COUNTER_DEVICE_DEPENDENT_0 Premier compteur de requête dépendant de l’appareil disponible. Les fournisseurs de matériel peuvent utiliser cette valeur et toute valeur 32 bits supérieure à 0x40000000 pour un compteur de requêtes pour leurs appareils. |
Remarques
Les valeurs des D3D10DDI_COUNTER_VERTEX_PROCESSING, D3D10DDI_COUNTER_GEOMETRY_PROCESSING, D3D10DDI_COUNTER_PIXEL_PROCESSING et D3D10DDI_COUNTER_OTHER_GPU_PROCESSING peuvent s’ajouter à une valeur définie par le pilote, qui est le nombre d’unités parallèles détectables. Ce numéro est publié par le pilote dans le cadre des fonctionnalités de la carte graphique. Le nombre d’unités parallèles détectables peut être de 1, 2, 3 ou 4 en fonction des détails de l’architecture matérielle, de la capacité des compteurs de performances à discerner où le temps est réellement passé, ou à la discrétion totale du fournisseur de matériel. Pour les architectures qui signalent le nombre d’unités parallèles détectables égales à 1 (== 1) dans le membre NumDetectableParallelUnits de la structure D3D10DDI_COUNTER_INFO en réponse à un appel à la fonction CheckCounterInfo, l’équation suivante s’applique :
(D3D10DDI_COUNTER_VERTEX_PROCESSING + D3D10DDI_COUNTER_GEOMETRY_PROCESSING + D3D10DDI_COUNTER_PIXEL_PROCESSING + D3D10DDI_COUNTER_OTHER_GPU_PROCESSING) / NumDetectableParallelUnits = 1,0 - D3D10DDI_COUNTER_GPU_IDLE
La surveillance de tous ces identificateurs de compteurs (ainsi que D3D10DDI_COUNTER_GPU_IDLE) doit toujours être conforme aux règles des compteurs actifs simultanément.
Pour les architectures qui signalent le nombre d’unités parallèles détectables qui ne sont pas égales à 1 ( != 1), l’interaction entre chaque métrique occupée est plus complexe. Par exemple, avec le nombre d’unités parallèles détectables égale à 4 (== 4), D3D10DDI_COUNTER_VERTEX_PROCESSING et D3D10DDI_COUNTER_PIXEL_PROCESSING sont égales à 0 (== 0). D3D10DDI_COUNTER_GPU_IDLE peut entraîner entre 0,5 et 0,75 en fonction de la quantité réelle de chevauchement obtenue par ces unités parallèles.
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION, D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION, D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION, D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION et D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION indiquent tous un pourcentage d’un goulot d’étranglement qui peut être utilisé. Les applications peuvent ensuite déterminer quand un certain maximum théorique est stressé afin de déterminer comment contourner le goulot d’étranglement.
Détails de D3D10DDI_QUERY_PIPELINESTATS valeur
Les données que le pilote associe à ce type de requête sont une structure D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS , qui contient des statistiques pour chaque étape du pipeline graphique. Pour chaque étape, la valeur du nombre d’appels doit être comprise entre un cache infini et aucun cache. Le clipper semble se comporter comme le nuanceur de géométrie (GS). Le clipper s’exécute pour chaque triangle. Pour chaque appel, zéro primitives est générée si le triangle d’origine est entièrement coupé, une primitive est générée si le triangle d’origine n’est pas clippé du tout (ou le découpage n’entraîne qu’un seul triangle), deux primitives sont générées si le triangle d’origine a été coupé et a entraîné deux triangles, et ainsi de suite. Dans les configurations classiques du pipeline, la valeur dans le membre GSPrimitives de D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS est égale à la valeur dans le membre CInvocations . Si la rastérisation est désactivée et que le pipeline est configuré pour envoyer uniquement des primitives à la sortie de flux, la valeur dans GSPrimitives s’écarte de la valeur dans CInvocations , car CInvocations ne s’incrémente pas. Les statistiques de découpage seront flexibles en ce qui concerne les implémentations de bande de garde. Par conséquent, lors du rendu des triangles qui s’étendent au-delà de la fenêtre d’affichage, les tests garantissent que le découpage se situe entre une plage de valeurs (nombres qui supposent une bande de protection infinie et nombres qui supposent un rectangle de découpage serré autour de la fenêtre d’affichage). Toutes les valeurs contiennent le nombre d’événements depuis la création du contexte de l’appareil. Notez que ces statistiques peuvent être demandées à tout moment, de sorte qu’elles doivent être calculées en permanence avec précision.
Seule la différence entre deux demandes de statistiques indépendantes fournira des informations significatives. Le pilote doit calculer la différence entre les données statistiques qu’il reçoit lorsqu’un appel à sa fonction QueryBegin se produit et les données statistiques qu’il reçoit lorsqu’un appel à sa fonction QueryEnd se produit.
Voici des exemples d’interaction entre les valeurs des membres IAVertices, IAPrimitives et VSInvocations de D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS en ce qui concerne la mise en cache du nuanceur de vertex (VS).
Scénario | Valeur valide IAVertices | Valeur valide IAPrimitives | Valeur valide VSInvocations |
---|---|---|---|
Dessiner une bande de triangle indexée de 4 primitives (avec tous les index de la même valeur) | 6 | 4 | 1--12 |
Dessiner une liste de triangles indexés de 4 primitives (avec tous les index la même valeur) | 12 | 4 | 1--12 |
Dessiner une bande de triangle de 4 primitives | 6 | 4 | 6--12 |
Dessiner une liste de triangles de 4 primitives | 12 | 4 | 6--12 |
Les primitives partielles seront autorisées à se situer dans la plage de valeurs, de la même façon que la mise en cache de vertex se comporte. Par conséquent, lorsque des primitives partielles sont possibles, les statistiques doivent se trouver entre un pipeline qui les clipse dès que possible (avant même que l’assembleur d’entrée (IA) les compte), ou aussi tard que possible (post-clipper et nuanceur de pré pixels (PS)). Stream sortie et un GS NULL sont flexibles quant à savoir s’ils provoquent réellement des appels GS.
En ce qui concerne la valeur dans le membre PSInvocations de D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS, les optimisations précoces de profondeur et de gabarit peuvent empêcher ou non la réalisation du travail du nuanceur de pixels. Par conséquent, lorsque des pixels échouent à un test de profondeur, la valeur dans PSInvocations peut être incrémentée ou non selon l’endroit où le test de profondeur se produit réellement dans le pipeline. Si le nuanceur de pixels génère une profondeur, la valeur dans PSInvocations doit s’incrémenter comme prévu, même si la profondeur de sortie échoue. L’exemple suivant montre comment la valeur dans PSInvocations sera testée.
Considérez les quantités DSP (nombre de pixels qui réussissent les tests de profondeur et de gabarit) et DSF (nombre de pixels qui échouent au test de profondeur ou de gabarit). DSP est à peu près équivalent à la requête OCCLUSION, sauf qu’OCCLUSION mesure plusieurs échantillons (et non des pixels). Dans tous les cas, DSP <= la valeur dans PSInvocations<= ( DSP + DSF ). Lorsque le nuanceur de pixels génère une profondeur, la valeur dans PSInvocations est la somme de DSP et DSF. En outre, lorsqu’un nuanceur de pixels NULL est lié au pipeline, la valeur dans PSInvocations ne s’incrémente pas.
En ce qui concerne les valeurs dans IAVertices et VSInvocations, le traitement des vertex adjacents peut être optimisé si le service GS ne déclare pas les sommets d’adjudance en tant qu’entrées pour GS. Par conséquent, lorsque le service GS ne déclare pas de sommets adjacents en tant qu’entrées, les valeurs dans IAVertices et VSInvocations peuvent refléter ou non le travail impliqué par les sommets adjacents. Si le GS déclare des sommets adjacents, la valeur dans IAVertices doit inclure les sommets adjacents (sans égard à la mise en cache post-VS), et la valeur dans VSInvocations doit inclure les sommets adjacents (ainsi que les effets de la mise en cache post-VS).
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible dans Windows Vista et versions ultérieures des systèmes d’exploitation Windows. |
En-tête | d3d10umddi.h (incluez D3d10umddi.h) |
Voir aussi
D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS