Freigeben über


Abfragen von Informationen von der GPU

Für die Direct3D-Runtime sind möglicherweise andere Informationen von der Grafikverarbeitungseinheit (GPU) als ein Ausgaberenderziel oder ein Ausgabevertexpuffer erforderlich. Da die GPU parallel zur CPU ausgeführt wird, sollte der Benutzermodusanzeigetreiber Funktionen bereitstellen, die die asynchrone Art der Kommunikation mit der GPU effizient verfügbar machen.

Das Abfrageobjekt ist die Ressource, die die Runtime und der Treiber für asynchrone Benachrichtigungen verwenden. Um ein Abfrageobjekt zu erstellen, ruft die Runtime zuerst die CalcPrivateQuerySize-Funktion des Treibers auf, damit der Treiber die Größe des Speicherbereichs angeben kann, die der Treiber für das Abfrageobjekt benötigt. Die Runtime ruft dann die CreateQuery(D3D10) -Funktion des Treibers auf, um das Abfrageobjekt zu erstellen. In den Aufrufen CalcPrivateQuerySize und CreateQuery(D3D10) stellt die Runtime einen Abfragetypwert aus der D3D10DDI_QUERY-Enumeration im Abfrageelement der D3D10DDIARG_CREATEQUERY Struktur bereit, auf die die pCreateQuery-Parameter verweisen.

Jedes Abfrageobjekt instance ist in einem von drei Zuständen vorhanden: erstellen, ausgegeben und signalisiert. Die Runtime ruft die QueryBegin-Funktion des Treibers auf, um das Abfrageobjekt in den Gebäudezustand zu überstellen.

Hinweis Mit Ausnahme von D3D10DDI_QUERY_EVENT und D3D10DDI_QUERY_TIMESTAMP unterstützen alle Abfragetypen QueryBegin . Für D3D10DDI_QUERY_EVENT und D3D10DDI_QUERY_TIMESTAMP existiert das Gebäudekonzept nicht.

Die Runtime ruft die QueryEnd-Funktion des Treibers auf, um das Abfrageobjekt in den ausgestellten Zustand zu überstellen. Übergänge zum Signalzustand erfolgen einige Zeit später asynchron. Die Runtime ruft die QueryGetData-Funktion des Treibers auf, um zu erkennen, ob die Abfrage in den signalierten Zustand über gegangen ist. Wenn sich die Abfrage im signalierten Zustand befindet, kann QueryGetData Daten zurückgeben, die für die Abfrage in der Speicherregion gelten, auf die der pData-Parameter verweist.

Alle Abfrageobjekte desselben Typs sind FIFO (first-in, first-out). Beispielsweise D3D10DDI_QUERY_EVENT alle Abfrageobjekte vom Typ basierend auf ihrer ausgestellten Bestellung in FIFO-Reihenfolge abgeschlossen. Abfrageobjekte unterschiedlicher Typen können jedoch in überlappender Reihenfolge abgeschlossen oder signalisiert werden. Beispielsweise kann eine Abfrage vom Typ D3D10DDI_QUERY_EVENT abgeschlossen werden, bevor eine Abfrage vom Typ D3D10DDI_QUERY_OCCLUSION, auch wenn die Runtime die D3D10DDI_QUERY_EVENT Abfrage ausgegeben hat, nachdem die Laufzeit die D3D10DDI_QUERY_OCCLUSION Abfrage ausgestellt hat.

Wenn die Runtime das Abfrageobjekt nicht mehr benötigt, gibt die Runtime den Speicherbereich frei, den die Runtime zuvor für das Objekt zugewiesen hat, und ruft die DestroyQuery(D3D10) -Funktion des Treibers auf, um den Treiber darüber zu informieren, dass der Treiber nicht mehr auf diese Speicherregion zugreifen kann.