é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.

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.

Pour le calcul des multi-échantillons visibles, les tests de profondeur ou de gabarit désactivés doivent se comporter comme si les multi-échantillons « réussissait » le test désactivé. Cela produit des résultats équivalents à lorsque les unités de test ont été activées avec la fonction de test définie sur « always ». En outre, ces valeurs doivent être tabulées normalement, même s’il n’y a aucune limite de cible de rendu. Étant donné que les tests de profondeur et de gabarit se produisent logiquement dans la phase sortie-fusion du pipeline, les pixels qui sont ignorés pendant l’exécution du nuanceur de pixels n’incrémentent pas le compteur d’occlusion. Les pixels ignorés logiquement n’atteignent même pas la fusion de sortie. Il existe des configurations de pipeline où les seuls résultats effectifs générés à partir du pipeline sont la tabulation du compteur d’occlusion.

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. Otheriwse, Disjoint doit être 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.

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.

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 en tant que type de prédicat STREAMOVERFLOWPREDICATE_STREAM1, 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_STREAM2
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 a la valeur TRUE si la sortie du flux 2 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 comme un 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 un BOOL. Cette boOL est TRUE si la sortie du flux 3 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 comme un type de prédicat STREAMOVERFLOWPREDICATE_STREAM3, 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 .
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 geometry 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 vertex, de géométrie et de nuanceur de pixels, sont occupées à traiter des 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 triangle.
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 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 les mathématiques (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 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 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 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 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 ont 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 des sommets sur lequel le nuanceur de vertex a été exécuté) existe immédiatement après le nuanceur de vertex. Ces sommets peuvent être utilisés par le nuanceur geometry ou 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 au nuanceur de géométrie ou au nuanceur de pixels a déjà été transformé. Tandis qu’un taux d’accès de 0 % indique que chaque vertex devait être traité 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é à 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 la mémoire tampon et les 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écessite 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êtes 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 de 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 correspond au nombre d’unités parallèles détectables. Ce nombre 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 à déterminer où le temps est réellement passé, ou à l’entière discrétion 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 compteur (ainsi que D3D10DDI_COUNTER_GPU_IDLE) doit toujours respecter les règles des compteurs actifs simultanément.

Pour les architectures qui signalent le nombre d’unités parallèles détectables non é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 égales à 4 (== 4), D3D10DDI_COUNTER_VERTEX_PROCESSING et D3D10DDI_COUNTER_PIXEL_PROCESSING sont égaux à .25 (== .25), tandis que le reste des métriques occupées est égal à 0 (== 0). D3D10DDI_COUNTER_GPU_IDLE peut entraîner entre 0,5 et 0,75, selon la quantité de chevauchements réels que ces unités parallèles ont obtenues.

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 se situer entre le 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, aucune primitive n’est générée si le triangle d’origine est entièrement rogné, une primitive est générée si le triangle d’origine n’est pas clippé du tout (ou si le découpage n’entraîne qu’un seul triangle), deux primitives sont générées si le triangle d’origine a été rogné 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 protection. 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 des 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 avec précision en permanence.

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 post-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 la même valeur) 6 4 1--12
Dessiner la 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
Liste de triangles de dessin de 4 primitives 12 4 6--12

Les primitives partielles seront autorisées à se situer dans la plage de valeurs, comme le se comporte la mise en cache des sommets. 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 premières optimisations de profondeur et de gabarit peuvent empêcher ou non la réalisation du travail du nuanceur de pixels. Par conséquent, lorsque les pixels échouent à un test de profondeur, la valeur dans PSInvocations peut être incrémentée ou non en fonction de 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 exemples (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 GS ne déclare pas les sommets d’adjacence en tant qu’entrées au GS. Par conséquent, lorsque le GS ne déclare pas les sommets adjacents en tant qu’entrées, les valeurs dans IAVertices et VSInvocations peuvent ou non refléter le travail qu’impliquent 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 tous les effets de la mise en cache post-VS).

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Vista et les versions ultérieures des systèmes d’exploitation Windows.
En-tête d3d10umddi.h (include D3d10umddi.h)

Voir aussi

CheckCounterInfo

D3D10DDIARG_CREATEQUERY

D3D10DDI_COUNTER_INFO

D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS

D3D10_DDI_QUERY_DATA_SO_STATISTICS

D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT