Freigeben über


D3D10DDI_QUERY-Enumeration (d3d10umddi.h)

Der D3D10DDI_QUERY-Enumerationstyp enthält Werte, die einen Abfragetyp identifizieren.

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
} ;

Konstanten

 
D3D10DDI_QUERY_EVENT
Dieser Abfragetyp stellt einen Synchronisierungsgrundtyp bereit, den viele der folgenden Abfragetypen imitieren, um die asynchrone Natur der Grafikverarbeitungseinheit (Graphics Processing Unit, GPU) zu verarbeiten. Eine ausgegebene D3D10DDI_QUERY_EVENT wird signalisiert, nachdem die GPU mit allen zuvor ausgegebenen Befehlen abgeschlossen wurde, in der Regel vom Back-End der Grafikpipeline. Die Daten, die der Treiber diesem Abfragetyp ordnet, sind BOOL. Der BOOL-Wert ist jedoch redundant, da der BoOL-Wert immer TRUE ist, wenn eine D3D10DDI_QUERY_EVENT Abfrage signalisiert wird. Der Treiber sollte beim Signalisieren des D3D10DDI_QUERY_EVENT immer den BOOL-Datenwert TRUE zurücksenden.
D3D10DDI_QUERY_OCCLUSION
Die Statistikdaten, die der Treiber diesem Abfragetyp ordnet, sind UINT64. Diese Statistikdaten enthalten die Anzahl von Multisamples, die Tiefen- und Schablonentests bestanden haben( auch als "sichtbare" Multisamples bezeichnet) für alle Grundtypen seit der Erstellung des Gerätekontexts. Wenn das Renderziel nicht multisampled ist, wird der Zähler um die Anzahl der sichtbaren ganzen Pixel erhöht. Der Zähler sollte umbrochen werden, wenn er überläuft.

HINWEIS

Die Direct3D-Runtime kann jederzeit die QueryGetData-Funktion des Treibers aufrufen, um diese Statistikdaten anzufordern. Daher muss er kontinuierlich genau berechnet werden.

Nur der Unterschied zwischen zwei unabhängigen Statistikanforderungen liefert aussagekräftige Informationen. Der Treiber sollte den Unterschied zwischen den Statistikdaten berechnen, die er empfängt, wenn ein Aufruf seiner QueryBegin-Funktion erfolgt, und den Statistikdaten, die er empfängt, wenn ein Aufruf seiner QueryEnd-Funktion erfolgt.

Zum Berechnen sichtbarer Multisamples sollten deaktivierte Tiefentests oder Schablonentests so verhalten, als ob die Multisamples den deaktivierten Test "bestehen". Dies führt zu gleichwertigen Ergebnissen, als die Testeinheiten aktiviert wurden, wobei die Testfunktion auf "always" festgelegt wurde. Darüber hinaus sollten diese Werte als normal tabellarisiert werden, auch wenn keine Renderziele gebunden sind. Da die Tiefen- und Schablonentests logisch in der Ausgabezusammenführungsphase der Pipeline auftreten, erhöhen Pixel, die während der Ausführung des Pixelshaders verworfen werden, den Okklusionszähler nicht. Verworfene Pixel erreichen logischerweise nicht einmal die Ausgabezusammenführung. Es gibt Pipelinekonfigurationen, bei denen die einzigen effektiven Ergebnisse, die aus der Pipeline generiert werden, die Tabulatorierung des Okklusionszählers sind.

D3D10DDI_QUERY_TIMESTAMP
Die Daten, die der Treiber diesem Abfragetyp ordnet, sind UINT64. Der ABFRAGEtyp TIMESTAMP wird ähnlich wie der abfragetyp D3D10DDI_QUERY_EVENT verwendet, da der Abfragetyp TIMESTAMP auch einen Synchronisierungsgrundtyp bereitstellt. Wie D3D10DDI_QUERY_EVENT sollte TIMESTAMP signalisiert werden, wenn die GPU mit allen zuvor ausgegebenen Befehlen fertig ist. TIMESTAMP unterscheidet sich jedoch von D3D10DDI_QUERY_EVENT, indem ein 64-Bit-Zeitstempelwert zurückgegeben wird. Dieser 64-Bit-Zeitstempelwert sollte aus einem GPU-Zähler entnommen werden, der mit einer konsistenten Frequenz inkrementiert wird. Der Zeitstempelwert sollte in dem Moment abgetastet werden, in dem die GPU mit allen zuvor ausgegebenen Befehlen abgeschlossen ist. Die GPU ist nicht erforderlich, um sicherzustellen, dass alle Caches in den Arbeitsspeicher geleert werden, um festzustellen, ob die Arbeit abgeschlossen ist. Dies ist so, dass die Erfüllung mehrerer TIMESTAMP-Abfragetypen mit hoher Frequenz die Pipeline nicht stark beeinträchtigt. Die CPU sollte jedoch eine klar definierte Speicherschreibreihenfolge zwischen sich und der GPU überwachen, insbesondere wenn D3D10DDI_QUERY_EVENT unterstützt wird. Wenn die CPU feststellen würde, dass die GPU einen bestimmten Wert (insbesondere einen Zaunwert) geschrieben hat, würde die CPU bestimmen, dass alle vorherigen Speicherschreibvorgänge, die vor dem Schreibvorgang ausgegeben wurden, in den Arbeitsspeicher geleert werden sollen und von der CPU sofort angezeigt werden können. Die Art der Leerung, die möglicherweise erforderlich ist, um Daten aus GPU-Caches und in cpu-zugänglichen Arbeitsspeicher zu erhalten, sollte nicht bei jedem TIMESTAMP erfolgen, sondern wahrscheinlich mehr am Ende jedes Befehlspuffers.

Die Häufigkeit des Zeitstempelzählers wird im Kontext eines D3D10DDI_QUERY_TIMESTAMPDISJOINT Abfragetyps bereitgestellt. Die Frequenz dieses Zählers sollte größer als 10 MHz sein und beständig gegen dynamische Hochfrequenzdrosselung der GPU sein. Der Zeitstempelzähler sollte global sein. Daher ist der Zeitstempelzähler nicht erforderlich, um die GPU-Zeit slicing von Kontexten zu berücksichtigen.

Der Anfangswert des Zeitstempelzählers ist nicht angegeben. Daher ist der absolute Wert des Zeitstempelzählers für sich allein bedeutungslos. Der relative Wert, der aus der Differenz zweier absoluter Werte generiert wird, quantifiziert jedoch einen verstrichenen Zeitraum. Der Unterschied von zwei Zeitstempelwerten ist nur richtig, wenn die beiden TIMESTAMP-Abfragen innerhalb eines D3D10DDI_QUERY_TIMESTAMPDISJOINT Bereichs in Klammern stehen und wenn der disjoint-Wert der D3D10DDI_QUERY_TIMESTAMPDISJOINT Abfrage FALSE zurückgibt.
D3D10DDI_QUERY_TIMESTAMPDISJOINT
Die Daten, die der Treiber diesem Abfragetyp ordnet, sind eine D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT-Struktur . MIT TIMESTAMPDISJOINT kann eine Anwendung eine Klammer definieren, um nicht nur die Häufigkeit der TIMESTAMP-Uhr anzufordern, sondern auch zu erkennen, ob diese Frequenz im gesamten Bereich der Grafikbefehle in Klammern konsistent war. Der Disjoint-Member von D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT enthält einen BOOL-Wert, der angibt, wann der Zeitstempelzähler unterbrochen oder getrennt wurde. Einige Beispiele für Ereignisse, die TIMESTAMPDISJOINT auslösen sollten, sind ein Herunter- und Herunterschalten aufgrund von Laptop-Stromsparereignissen, ein nicht angeschlossenes Netzkabel und eine Überhitzung. Solche Ereignisereignisse sollten während eines konstanten Ausführungszustands der Grafikanwendung selten genug sein, um durch Steuern der Systemausführungsumgebung vermieden zu werden. Beachten Sie, dass solche Ereignisse, wenn sie auftreten, die Nützlichkeit der TIMESTAMP-Funktionalität effektiv verringern. TIMESTAMP-Abfragen nach einem Ereignis, das eine TIMESTAMPDISJOINT-Abfrage auslösen würde, werden im Vergleich zu TIMESTAMP-Abfragen vor einem solchen Ereignis nicht als sinnvoll erwartet. Der BOOL-Wert im Disjoint-Element ist TRUE , wenn die Werte aus TIMESTAMP-Abfragen nicht während der gesamten Dauer der TIMESTAMPDISJOINT-Abfrage kontinuierlich sind. Andernfalls sollte DisjointFALSE sein. Der Wert des Frequency-Elements von D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT sollte gleich der Häufigkeit der TIMESTAMP-Uhr sein.

Darüber hinaus sind Benachrichtigungen über solche Drosselungsereignisse nützlich für Leistungsüberwachungs-, Regressions- und Untersuchungstools, vorausgesetzt, die Benachrichtigungen führen zu Leistungsunterschieden bei der Anwendungsausführung.
D3D10DDI_QUERY_PIPELINESTATS
Einzelheiten finden Sie in den Hinweisen.
D3D10DDI_QUERY_OCCLUSIONPREDICATE
Die Daten, die der Treiber diesem Abfragetyp ordnet, sind BOOL. Dieses Prädikat spiegelt die Spezifikation für die OCCLUSION-Abfrage wieder. Wenn die OCCLUSION-Abfrage für denselben Klammerbereich 0 zurückgibt, gibt das OCCLUSION-Prädikat FALSE zurück. Andernfalls gibt das OCCLUSION-Prädikat TRUE zurück, was angibt, dass mindestens eine Multisampel sichtbar ist. Wenn das Prädikat als Hinweis im Vergleich zu garantiert angegeben wurde, wird kein Ergebnis an die Anwendung zurückgegeben. Dieser Abfragetyp ist ein Prädikat und kann zum Prädikat von Renderingbefehlen verwendet werden.
D3D10DDI_QUERY_STREAMOUTPUTSTATS
Die Daten, die der Treiber diesem Abfragetyp zuordnet, sind eine D3D10_DDI_QUERY_DATA_SO_STATISTICS-Struktur . Diese Struktur enthält Statistiken zum Überwachen der Datenmenge, die in der Streamausgabephase der Pipeline gestreamt wird. Diese Statistiken zählen nur vollständige Grundtypen (z. B. Punkte, Linien und Dreiecke), die gestreamt werden. Wenn sich der primitive Typ ändert (z. B. Linien in Dreiecke), wird die Zählung in keiner Weise angepasst. Das heißt, die Anzahl ist immer Gesamtgrundtypen, unabhängig vom Typ.

HINWEIS

Die Direct3D-Runtime kann die QueryGetData-Funktion des Treibers jederzeit aufrufen, um diese Statistiken anzufordern. Daher muss er kontinuierlich genau berechnet werden.

Nur der Unterschied zwischen zwei unabhängigen Statistikanforderungen liefert aussagekräftige Informationen. Der Treiber sollte den Unterschied zwischen den Statistikdaten berechnen, die er empfängt, wenn ein Aufruf seiner QueryBegin-Funktion erfolgt, und den Statistikdaten, die er empfängt, wenn ein Aufruf seiner QueryEnd-Funktion erfolgt.

D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE
Die Daten, die der Treiber diesem Abfragetyp ordnet, sind BOOL. Dieser BOOL-Wert ist TRUE , wenn eine Streamausgabe überläuft. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS Abfragen verwendet würden, um denselben Klammerbereich gleichzeitig wie ein STREAMOVERFLOWPREDICATE-Prädikattyp zu überwachen, hätte der Unterschied in den Werten in den PrimitivesStorageNeeded-Membern von D3D10_DDI_QUERY_DATA_SO_STATISTICS zu einer größeren Differenz geführt als die Differenz in den Werten in den NumPrimitivesWritten-Membern . STREAMOVERFLOWPREDICATE unterstützt nicht die Möglichkeit, als Hinweis verwendet zu werden. Daher muss der Prädikattyp garantiert werden. Diese Abfrage ist ein Prädikat und kann verwendet werden, um Renderingbefehle zu prädikaten, wodurch verhindert wird, dass der Anwendung ein unerwünschter Frame angezeigt wird.

Wenn sie gleichzeitig an mehrere Puffer gestreamt werden, sobald einer davon überläuft, wird die Datenstromausgabe für alle Puffer beendet, und die Daten für STREAMOVERFLOWPREDICATE werden zu TRUE.
D3D11DDI_QUERY_PIPELINESTATS
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp zuordnet, sind eine D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS-Struktur. Diese Struktur enthält Statistiken für jede Phase der Grafikpipeline. Dieser Abfragetyp ist identisch mit dem abfragetyp D3D11DDI_QUERY_PIPELINESTATS außer D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS fügt HSInvocations - und DSInvocations-Member für Hull- und Domänenshader hinzu.
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp zuordnet, sind eine D3D10_DDI_QUERY_DATA_SO_STATISTICS-Struktur .
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM1
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp zuordnet, sind eine D3D10_DDI_QUERY_DATA_SO_STATISTICS-Struktur .
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM2
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp zuordnet, sind eine D3D10_DDI_QUERY_DATA_SO_STATISTICS-Struktur .
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM3
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp zuordnet, sind eine D3D10_DDI_QUERY_DATA_SO_STATISTICS-Struktur .
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM0
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp ordnet, sind BOOL. Dieser BOOL-Wert ist TRUE , wenn die Stream 0-Ausgabe überläuft. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM0 Abfragen verwendet würden, um denselben Klammerbereich gleichzeitig als STREAMOVERFLOWPREDICATE_STREAM0 Prädikattyp zu überwachen, hätte der Unterschied in den Werten in den PrimitivesStorageNeeded-Membern von D3D10_DDI_QUERY_DATA_SO_STATISTICS zu einer größeren Differenz als die Differenz in den Werten in den NumPrimitivesWritten-Membern geführt.
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp ordnet, sind BOOL. Dieser BOOL-Wert ist TRUE , wenn die Stream 1-Ausgabe überläuft. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 Abfragen verwendet würden, um denselben Klammerbereich wie ein STREAMOVERFLOWPREDICATE_STREAM1 Prädikattyp gleichzeitig zu überwachen, hätte die Differenz der Werte in den PrimitivesStorageNeed-Membern von D3D10_DDI_QUERY_DATA_SO_STATISTICS zu einem größeren Unterschied als die Unterschiede in den Werten in den NumPrimitivesWritten-Membern geführt.
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp ordnet, sind BOOL. Dieser BOOL-Wert ist TRUE , wenn die Stream 2-Ausgabe überlaufen wurde. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 Abfragen verwendet wurden, um denselben Klammerbereich wie ein STREAMOVERFLOWPREDICATE_STREAM2 Prädikattyp gleichzeitig zu überwachen, hätte die Differenz der Werte in den PrimitivesStorageNeed-Membern von D3D10_DDI_QUERY_DATA_SO_STATISTICS zu einem größeren Unterschied als die Unterschiede in den Werten in den NumPrimitivesWritten-Membern geführt.
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp ordnet, sind BOOL. Dieser BOOL-Wert ist TRUE , wenn die Stream 3-Ausgabe überläuft. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 Abfragen verwendet wurden, um denselben Klammerbereich wie ein STREAMOVERFLOWPREDICATE_STREAM3 Prädikattyp gleichzeitig zu überwachen, hätte die Differenz der Werte in den PrimitivesStorageNeed-Membern von D3D10_DDI_QUERY_DATA_SO_STATISTICS zu einem größeren Unterschied als die Unterschiede in den Werten in den NumPrimitivesWritten-Membern geführt.
D3D10DDI_COUNTER_GPU_IDLE
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der GPU-Leerlaufzeit zurück.
D3D10DDI_COUNTER_VERTEX_PROCESSING
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der der Vertex-Shader mit der Verarbeitung von Daten beschäftigt ist.
D3D10DDI_COUNTER_GEOMETRY_PROCESSING
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der der Geometrie-Shader mit der Verarbeitung von Daten beschäftigt ist.
D3D10DDI_COUNTER_PIXEL_PROCESSING
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der der Pixel-Shader mit der Verarbeitung von Daten beschäftigt ist.
D3D10DDI_COUNTER_OTHER_GPU_PROCESSING
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der GPU-Vorgänge mit Ausnahme von Vertex-, Geometry- und Pixel-Shadervorgängen Daten verarbeitet werden.
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz eines theoretischen Maximums der Adapterbandbreitenauslastung zurück.
D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz eines theoretischen Maximums an Videospeicherbandbreite zurück.
D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz eines theoretischen Maximums an Vertexdurchsatzauslastung zurück.
D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz eines theoretischen Maximums der Durchsatzauslastung für das Einrichten von Dreiecken zurück.
D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz eines theoretischen Maximums an Füllratendurchsatzauslastung zurück.
D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, die der Vertex-Shader auf die Ausführung von Lese- oder Schreibvorgängen von Daten im Speicher wartet (im Vergleich zu dem Prozentsatz der Zeit, die der Vertex-Shader mathematisch berechnet).
D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, die der Vertex-Shader math berechnet (im Vergleich zum Prozentsatz der Zeit, die der Vertex-Shader wartet, bis der Speicher Lese- oder Schreibvorgänge von Daten ausführt).
D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, die der Geometrie-Shader auf die Ausführung von Lese- oder Schreibvorgängen von Daten im Arbeitsspeicher wartet (im Vergleich zu dem Prozentsatz der Zeit, die der Geometrie-Shader mathe berechnet).
D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, die der Geometrie-Shader mathe berechnet (im Vergleich zu dem Prozentsatz der Zeit, die der Geometrie-Shader auf den Speicher wartet, um Lese- oder Schreibvorgänge von Daten auszuführen).
D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, die der Pixel-Shader auf die Ausführung von Lese- oder Schreibvorgängen von Daten im Arbeitsspeicher wartet (im Vergleich zu dem Prozentsatz der Zeit, die der Pixel-Shader mathematisch berechnet).
D3D10DDI_COUNTER_PIXELSHADER_COMPUTATION_LIMITED
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, die der Pixel-Shader mathe berechnet (im Vergleich zu dem Prozentsatz der Zeit, die der Pixel-Shader auf die Ausführung von Lese- oder Schreibvorgängen von Daten im Arbeitsspeicher wartet).
D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz der Scheitelpunkte zurück, die der Geometrie- oder Pixel-Shader aus einem Cache von Scheitelpunkten abgerufen hat, die bereits vom Vertex-Shader transformiert wurden.

Ein Cache mit transformierten Scheitelpunkten (d. h. Scheitelpunkten, für die der Vertex-Shader ausgeführt wurde) ist unmittelbar nach dem Vertex-Shader vorhanden. Diese Scheitelpunkte können entweder vom Geometrie-Shader oder vom Pixel-Shader verwendet werden. Eine Trefferrate von 100 % (Ergebnis einer D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE Abfrage) gibt an, dass jeder für den Geometrie- oder Pixelshader erforderliche Scheitelpunkt bereits transformiert wurde. Während eine Trefferrate von 0 % bedeutet, dass jeder Scheitelpunkt eine Verarbeitung durch den Vertex-Shader erforderte, bevor er verwendet werden konnte.

Der Treiber kann Algorithmen und Daten neu strukturieren, um die Cachetrefferraten zu erhöhen.
D3D10DDI_COUNTER_TEXTURE_CACHE_HIT_RATE
Die Daten, die der Treiber diesem Abfragezählertyp ordnet, sind eine FLOAT32. Der Treiber gibt den Prozentsatz des Texels- oder Texturspeichers zurück, den ein Shader aus einem Cache von Texels abgerufen hat, die bereits aus dem Videospeicher abgerufen wurden.

Ein Cache mit Texturspeicher kann zwischen Shaderressourcenansicht oder möglicherweise konstanten Puffern und Shadern vorhanden sein. Eine Trefferrate von 100 % gibt an, dass alle für einen Shader erforderlichen Texel bereits im Cache verfügbar waren. Eine Trefferrate von 0 % gibt an, dass für jeden Texel Daten aus dem Videospeicher abgerufen werden mussten.

Der Treiber kann Algorithmen und Daten neu strukturieren, um die Cachetrefferraten zu erhöhen.
D3D10DDI_COUNTER_DEVICE_DEPENDENT_0
Der erste verfügbare geräteabhängige Abfrageindikator. Hardwareanbieter können diesen Wert und einen beliebigen 32-Bit-Wert über 0x40000000 für einen Abfrageindikator für ihre Geräte verwenden.

Hinweise

Werte für D3D10DDI_COUNTER_VERTEX_PROCESSING, D3D10DDI_COUNTER_GEOMETRY_PROCESSING, D3D10DDI_COUNTER_PIXEL_PROCESSING und D3D10DDI_COUNTER_OTHER_GPU_PROCESSING können zu einem vom Treiber definierten Wert addiert werden, d. h. die Anzahl der erkennbaren parallelen Einheiten. Diese Nummer wird vom Treiber als Teil der Grafikkartenfunktionen veröffentlicht. Die Anzahl der erkennbaren parallelen Einheiten kann 1, 2, 3 oder 4 sein, abhängig von den Details der Hardwarearchitektur, der Fähigkeit von Leistungsindikatoren, zu erkennen, wo tatsächlich Zeit verbracht wird, oder im vollständigen Ermessen des Hardwareherstellers. Für Architekturen, die die Anzahl der erkennbaren parallelen Einheiten gleich 1 (== 1) im NumDetectableParallelUnits-Member der D3D10DDI_COUNTER_INFO-Struktur als Reaktion auf einen Aufruf der CheckCounterInfo-Funktion melden, gilt die folgende Gleichung:

(D3D10DDI_COUNTER_VERTEX_PROCESSING + D3D10DDI_COUNTER_GEOMETRY_PROCESSING + D3D10DDI_COUNTER_PIXEL_PROCESSING + D3D10DDI_COUNTER_OTHER_GPU_PROCESSING) / NumDetectableParallelUnits = 1.0 - D3D10DDI_COUNTER_GPU_IDLE

Die Überwachung all dieser Indikatorenbezeichner (zusammen mit D3D10DDI_COUNTER_GPU_IDLE) muss weiterhin den Regeln gleichzeitig aktiver Indikatoren entsprechen.

Bei Architekturen, die die Anzahl der erkennbaren parallelen Einheiten nicht gleich 1 (!= 1) melden, ist die Interaktion zwischen den einzelnen ausgelasteten Metriken komplexer. Wenn beispielsweise die Anzahl der erkennbaren parallelen Einheiten gleich 4 (== 4) ist, sind D3D10DDI_COUNTER_VERTEX_PROCESSING und D3D10DDI_COUNTER_PIXEL_PROCESSING gleich .25 (== .25), während die restlichen ausgelasteten Metriken gleich 0 (== 0) sind. D3D10DDI_COUNTER_GPU_IDLE könnten zwischen .5 und ,75 resultieren, je nachdem, wie viel tatsächliche Überlappung diese parallelen Einheiten erreicht haben.

D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION, D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION, D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION, D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION und D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION melden einen Prozentsatz eines Engpässes, der verwendet werden kann. Anwendungen können dann bestimmen, wann ein bestimmtes theoretisches Maximum beansprucht wird, damit sie bestimmen können, wie der Engpass zu umgehen ist.

Details für D3D10DDI_QUERY_PIPELINESTATS Wert

Die Daten, die der Treiber diesem Abfragetyp ordnet, sind eine D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS-Struktur , die Statistiken für jede Phase der Grafikpipeline enthält. Für jede Phase muss der Wert für die Anzahl der Aufrufe zwischen unendlichem Cache und keinem Cache liegen. Der Clipper verhält sich wie der Geometrie-Shader (GS). Der Clipper wird für jedes Dreieck ausgeführt. Für jeden Aufruf werden null Grundtypen generiert, wenn das ursprüngliche Dreieck vollständig abgeschnitten ist, ein Primitive wird generiert, wenn das ursprüngliche Dreieck überhaupt nicht abgeschnitten ist (oder das Ausschneiden nur ein Dreieck ergibt). Zwei Primitive werden generiert, wenn das ursprüngliche Dreieck abgeschnitten wurde und zu zwei Dreiecken führte usw. In typischen Konfigurationen der Pipeline entspricht der Wert im GSPrimitives-Member von D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS dem Wert im CInvocations-Member . Wenn die Rasterung deaktiviert ist und die Pipeline so konfiguriert ist, dass sie nur Primitive an die Streamausgabe sendet, würde der Wert in GSPrimitives vom Wert in CInvocations abweichen, da CInvocations nicht inkrementiert würde. Die Clippingstatistiken sind flexibel in Bezug auf Guard-Band-Implementierungen. Daher stellen die Tests beim Rendern von Dreiecken, die über den Viewport hinausgehen, sicher, dass die Beschneidung zwischen einem Wertebereich liegt (Zahlen, die ein unendliches Schutzband annehmen, und Zahlen, die ein enges Clippingrechteck um den Viewport annehmen). Alle Werte enthalten die Anzahl der Ereignisse seit der Erstellung des Gerätekontexts. Beachten Sie, dass diese Statistiken jederzeit angefordert werden können, sodass sie kontinuierlich genau berechnet werden müssen.

Nur der Unterschied zwischen zwei unabhängigen Statistischen Anforderungen liefert aussagekräftige Informationen. Der Treiber sollte den Unterschied zwischen den Statistikdaten berechnen, die er empfängt, wenn ein Aufruf seiner QueryBegin-Funktion erfolgt, und den Statistikdaten, die er empfängt, wenn ein Aufruf seiner QueryEnd-Funktion erfolgt.

Im Folgenden finden Sie Beispiele für die Interaktion zwischen den Werten in den Membern IAVertices, IAPrimitives und VSInvocations von D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS in Bezug auf die Zwischenspeicherung nach Vertex-Shader (VS).

Szenario Gültiger IAVertices-Wert IAPrimitives gültiger Wert Gültiger VSInvocations-Wert
Zeichnen eines indizierten Dreiecksstreifens mit 4 Primitiven (mit allen Indizes mit dem gleichen Wert) 6 4 1--12
Indizierte Dreiecksliste mit 4 Grundwerten zeichnen (mit allen Indizes den gleichen Wert) 12 4 1--12
Zeichnen eines Dreiecksstreifens mit 4 Grundtypen 6 4 6--12
Zeichnen einer Dreiecksliste mit 4 Grundtypen 12 4 6--12

Partielle Grundtypen dürfen innerhalb des Wertebereichs liegen, ähnlich dem Verhalten der Vertexzwischenspeicherung. Wenn partielle Grundwerte möglich sind, sollten Statistiken daher so schnell wie möglich (bevor der Eingabeassemierer (IA) sie zählt, oder so spät wie möglich (Post Clipper und Pre-Pixel-Shader (PS)) zwischen eine Pipeline fallen, die sie klammert. Stream Ausgabe und ein NULL-GS sind flexibel, ob sie tatsächlich GS-Aufrufe verursachen.

In Bezug auf den Wert im PSInvocations-Member von D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS können frühe Tiefen- und Schablonenoptimierungen verhindern, dass die Arbeit aus dem Pixel-Shader realisiert wird. Wenn Pixel bei einem Tiefentest fehlschlagen, kann der Wert in PSInvocations daher abhängig davon erhöht werden, wo der Tiefentest tatsächlich in der Pipeline stattfindet. Wenn der Pixel-Shader die Tiefe ausgibt, muss der Wert in PSInvocations wie erwartet inkrementiert werden, auch wenn die Ausgabetiefe fehlschlägt. Das folgende Beispiel zeigt, wie der Wert in PSInvocations getestet wird.

Betrachten Sie die Größen DSP (Anzahl der Pixel, die die Tiefen- und Schablonentests bestehen) und DSF (Anzahl der Pixel, die entweder die Tiefe oder schablonentests nicht erfolgreich sind). DSP entspricht ungefähr der OCCLUSION-Abfrage, mit der Ausnahme, dass OCCLUSION mehrere Stichproben (nicht Pixel) misst. In allen Fällen ist DSP <= der Wert in PSInvocations<= ( DSP + DSF ). Wenn der Pixel-Shader die Tiefe ausgibt, ist der Wert in PSInvocations die Summe von DSP und DSF. Außerdem wird der Wert in PSInvocations nicht erhöht, wenn ein NULL-Pixel-Shader an die Pipeline gebunden ist.

In Bezug auf die Werte in IAVertices und VSInvocations kann die benachbarte Vertexverarbeitung optimiert werden, wenn der GS die Adjacency-Scheitelpunkte nicht als Eingaben für die GS deklariert. Wenn der GS daher keine benachbarten Scheitelpunkte als Eingaben deklariert, können die Werte in IAVertices und VSInvocations die arbeit widerspiegeln, die von den benachbarten Scheitelpunkten impliziert wird. Wenn der GS benachbarte Scheitelpunkte deklariert, sollte der Wert in IAVertices die benachbarten Scheitelpunkte enthalten (ohne Rücksicht auf eine Zwischenspeicherung nach VS), und der Wert in VSInvocations sollte die benachbarten Scheitelpunkte (zusammen mit allen Auswirkungen der Zwischenspeicherung nach VS) enthalten.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Kopfzeile d3d10umddi.h (einschließlich D3d10umddi.h)

Weitere Informationen

CheckCounterInfo

D3D10DDIARG_CREATEQUERY

D3D10DDI_COUNTER_INFO

D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS

D3D10_DDI_QUERY_DATA_SO_STATISTICS

D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT