Freigeben über


D3D10DDI_QUERY-Aufzählung (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 mit der asynchronen Art der Grafikverarbeitungseinheit (GPU) zu umgehen. Eine ausgegebene D3D10DDI_QUERY_EVENT wird signalisiert, nachdem die GPU mit allen zuvor ausgestellten Befehlen fertig gestellt wurde, im Allgemeinen aus dem Back-End der Grafikpipeline. Die Daten, die der Treiber diesem Abfragetyp zuordnet, ist ein BOOL. Der BOOL-Wert ist jedoch redundant, da der Wert der BOOL immer TRUEist, wenn eine D3D10DDI_QUERY_EVENT Abfrage signalisiert wird. Der Treiber sollte beim Signalisieren der D3D10DDI_QUERY_EVENT immer den BOOL-Datenwert TRUE zurücksenden.
D3D10DDI_QUERY_OCCLUSION
Die Statistikdaten, die der Treiber diesem Abfragetyp zuordnet, ist ein UINT64.The statistik data that the driver associates with this query type is a UINT64. Diese Statistikdaten enthalten die Anzahl der 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 multisampelt ist, wird der Zähler um die Anzahl der sichtbaren Gesamtpixel erhöht. Der Zähler sollte umgebrochen werden, wenn er überläuft.

ANMERKUNG

Die Direct3D-Laufzeit 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 Statistikanforderungen liefert aussagekräftige Informationen. Der Treiber sollte die Differenz zwischen den Statistikdaten berechnen, die er empfängt, wenn ein Aufruf seiner QueryBegin--Funktion auftritt, und den Statistikdaten, die er empfängt, wenn ein Aufruf seiner QueryEnd--Funktion auftritt.

Zum Berechnen sichtbarer Multisamples sollten sich deaktivierte Tiefentests oder Schablonentests so verhalten, als ob die Multisamples den deaktivierten Test bestanden haben. Dies erzeugt gleichwertige Ergebnisse, wenn die Testeinheiten aktiviert wurden, wobei die Testfunktion auf "always" festgelegt ist. Darüber hinaus sollten diese Werte normal tabuliert 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 logisch nicht einmal die Ausgabezusammenführung. Es gibt Pipelinekonfigurationen, bei denen die einzigen effektiven Ergebnisse, die aus der Pipeline erzeugt werden, die Tabulation des Okklusionszählers sind.

D3D10DDI_QUERY_TIMESTAMP
The data that the driver associates with this query type is a UINT64. Der TIMESTAMP-Abfragetyp wird ähnlich wie der D3D10DDI_QUERY_EVENT Abfragetyp 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 fertig ist. TIMESTAMP unterscheidet sich jedoch von D3D10DDI_QUERY_EVENT durch Zurückgeben eines 64-Bit-Zeitstempelwerts. Dieser 64-Bit-Zeitstempelwert sollte von einem GPU-Zähler abgesampelt werden, der mit einer konsistenten Häufigkeit erhöht wird. Der Zeitstempelwert sollte im Moment, in dem die GPU mit allen zuvor ausgegebenen Befehlen fertig gestellt wurde, beispielt werden. Die GPU ist nicht erforderlich, um sicherzustellen, dass alle Caches im Arbeitsspeicher geleert werden, um festzustellen, ob die Arbeit abgeschlossen ist. Dies ist so, dass die Erfüllung mehrerer Hochfrequenz-TIMESTAMP-Abfragetypen die Pipeline nicht stark stört. Die CPU sollte jedoch eine gut definierte Speicherschreib sortierung zwischen sich selbst und der GPU überwachen, insbesondere, wenn D3D10DDI_QUERY_EVENT unterstützt wird. Wenn die CPU feststellen würde, dass die GPU einen bestimmten Wert geschrieben hat (insbesondere einen Zaunwert), würde die CPU ermitteln, dass alle vorherigen Speicherschreibvorgänge, die vor dem Zaunschreibvorgang ausgegeben wurden, auf den Speicher geleert werden und sofort von der CPU angezeigt werden können. Der Typ des Leerens, der möglicherweise erforderlich ist, um Daten aus GPU-Caches und in cpu zugänglichen Arbeitsspeicher abzurufen, sollte nicht jedes TIMESTAMP- aber wahrscheinlich mehr am Ende jedes Befehlspuffers ausgeführt werden.

Die Häufigkeit des Zeitstempelzählers wird im Kontext eines D3D10DDI_QUERY_TIMESTAMPDISJOINT Abfragetyps bereitgestellt. Die Häufigkeit dieses Zählers sollte größer als 10 MHz sein und resistent gegen die dynamische Drosselung der Hochfrequenz der GPU 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 in der Regel selbst 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 genau, wenn die beiden TIMESTAMP-Abfragen innerhalb eines D3D10DDI_QUERY_TIMESTAMPDISJOINT Bereichs in Klammern gesetzt werden und wenn der Abfragetrennwert der D3D10DDI_QUERY_TIMESTAMPDISJOINT Abfrage FALSE-zurückgibt.
D3D10DDI_QUERY_TIMESTAMPDISJOINT
Die Daten, die der Treiber diesem Abfragetyp zuordnet, ist 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 im gesamten Klammernbereich von Grafikbefehlen konsistent war. Das Disjoint Member von D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT enthält einen BOOL-Wert, der angibt, wann etwas dazu geführt hat, dass der Zeitstempelzähler nicht zusammenhängend oder getrennt wird. Einige Beispiele für Ereignisse, die TIMESTAMPDISJOINT auslösen sollten, sind ein Stromdown, Drosselung nach oben und unten aufgrund von Laptop-Stromsparereignissen, einem nicht angeschlossenen Netzkabel und Überhitzung. Solche Ereignisereignisse sollten selten genug sein, während eines stabilen Ausführungszustands der Grafikanwendung, um durch die Steuerung der Systemausführungsumgebung zu vermeiden. Beachten Sie, dass diese Ereignisse, wenn solche Ereignisse auftreten, die Nützlichkeit der TIMESTAMP-Funktionalität effektiv reduzieren. TIMESTAMP-Abfragen nach einem Ereignis, das eine TIMESTAMPDISJOINT-Abfrage auslösen würde, werden im Vergleich zu TIMESTAMP-Abfragen vor einem solchen Ereignis nicht sinnvoll sein. Der BOOL-Wert im Disjoint Member ist TRUE, wenn die Werte aus TIMESTAMP-Abfragen nicht während der Dauer der TIMESTAMPDISJOINT-Abfrage fortlaufend sein können. Andernfalls sollte DisjointFALSEsein. Der Wert des Frequency Member von D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT sollte der Häufigkeit der TIMESTAMP-Uhr entsprechen.

Darüber hinaus ist 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
Ausführliche Informationen finden Sie in den Hinweisen.
D3D10DDI_QUERY_OCCLUSIONPREDICATE
Die Daten, die der Treiber diesem Abfragetyp zuordnet, ist ein BOOL. Dieses Prädikat spiegelt die Spezifikation für die OCCLUSION-Abfrage wieder. Wenn die OCCLUSION-Abfrage für denselben eckigen Bereich 0 zurückgibt, gibt das OCCLUSION-Prädikat FALSEzurück. Andernfalls gibt das OCCLUSION-Prädikat TRUEzurück, das angibt, dass mindestens ein Multisample sichtbar ist. Wenn das Prädikat als Hinweis im Vergleich zur Garantierten angegeben wurde, wird kein Ergebnis jemals an die Anwendung weitergegeben. 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, ist eine D3D10_DDI_QUERY_DATA_SO_STATISTICS Struktur. Diese Struktur enthält Statistiken zur Überwachung der Datenmenge, die in der Datenstromausgabestufe der Pipeline gestreamt wird. Diese Statistiken zählen nur vollständige Grundtypen (z. B. Punkte, Linien und Dreiecke), die gestreamt werden. Wenn sich der Grundtyp ändert (z. B. Linien in Dreiecke), wird die Zählung nicht auf irgendeine Weise angepasst. Das heißt, die Anzahl ist immer Gesamtgrundtypen, unabhängig vom Typ.

ANMERKUNG

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

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

D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE
Die Daten, die der Treiber diesem Abfragetyp zuordnet, ist ein BOOL. Dieser BOOL ist TRUE, wenn eine Datenstromausgabe überlauft ist. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS Abfragen verwendet wurden, um denselben klammern Bereich gleichzeitig zu überwachen wie ein STREAMOVERFLOWPREDICATE-Prädikattyp, hätte der Unterschied in den Werten in der PrimitivesStorageNeeded Member von D3D10_DDI_QUERY_DATA_SO_STATISTICS zu einem größeren Unterschied als der Unterschied in den Werten in den NumPrimitivesWritten-Membern geführt. 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 zum Prädikat von Renderingbefehlen verwendet werden, wodurch verhindert wird, dass ein unerwünschter Frame in der Anwendung angezeigt wird.

Beim gleichzeitigen Streamen von mehreren Puffern 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 zuordnet, ist 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änen-Shader hinzufügt.
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp zuordnet, ist 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, ist 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, ist 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, ist 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 zuordnet, ist ein BOOL. Dieser BOOL ist TRUE, wenn die Stream 0-Ausgabe überlauft ist. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM0 Abfragen verwendet wurden, um denselben klammern Bereich gleichzeitig wie ein STREAMOVERFLOWPREDICATE_STREAM0 Prädikattyp zu überwachen, würde der Unterschied in den Werten in den PrimitivesStorageNeededed Member von D3D10_DDI_QUERY_DATA_SO_STATISTICS zu einem größeren Unterschied als die Differenz der Werte in den NumPrimitivesWritten-Membern führen.
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp zuordnet, ist ein BOOL. Dieser BOOL ist TRUE, wenn die Stream 1-Ausgabe überlaufen ist. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 Abfragen verwendet wurden, um denselben klammern Bereich gleichzeitig wie ein STREAMOVERFLOWPREDICATE_STREAM1 Prädikattyp zu überwachen, würde der Unterschied in den Werten in den PrimitivesStorageNeededed Member von D3D10_DDI_QUERY_DATA_SO_STATISTICS zu einem größeren Unterschied als der Unterschied in den Werten in den NumPrimitivesWritten-Membern führen.
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp zuordnet, ist ein BOOL. Dieser BOOL ist TRUE, wenn die Datenstrom-2-Ausgabe überlaufen ist. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 Abfragen verwendet wurden, um denselben eckigen Bereich gleichzeitig wie ein STREAMOVERFLOWPREDICATE_STREAM2 Prädikattyp zu überwachen, würde der Unterschied in den Werten in den PrimitivesStorageNeededed Member von D3D10_DDI_QUERY_DATA_SO_STATISTICS zu einem größeren Unterschied als der Unterschied in den Werten in den NumPrimitivesWritten-Membern führen.
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3
Unterstützt in Windows 7 und höheren Versionen.

Die Daten, die der Treiber diesem Abfragetyp zuordnet, ist ein BOOL. Dieser BOOL ist TRUE, wenn die Stream 3-Ausgabe überlauft ist. Wenn zwei D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 Abfragen verwendet wurden, um denselben klammern Bereich gleichzeitig wie ein STREAMOVERFLOWPREDICATE_STREAM3 Prädikattyp zu überwachen, würde der Unterschied in den Werten in den PrimitivesStorageNeededed Member von D3D10_DDI_QUERY_DATA_SO_STATISTICS zu einem größeren Unterschied als der Unterschied in den Werten in den NumPrimitivesWritten-Membern führen.
D3D10DDI_COUNTER_GPU_IDLE
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der GPU-Leerlaufzeit zurück.
D3D10DDI_COUNTER_VERTEX_PROCESSING
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der der Vertex-Shader Daten verarbeitet.
D3D10DDI_COUNTER_GEOMETRY_PROCESSING
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der der Geometrie-Shader Daten verarbeitet.
D3D10DDI_COUNTER_PIXEL_PROCESSING
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein 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 zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der GPU-Vorgänge außer Vertex-, Geometrie- und Pixelshadervorgängen ausgelastet sind.
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der theoretischen Bandbreitenauslastung des Adapters zurück.
D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz einer theoretischen maximalen Videospeicherbandbreitenauslastung zurück.
D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein 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 zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz eines theoretischen Maximums der Auslastung des Dreieckssetupdurchsatzes zurück.
D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz eines theoretischen Maximums der Füllrate-Durchsatzauslastung zurück.
D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der der Vertex-Shader wartet, bis der Speicher Lese- oder Schreibvorgänge von Daten ausführt (im Vergleich zu dem Prozentsatz der Zeit, die der Vertex-Shader berechnet Mathematik).
D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der der Vertex-Shader mathematische Berechnungen berechnet (im Vergleich zum Prozentsatz der Zeit, in der der Vertex-Shader auf Speicher wartet, um Lese- oder Schreibvorgänge von Daten auszuführen).
D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der der Geometrie-Shader auf Lese- oder Schreibvorgänge von Daten wartet (im Vergleich zu dem Prozentsatz der Zeit, die der Geometrie-Shader mathematik berechnet).
D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, mit der der Geometrie-Shader mathematikt (im Vergleich zum Prozentsatz der Zeit, in der der Geometrie-Shader auf lese- oder schreibgeschützte Daten wartet).
D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der der Pixelshader auf lese- oder schreibgeschützte 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 zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der Zeit zurück, in der der Pixelshader mathematische Berechnungen berechnet (im Vergleich zum Prozentsatz der Zeit, in der der Pixelshader auf das Lesen oder Schreiben von Daten wartet).
D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein 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. Scheitelpunkte, 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 Pixel-Shader verwendet werden. Eine 100% Trefferrate (Ergebnis einer D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE Abfrage) gibt an, dass jeder für den Geometrie-Shader oder den Pixelshader erforderliche Scheitelpunkt bereits transformiert wurde. Während eine 0% Trefferrate darauf hinweist, dass jeder Vertex, der vom Vertex-Shader verarbeitet werden muss, bevor er verwendet werden kann.

Der Treiber kann Algorithmen und Daten neu strukturieren, um die Trefferraten des Caches zu erhöhen.
D3D10DDI_COUNTER_TEXTURE_CACHE_HIT_RATE
Die Daten, die der Treiber diesem Abfragezählertyp zuordnet, ist ein FLOAT32. Der Treiber gibt den Prozentsatz der Texel oder des Texturspeichers zurück, den ein Shader aus einem Cache von Texeln abgerufen hat, die bereits aus dem Videospeicher abgerufen wurden.

Ein Cache des Texturspeichers kann zwischen der Shaderressourcenansicht oder möglicherweise zwischen 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. Während eine 0% Trefferrate darauf hinweist, dass jedes Texel Daten aus dem Videospeicher abruft.

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

Bemerkungen

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, bei dem es sich um die Anzahl erkennbarer paralleler Einheiten handelt. Diese Zahl wird vom Treiber als Teil der Grafikadapterfunktionen veröffentlicht. Die Anzahl der erkennbaren parallelen Einheiten kann je nach Hardwarearchitekturdetails 1, 2, 3 oder 4 sein, die Fähigkeit von Leistungsindikatoren zu erkennen, wo die Zeit tatsächlich aufgewendet wird, oder nach eigenem Ermessen des Hardwareanbieters. Für Architekturen, die die Anzahl der erkennbaren parallelen Einheiten auf 1 (== 1) in der 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 aller dieser Leistungsindikatoren (zusammen mit D3D10DDI_COUNTER_GPU_IDLE) muss weiterhin den Regeln gleichzeitig aktiver Zähler entsprechen.

Bei Architekturen, die die Anzahl erkennbarer paralleler Einheiten melden, die nicht gleich 1 (!= 1) sind, ist die Interaktion zwischen den einzelnen Beschäftigt-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 .25 (== .25), während die restlichen Beschäftigt-Metriken gleich 0 (== 0) sind. D3D10DDI_COUNTER_GPU_IDLE könnten zwischen 0,5 und 0,75 führen, je nachdem, wie viel tatsächlich 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 einen Prozentsatz eines Engpasses melden, der verwendet werden kann. Anwendungen können dann bestimmen, wann ein bestimmtes theoretisches Maximum beansprucht wird, damit sie bestimmen können, wie man den Engpass umgehen kann.

Details zu D3D10DDI_QUERY_PIPELINESTATS Wert

Die Daten, die der Treiber diesem Abfragetyp zuordnet, ist 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 unendlichen Cache und keinem Cache liegen. Der Clipper verhält sich als 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, wird ein Grundtyp generiert, wenn das ursprüngliche Dreieck überhaupt nicht abgeschnitten wird (oder der Clipping führt nur zu einem Dreieck), zwei Grundtypen werden generiert, wenn das ursprüngliche Dreieck abgeschnitten wurde und zu zwei Dreiecken geführt hat usw. In typischen Konfigurationen der Pipeline wäre der Wert in der GSPrimitives Member von D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS gleich dem Wert im CInvocations Member. Wenn die Rasterung deaktiviert ist und die Pipeline so konfiguriert ist, dass nur Grundtypen an die Datenstromausgabe gesendet werden, würde der Wert in GSPrimitives vom Wert in CInvocations abweichen, da CInvocations- nicht erhöht würde. Die Clippingstatistik wird flexibel in Bezug auf Guard Band-Implementierungen sein. Daher stellen die Tests beim Rendern von Dreiecken, die über den Viewport hinausgehen, sicher, dass der Clipping zwischen einem Wertebereich liegt (Zahlen, die von einem unendlichen Schutzband und Zahlen ausgehen, 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 die Differenz zwischen den Statistikdaten berechnen, die er empfängt, wenn ein Aufruf seiner QueryBegin--Funktion auftritt, und den Statistikdaten, die er empfängt, wenn ein Aufruf seiner QueryEnd--Funktion auftritt.

Im Folgenden finden Sie Beispiele für die Interaktion zwischen den Werten in den IAVertices, IAPrimitivesund VSInvocations Member von D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS im Hinblick auf die Zwischenspeicherung nach vertex-Shader (VS).

Szenario IAVertices gültiger Wert IAPrimitives gültiger Wert VSInvocations valid value
Zeichnen eines indizierten Dreiecksstreifens von 4 Grundtypen (mit allen Indizes mit demselben Wert) 6 4 1--12
Zeichnen einer indizierten Dreiecksliste mit vier Grundtypen (mit allen Indizes demselben Wert) 12 4 1--12
Zeichnen eines Dreiecksstreifens mit vier Grundtypen 6 4 6--12
Dreiecksliste mit vier Grundtypen zeichnen 12 4 6--12

Teilweise Grundtypen dürfen innerhalb eines Wertebereichs fallen, ähnlich wie das Verhalten der Vertexzwischenspeicherung. Daher sollten Statistiken, wenn Teilgrundtypen möglich sind, zwischen einer Pipeline fallen, die sie so schnell wie möglich ausklammert (bevor auch der Eingabeassembler (IA) zählt) oder so spät wie möglich (Post Clipper und Pre-Pixel-Shader (PS)). Streamausgabe und ein NULL- GS sind flexibel, ob sie tatsächlich zu GS-Aufrufen führen.

Im Hinblick auf den Wert im PSInvocations Member von D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS, können frühe Tiefen- und Schablonenoptimierungen die Arbeit des Pixelshaders möglicherweise nicht realisieren. Wenn Pixel also einen Tiefentest nicht bestehen, wird der Wert in PSInvocations möglicherweise erhöht oder nicht erhöht, je nachdem, wo der Tiefentest tatsächlich in der Pipeline stattfindet. Wenn der Pixelshader tiefe ausgibt, muss der Wert in PSInvocations wie erwartet erhöht werden, auch wenn die Ausgabetiefe fehlschlägt. Das folgende Beispiel zeigt, wie der Wert in PSInvocations getestet wird.

Berücksichtigen Sie den DSP (Anzahl der Pixel, die die Tiefen- und Schablonentests bestehen) und DSF (Anzahl der Pixel, die entweder die Tiefen- oder Schablonentestgrößen nicht bestehen). DSP entspricht ungefähr der OCCLUSION-Abfrage, mit der Ausnahme, dass OCCLUSION mehrere Beispiele misst (nicht Pixel). In allen Fällen <DSP = der Wert in PSInvocations<= ( DSP + DSF ). Wenn der Pixelshader tiefe ausgibt, ist der Wert in PSInvocations die Summe von DSP und DSF. Wenn ein NULL- Pixelshader an die Pipeline gebunden ist, wird der Wert in PSInvocations- nicht erhöht.

In Bezug auf die Werte in IAVertices und VSInvocationskann die angrenzende Vertexverarbeitung optimiert werden, wenn die GS die Adjacency-Scheitelpunkte nicht als Eingaben für das GS deklariert. Wenn die GS daher keine angrenzenden Scheitelpunkte als Eingaben deklariert, können die Werte in IAVertices und VSInvocations möglicherweise die von den angrenzenden Scheitelpunkten implizierte Arbeit widerspiegeln. Wenn der GS angrenzende Scheitelpunkte deklariert, sollte der Wert in IAVertices- die angrenzenden Scheitelpunkte (ohne Bezug auf die Zwischenspeicherung nach VS) und den Wert in VSInvocations- die angrenzenden Scheitelpunkte (zusammen mit allen Auswirkungen der Nach-VS-Zwischenspeicherung) enthalten.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Header- d3d10umddi.h (include D3d10umddi.h)

Siehe auch

CheckCounterInfo-

D3D10DDIARG_CREATEQUERY

D3D10DDI_COUNTER_INFO

D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS

D3D10_DDI_QUERY_DATA_SO_STATISTICS

D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT