D3D10DDI_QUERY-Enumeration (d3d10umddi.h)

Der D3D10DDI_QUERY Enumerationstyps 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 ein Synchronisierungsgrundstück bereit, das viele der folgenden Abfragetypen nachahmen, um die asynchrone Natur der Grafikverarbeitungseinheit (GPU) zu behandeln. Eine ausgegebene D3D10DDI_QUERY_EVENT wird signalisiert, nachdem die GPU mit allen zuvor ausgegebenen Befehlen abgeschlossen wurde, in der Regel aus dem Back-End der Grafikpipeline. Die Daten, die der Treiber diesem Abfragetyp ordnet, sind BOOL. Der BOOL-Wert ist jedoch redundant, da immer, wenn eine D3D10DDI_QUERY_EVENT Abfrage signalisiert wird, der Wert des BOOL immer TRUE ist. 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, die auch als "sichtbare" Multisamples bezeichnet werden, für alle Grundtypen seit der Erstellung des Gerätekontexts. Wenn das Renderziel nicht mehrfach abgestempelt ist, wird der Zähler um die Anzahl der sichtbaren ganzen Pixel erhöht. Der Zähler sollte sich umschließen, wenn er überläuft.

HINWEIS

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

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.

Zum Berechnen sichtbarer Multisamples sollten sich deaktivierte Tiefentests oder Schablonentests so verhalten, als ob die Multisamples den deaktivierten Test "bestehen". Dies erzeugt gleichwertige Ergebnisse zu dem Zeitpunkt, als die Testeinheiten aktiviert wurden, wobei die Testfunktion auf "always" festgelegt wurde. Darüber hinaus sollten diese Werte als normal tabellariert werden, auch wenn keine Renderziele gebunden sind. Da die Tiefen- und Schablonentests logisch in der Ausgabefusionsphase der Pipeline auftreten, erhöhen Pixel, die während der Ausführung von Pixel-Shader 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 Tabulierung des Okklusionszählers sind.

D3D10DDI_QUERY_TIMESTAMP
Die Daten, die der Treiber diesem Abfragetyp ordnet, sind UINT64. Der TIMESTAMP-Abfragetyp wird ähnlich wie der D3D10DDI_QUERY_EVENT-Abfragetyps verwendet, da der TIMESTAMP-Abfragetyp auch einen Typ von Synchronisierungsgrundtyp bereitstellt. Wie D3D10DDI_QUERY_EVENT sollte TIMESTAMP signalisiert werden, wenn die GPU mit allen zuvor ausgegebenen Befehlen abgeschlossen ist. TIMESTAMP unterscheidet sich jedoch von D3D10DDI_QUERY_EVENT, indem ein 64-Bit-Zeitstempelwert zurückgegeben wird. Dieser 64-Bit-Zeitstempelwert sollte von einem GPU-Zähler abgetastet werden, der mit einer konsistenten Häufigkeit 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, dass die Arbeit abgeschlossen ist. Dies ist so, dass die Erfüllung mehrerer HOCHfrequenz-TIMESTAMP-Abfragetypen die Pipeline nicht erheblich beeinträchtigt. Die CPU sollte jedoch die genau 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 Arbeitsspeicherschreibvorgänge, die vor dem Zaunschreibvorgang ausgegeben wurden, in den Arbeitsspeicher gespült werden 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 müssen, 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 gegen dynamische Hochfrequenzdrosselung der GPU beständig sein. Der Zeitstempelzähler sollte global sein. Daher ist der Zeitstempelzähler nicht erforderlich, um die GPU-Zeitslicing von Kontexten zu berücksichtigen.

Der Anfangswert des Zeitstempelzählers ist nicht angegeben. Daher ist der absolute Wert des Zeitstempelzählers im Allgemeinen für sich allein bedeutungslos. Der relative Wert, der aus der Differenz von zwei absoluten Werten generiert wird, quantifiziert jedoch einen verstrichenen Zeitraum. Der Unterschied von zwei Zeitstempelwerten ist nur dann richtig, wenn die beiden TIMESTAMP-Abfragen innerhalb eines D3D10DDI_QUERY_TIMESTAMPDISJOINT Bereichs in Klammern gesetzt werden und wenn der wert für die Abfrage disjoint 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 . TIMESTAMPDISJOINT ermöglicht es einer Anwendung, eine Klammer zu definieren, um nicht nur die Häufigkeit der TIMESTAMP-Uhr anzufordern, sondern auch zu erkennen, ob diese Häufigkeit über den gesamten Klammerbereich von Grafikbefehlen konsistent war. Das Disjoint-Element von D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT enthält einen BOOL-Wert, der angibt, wann der Zeitstempelzähler unterbrochen oder unterbrochen wurde. Einige Beispiele für Ereignisse, die TIMESTAMPDISJOINT auslösen sollten, sind ein Herunter- und Herunterschalten aufgrund von Laptop-Energiesparereignissen, ein nicht angeschlossenes Netzkabel und eine Überhitzung. Solche Ereignisereignisse sollten während eines stabilen Ausführungszustands der Grafikanwendung selten sein, um durch Steuern der Systemausführungsumgebung zu vermeiden. 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, sind im Vergleich zu TIMESTAMP-Abfragen, die einem solchen Ereignis vorangehen, nicht sinnvoll. Der BOOL-Wert im Disjoint-Member ist TRUE , wenn nicht garantiert werden kann, dass die Werte aus TIMESTAMP-Abfragen während der gesamten Dauer der TIMESTAMPDISJOINT-Abfrage kontinuierlich sind. Otheriwse , Disjoint sollte FALSE sein. Der Wert des Frequency-Members von D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT sollte der Häufigkeit der TIMESTAMP-Uhr entsprechen.

Darüber hinaus sind Benachrichtigungen über solche Einschränkungsereignisse 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ückverbreitet. 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 ordnet, 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 total primitive, unabhängig vom Typ.

HINWEIS

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

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.

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 wurden, um denselben Klammerbereich wie ein STREAMOVERFLOWPREDICATE-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 Differenz der Werte in den NumPrimitivesWritten-Membern geführt. STREAMOVERFLOWPREDICATE unterstützt nicht die Möglichkeit, als Hinweis verwendet zu werden. Daher muss der Prädikattyp garantiert sein. Diese Abfrage ist ein Prädikat und kann verwendet werden, um Renderingbefehle zu prädikatieren, wodurch verhindert wird, dass der Anwendung ein unerwünschter Frame angezeigt wird.

Beim gleichzeitigen Streaming an mehrere Puffer wird die Streamausgabe für alle Puffer beendet, und die Daten für STREAMOVERFLOWPREDICATE werden true.
D3D11DDI_QUERY_PIPELINESTATS
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp ordnet, 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 D3D11DDI_QUERY_PIPELINESTATS Abfragetyp, außer D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS HSInvocations - und DSInvocations-Member für Hull- und Domänenshader hinzufügt.
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp ordnet, 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 ordnet, 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 ordnet, 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 ordnet, 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 wie ein STREAMOVERFLOWPREDICATE_STREAM0 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_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 überlaufen wurde. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 Abfragen verwendet würden, um denselben Klammerbereich gleichzeitig als STREAMOVERFLOWPREDICATE_STREAM1 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_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 überläuft. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 Abfragen verwendet würden, um denselben Klammerbereich gleichzeitig als STREAMOVERFLOWPREDICATE_STREAM2 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 .
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 gleichzeitig als STREAMOVERFLOWPREDICATE_STREAM3 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 .
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 Geometry-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 Pixelshader daten verarbeitet.
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 außer Vertex-, Geometry- und Pixelshadervorgä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 der Bandbreitenauslastung des Videospeichers 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 der 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 an Durchsatzauslastung mit Dreieckseinrichtung 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, in der der Vertex-Shader auf lese- oder schreibvorgänge von Daten wartet (im Vergleich zum Prozentsatz der Zeit, die der Vertexshader 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 Vertexshader berechnet (im Vergleich zum Prozentsatz der Zeit, die der Vertexshader auf lese- oder schreibvorgänge von Daten im Speicher wartet).
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, in der der Geometry-Shader darauf wartet, dass der Speicher Lese- oder Schreibvorgänge von Daten ausführt (im Vergleich zum Prozentsatz der Zeit, die der Geometrieshader 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, in der der Geometrie-Shader die Mathematik berechnet (im Vergleich zum Prozentsatz der Zeit, die der Geometry-Shader auf lese- oder schreibvorgänge von Daten im Arbeitsspeicher wartet).
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, in der der Pixelshader auf lese- oder schreibvorgänge von Daten wartet (im Vergleich zum Prozentsatz der Zeit, die der Pixelshader 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 Pixelshader berechnet (im Vergleich zum Prozentsatz der Zeit, die der Pixelshader auf lese- oder schreibvorgänge 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, den der Geometrie-Shader oder Pixelshader 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 Vertexshader ausgeführt wurde) ist unmittelbar nach dem Vertexshader vorhanden. Diese Scheitelpunkte können entweder vom Geometry-Shader oder vom Pixelshader verwendet werden. Eine Trefferrate von 100 % (Ergebnis einer D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE Abfrage) gibt an, dass jeder Vertex, der für den Geometrie- oder Pixelshader erforderlich ist, bereits transformiert wurde. Eine Trefferrate von 0 % gibt an, dass jeder Scheitelpunkt eine Verarbeitung durch den Vertexshader 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 von Texels oder Texturspeicher 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 der Shaderressourcenansicht oder möglicherweise konstanten Puffern und Shadern vorhanden sein. Eine Trefferrate von 100 % gibt an, dass alle texel, die für einen Shader erforderlich sind, bereits im Cache verfügbar waren. Eine Trefferrate von 0 % gibt an, dass jeder Texel daten aus dem Videospeicher abrufen musste.

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 Abfragezähler. Hardwarehersteller können diesen Wert und einen beliebigen 32-Bit-Wert über 0x40000000 für einen Abfragezähler 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, je nach Hardwarearchitekturdetails, der Fähigkeit von Leistungsindikatoren, zu erkennen, wo tatsächlich Zeit aufgewendet wird, oder nach dem 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 Formel:

(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 von gleichzeitig aktiven 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 z. B. die Anzahl der erkennbaren parallelen Einheiten gleich 4 (== 4) ist, sind D3D10DDI_COUNTER_VERTEX_PROCESSING und D3D10DDI_COUNTER_PIXEL_PROCESSING gleich 0 (== ,25), während die restlichen ausgelasteten Metriken gleich 0 (== 0) sind. D3D10DDI_COUNTER_GPU_IDLE kann abhängig davon, wie viel tatsächliche Überlappung diese parallelen Einheiten erreicht haben, zwischen 0,5 und 0,75 ergeben.

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 Engpasses, 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 scheint sich wie der Geometry-Shader (GS) zu verhalten. Der Clipper wird für jedes Dreieck ausgeführt. Für jeden Aufruf werden null Grundtypen generiert, wenn das ursprüngliche Dreieck vollständig beschnitten ist, ein Grundtyp wird generiert, wenn das ursprüngliche Dreieck überhaupt nicht beschnitten wird (oder der Clipping nur ein Dreieck ergibt), zwei Grundtypen werden generiert, wenn das ursprüngliche Dreieck beschnitten wurde und zu zwei Dreiecken geführt hat usw. In typischen Konfigurationen der Pipeline wäre der Wert im GSPrimitives-Member von D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS gleich dem Wert im CInvocations-Element . Wenn die Rasterung deaktiviert ist und die Pipeline so konfiguriert ist, dass nur Primitive an die Streamausgabe gesendet werden, weicht der Wert in GSPrimitives vom Wert in CInvocations ab, da CInvocations nicht inkrementiert würde. Die Clippingstatistiken sind in Bezug auf Guard-Band-Implementierungen flexibel. Daher stellen die Tests beim Rendern von Dreiecken, die über den Viewport hinausgehen, sicher, dass der Clipping zwischen einem Bereich von Werten fällt (Zahlen, die ein unendliches Schutzband annehmen, und Zahlen, die ein enges Beschneidungsrechteck 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 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.

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 Vertexshader (VS).

Szenario Gültiger IAVertices-Wert IAPrimitives gültiger Wert Gültiger VSInvocations-Wert
Zeichnen eines indizierten Dreiecksstreifens von vier Grundtypen (mit allen Indizes mit demselben Wert) 6 4 1--12
Indizierte Dreiecksliste mit vier Grundtypen zeichnen (mit allen Indizes denselben Wert) 12 4 1--12
Zeichnen eines Dreieckstreifens 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