次の方法で共有


D3D10DDI_QUERY列挙 (d3d10umddi.h)

D3D10DDI_QUERY列挙型には、クエリの種類を識別する値が含まれています。

構文

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

定数

 
D3D10DDI_QUERY_EVENT
このクエリの種類は、次のクエリの種類の多くが、グラフィックス処理装置 (GPU) の非同期の性質を処理するために模倣する同期プリミティブを提供します。 発行されたD3D10DDI_QUERY_EVENTは、GPU が以前に発行されたすべてのコマンド (通常はグラフィックス パイプラインのバックエンドから) で終了した後に通知されます。 ドライバーがこのクエリの種類に関連付けるデータは BOOL です。 ただし、BOOL 値は冗長です。D3D10DDI_QUERY_EVENT クエリが通知されるたびに、BOOL の値は常に TRUE されるためです。 ドライバーは常に、D3D10DDI_QUERY_EVENTを通知するときに、TRUE の BOOL データ値を返す必要があります。
D3D10DDI_QUERY_OCCLUSION
ドライバーがこのクエリの種類に関連付ける統計データは UINT64 です。 この統計データには、デバイス コンテキストの作成以降のすべてのプリミティブについて、深度テストとステンシル テスト ("可視" マルチサンプルとも呼ばれます) に合格したマルチサンプルの数が含まれます。 レンダー ターゲットがマルチサンプリングされていない場合、カウンターは表示されているピクセル全体の数だけインクリメントされます。 カウンターはオーバーフローしたときにラップする必要があります。

手記

Direct3D ランタイムは、ドライバーの QueryGetData 関数をいつでも呼び出して、この統計データを要求できます。 したがって、継続的に正確に計算する必要があります。

2 つの独立した統計要求の違いだけが意味のある情報を提供します。 ドライバーは、QueryBegin 関数の呼び出しが発生したときに受け取る統計データと、QueryEnd 関数の呼び出しが発生したときに受け取る統計データの差を計算する必要があります。

表示されるマルチサンプルを計算するために、無効にされた深度テストまたはステンシル テストは、マルチサンプルが無効なテストに "合格" したかのように動作する必要があります。 これにより、テスト関数が "always" に設定された状態でテスト ユニットが有効になった場合と同等の結果が生成されます。 また、レンダー ターゲットがバインドされていない場合でも、これらの値は通常どおりに表される必要があります。 深度テストとステンシル テストはパイプラインの出力マージ ステージで論理的に行われるため、ピクセル シェーダーの実行中に破棄されるピクセルはオクルージョン カウンターをインクリメントしません。 破棄されたピクセルは、論理的には出力マージャーにも到達しません。 パイプライン構成があり、パイプラインから生成される有効な結果はオクルージョン カウンターの集計だけです。

D3D10DDI_QUERY_TIMESTAMP
ドライバーがこのクエリの種類に関連付けるデータは UINT64 です。 TIMESTAMP クエリの種類は、同期プリミティブの型も提供するため、D3D10DDI_QUERY_EVENT クエリの種類と同様に使用されます。 D3D10DDI_QUERY_EVENTと同様に、GPU が以前に発行されたすべてのコマンドで終了すると、TIMESTAMP が通知されます。 ただし、TIMESTAMP は、64 ビットのタイムスタンプ値を返すことでD3D10DDI_QUERY_EVENTとは異なります。 この 64 ビットタイムスタンプ値は GPU カウンターからサンプリングする必要があり、これは一貫した頻度でインクリメントされます。 タイムスタンプ値は、GPU が以前に発行されたすべてのコマンドで完了した時点でサンプリングする必要があります。 GPU は、すべてのキャッシュがメモリにフラッシュされ、その処理が完了したことを確認するために必要ではありません。 これは、複数の頻度の高い TIMESTAMP クエリの種類を満たすことがパイプラインを大きく妨げないようにするためです。 ただし、CPU は、特にD3D10DDI_QUERY_EVENTがサポートされている場合に、それ自体と GPU の間の明確に定義されたメモリ書き込み順序を監視する必要があります。 CPU が特定の値 (特にフェンス値) を書き込んだと CPU が判断した場合、CPU は、フェンス書き込み前に発行された以前のすべてのメモリ書き込みをメモリにフラッシュし、CPU によってすぐに確認できるようにする必要があると判断します。 GPU キャッシュからデータを取得し、CPU アクセス可能なメモリに格納するために必要なフラッシュの種類は、すべての TIMESTAMP を実行する必要はなく、おそらくすべてのコマンド バッファーの最後で実行する必要があります。

タイムスタンプ カウンターの頻度は、D3D10DDI_QUERY_TIMESTAMPDISJOINTクエリ型のコンテキスト内で提供されます。 このカウンターの周波数は 10 MHz を超え、GPU の高周波動的スロットルに対して耐性がある必要があります。 タイムスタンプ カウンターはグローバルである必要があります。 そのため、タイムスタンプ カウンターは、コンテキストの GPU タイム スライスを考慮する必要はありません。

タイムスタンプ カウンターの初期値が指定されていません。 したがって、タイムスタンプ カウンターの絶対値は、一般に単独では意味がありません。 ただし、2 つの絶対値の差から生成される相対値は、経過時間を定量化します。 2 つのタイムスタンプ値の違いは、2 つの TIMESTAMP クエリがD3D10DDI_QUERY_TIMESTAMPDISJOINT範囲内で角かっこで囲まれており、D3D10DDI_QUERY_TIMESTAMPDISJOINT クエリのクエリ不整合値から FALSE 返された場合にのみ正確です。
D3D10DDI_QUERY_TIMESTAMPDISJOINT
ドライバーがこのクエリの種類に関連付けるデータは、D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT 構造です。 TIMESTAMPDISJOINT を使用すると、アプリケーションはブラケットを定義して TIMESTAMP クロックの周波数を要求するだけでなく、その周波数がグラフィックス コマンドの角かっこで囲まれた範囲全体で一貫しているかどうかを検出できます。 D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINTの Disjoint メンバーには、タイムスタンプ カウンターが不連続または不整合になった原因を示す BOOL 値が含まれています。 TIMESTAMPDISJOINT をトリガーする必要があるイベントの例としては、電源ダウン、ノート PC の省電力イベントによる調整、AC コードの取り外し、過熱などがあります。 このようなイベントの発生は、安定したグラフィックス アプリケーションの実行状態の間に、システム実行環境を制御することによって回避できるほどまれである必要があります。 このようなイベントが発生した場合、TIMESTAMP 機能の有用性が効果的に低下します。 TIMESTAMPDISJOINT クエリをトリガーするイベントの後の TIMESTAMP クエリは、このようなイベントの前の TIMESTAMP クエリと比較して意味があるとは思われません。 TIMESTAMP クエリの値が TIMESTAMPDISJOINT クエリの期間を通じて連続することが保証されない場合、の不整合 メンバーの BOOL 値は TRUE 。 それ以外の場合は、不整合 を FALSE する必要があります。 D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINTの Frequency メンバーの値は、TIMESTAMP クロックの周波数と等しい必要があります。

さらに、このような調整イベントの通知は、パフォーマンスの監視、回帰、および調査ツールに役立ちます。この通知により、アプリケーションの実行でパフォーマンスの違いが生じると想定されます。
D3D10DDI_QUERY_PIPELINESTATS
詳細については、「解説」を参照してください。
D3D10DDI_QUERY_OCCLUSIONPREDICATE
ドライバーがこのクエリの種類に関連付けるデータは BOOL です。 この述語は、OCCLUSION クエリの仕様を反映します。 同じ角かっこで囲まれた範囲に対する OCCLUSION クエリが 0 を返す場合、OCCLUSION 述語は FALSE 返します。 それ以外の場合、OCCLUSION 述語は true 返します。これは、少なくとも 1 つのマルチサンプルが表示されることを示します。 述語がヒントと保証済みであることが示された場合、結果はアプリケーションに反映されません。 このクエリ型は述語であり、コマンドのレンダリングを述語に使用できます。
D3D10DDI_QUERY_STREAMOUTPUTSTATS
ドライバーがこのクエリの種類に関連付けるデータは、D3D10_DDI_QUERY_DATA_SO_STATISTICS 構造体です。 この構造体には、パイプラインのストリーム出力ステージでストリーミングアウトされるデータの量を監視するための統計が含まれています。 これらの統計情報は、ストリーミングアウトされる完全なプリミティブ (ポイント、線、三角形など) のみをカウントします。プリミティブ型が変更された場合 (線から三角形など)、カウントは調整されません。 つまり、カウントは、型に関係なく、常に合計プリミティブです。

手記

Direct3D ランタイムは、ドライバーの QueryGetData 関数をいつでも呼び出して、これらの統計情報を要求できます。 したがって、継続的に正確に計算する必要があります。

2 つの独立した統計要求の違いだけが意味のある情報を提供します。 ドライバーは、QueryBegin 関数の呼び出しが発生したときに受け取る統計データと、QueryEnd 関数の呼び出しが発生したときに受け取る統計データの差を計算する必要があります。

D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE
ドライバーがこのクエリの種類に関連付けるデータは BOOL です。 ストリーム出力がオーバーフローした場合、この BOOL は TRUE されます。 STREAMOVERFLOWPREDICATE 述語型と同じ角かっこで囲まれた範囲を同時に監視するために 2 つのD3D10DDI_QUERY_STREAMOUTPUTSTATS クエリを使用した場合、D3D10_DDI_QUERY_DATA_SO_STATISTICSPrimitivesStorageNeeded メンバーの値の差が、NumPrimitivesWritten メンバーの値の差よりも大きな差を生じる可能性があります。 STREAMOVERFLOWPREDICATE では、ヒントとして使用する機能はサポートされていません。 したがって、述語の型を保証する必要があります。 このクエリは述語であり、述語レンダリング コマンドに使用できます。これにより、不要なフレームがアプリケーションに表示されなくなります。

複数のバッファーに同時にストリーミングする場合、いずれかのバッファーがオーバーフローするとすぐに、ストリーム出力の書き込みはすべてのバッファーで停止し、STREAMOVERFLOWPREDICATE のデータは TRUE になります。
D3D11DDI_QUERY_PIPELINESTATS
Windows 7 以降のバージョンでサポートされています。

ドライバーがこのクエリの種類に関連付けるデータは、D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS構造体です。 この構造体には、グラフィックス パイプラインの各ステージの統計情報が含まれています。 このクエリの種類は、hsInvocations 追加D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS、ハル シェーダーとドメイン シェーダーのメンバー DSInvocations を追加する点を除き、D3D11DDI_QUERY_PIPELINESTATSクエリの種類と同じです。
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0
Windows 7 以降のバージョンでサポートされています。

ドライバーがこのクエリの種類に関連付けるデータは、D3D10_DDI_QUERY_DATA_SO_STATISTICS 構造体です。
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM1
Windows 7 以降のバージョンでサポートされています。

ドライバーがこのクエリの種類に関連付けるデータは、D3D10_DDI_QUERY_DATA_SO_STATISTICS 構造体です。
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM2
Windows 7 以降のバージョンでサポートされています。

ドライバーがこのクエリの種類に関連付けるデータは、D3D10_DDI_QUERY_DATA_SO_STATISTICS 構造体です。
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM3
Windows 7 以降のバージョンでサポートされています。

ドライバーがこのクエリの種類に関連付けるデータは、D3D10_DDI_QUERY_DATA_SO_STATISTICS 構造体です。
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM0
Windows 7 以降のバージョンでサポートされています。

ドライバーがこのクエリの種類に関連付けるデータは BOOL です。 ストリーム 0 の出力がオーバーフローした場合、この BOOL は true 。 2 つのD3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM0クエリを使用して、STREAMOVERFLOWPREDICATE_STREAM0述語型と同じ角かっこで囲まれた範囲を同時に監視した場合、D3D10_DDI_QUERY_DATA_SO_STATISTICSPrimitivesStorageNeeded メンバーの値の差が、NumPrimitivesWritten メンバーの値の差よりも大きく違いを生じる可能性があります。
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1
Windows 7 以降のバージョンでサポートされています。

ドライバーがこのクエリの種類に関連付けるデータは BOOL です。 ストリーム 1 の出力がオーバーフローした場合、この BOOL は true 。 2 つのD3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1クエリを使用して、STREAMOVERFLOWPREDICATE_STREAM1述語型と同じ角かっこで囲まれた範囲を同時に監視した場合、D3D10_DDI_QUERY_DATA_SO_STATISTICSPrimitivesStorageNeeded メンバーの値の差は、NumPrimitivesWritten メンバーの値の差よりも大きな差が生じます。
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2
Windows 7 以降のバージョンでサポートされています。

ドライバーがこのクエリの種類に関連付けるデータは BOOL です。 ストリーム 2 の出力がオーバーフローした場合、この BOOL は true 。 2 つのD3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1クエリを使用して、STREAMOVERFLOWPREDICATE_STREAM2述語型と同じ角かっこで囲まれた範囲を同時に監視した場合、D3D10_DDI_QUERY_DATA_SO_STATISTICSPrimitivesStorageNeeded メンバーの値の差が、NumPrimitivesWritten メンバーの値の差よりも大きな差を生じる可能性があります。
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3
Windows 7 以降のバージョンでサポートされています。

ドライバーがこのクエリの種類に関連付けるデータは BOOL です。 ストリーム 3 の出力がオーバーフローした場合、この BOOL TRUE。 2 つのD3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 クエリを使用して、STREAMOVERFLOWPREDICATE_STREAM3述語型と同じ角かっこで囲まれた範囲を同時に監視した場合、D3D10_DDI_QUERY_DATA_SO_STATISTICSPrimitivesStorageNeeded メンバーの値の差が、NumPrimitivesWritten メンバーの値の差よりも大きな差を生じる可能性があります。
D3D10DDI_COUNTER_GPU_IDLE
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、GPU アイドル時間の割合を返します。
D3D10DDI_COUNTER_VERTEX_PROCESSING
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、頂点シェーダーがデータの処理中である時間の割合を返します。
D3D10DDI_COUNTER_GEOMETRY_PROCESSING
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、ジオメトリ シェーダーがデータの処理にビジー状態になっている時間の割合を返します。
D3D10DDI_COUNTER_PIXEL_PROCESSING
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、ピクセル シェーダーがデータの処理中である時間の割合を返します。
D3D10DDI_COUNTER_OTHER_GPU_PROCESSING
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、頂点、ジオメトリ、ピクセル シェーダーの操作以外の GPU 操作がデータの処理にビジー状態になっている時間の割合を返します。
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、理論上の最大アダプター帯域幅使用率の割合を返します。
D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、ビデオ メモリ帯域幅の使用率の理論上の最大値の割合を返します。
D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、頂点スループット使用率の理論上の最大値の割合を返します。
D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、三角形設定スループット使用率の理論上の最大値の割合を返します。
D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、理論上の最大フィルレート スループット使用率の割合を返します。
D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、メモリがデータの読み取りまたは書き込みを実行するまで頂点シェーダーが待機する時間の割合 (頂点シェーダーが計算する時間の割合) を返します。
D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、頂点シェーダーが計算する時間の割合 (頂点シェーダーがメモリがデータの読み取りまたは書き込みを実行するのを待機する時間の割合) を返します。
D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、メモリがデータの読み取りまたは書き込みを実行するまでジオメトリ シェーダーが待機する時間の割合を返します (ジオメトリ シェーダーが数学を計算する時間の割合に対します)。
D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、ジオメトリ シェーダーが計算する時間の割合 (ジオメトリ シェーダーがメモリがデータの読み取りまたは書き込みを実行するのを待機する時間の割合) を返します。
D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、メモリがデータの読み取りまたは書き込みを実行するのをピクセル シェーダーが待機する時間の割合 (ピクセル シェーダーが計算する時間の割合) を返します。
D3D10DDI_COUNTER_PIXELSHADER_COMPUTATION_LIMITED
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、ピクセル シェーダーが計算する時間の割合 (ピクセル シェーダーがメモリがデータの読み取りまたは書き込みを実行するのを待機する時間の割合) を返します。
D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、頂点シェーダーによって既に変換された頂点のキャッシュからジオメトリ シェーダーまたはピクセル シェーダーが取得した頂点の割合を返します。

変換された頂点 (つまり、頂点シェーダーが実行された頂点) のキャッシュは、頂点シェーダーの直後に存在します。 これらの頂点は、ジオメトリ シェーダーまたはピクセル シェーダーで使用できます。 100% ヒット 率 (D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE クエリの結果) は、ジオメトリ シェーダーまたはピクセル シェーダーに必要なすべての頂点が既に変換されたことを示します。 0% ヒット 率は、頂点シェーダーが使用する前に頂点シェーダーによる処理が必要であることを示します。

ドライバーは、アルゴリズムとデータを再構築して、キャッシュ ヒット 率を高めることができます。
D3D10DDI_COUNTER_TEXTURE_CACHE_HIT_RATE
ドライバーがこのクエリ カウンター型に関連付けるデータはFLOAT32です。 ドライバーは、ビデオ メモリから既に取得されたテクセルのキャッシュからシェーダーが取得したテクセルまたはテクスチャ メモリの割合を返します。

テクスチャ メモリのキャッシュは、シェーダー リソース ビュー間、または場合によっては定数バッファーとシェーダーの間に存在できます。 100% ヒット 率は、シェーダーに必要なすべてのテクセルがキャッシュで既に使用可能であることを示します。 0% ヒット 率は、すべてのテクセルがビデオ メモリからデータを取得する必要があることを示します。

ドライバーは、アルゴリズムとデータを再構築して、キャッシュ ヒット 率を高めることができます。
D3D10DDI_COUNTER_DEVICE_DEPENDENT_0
最初に使用可能なデバイスに依存するクエリ カウンター。 ハードウェア ベンダーは、デバイスのクエリ カウンターに対して、この値と0x40000000上の任意の 32 ビット値を使用できます。

備考

D3D10DDI_COUNTER_VERTEX_PROCESSING、D3D10DDI_COUNTER_GEOMETRY_PROCESSING、D3D10DDI_COUNTER_PIXEL_PROCESSING、およびD3D10DDI_COUNTER_OTHER_GPU_PROCESSINGの値は、検出可能な並列ユニットの数であるドライバー定義値に加算できます。 この番号は、グラフィックス アダプター機能の一部としてドライバーによって公開されます。 検出可能な並列ユニットの数は、ハードウェア アーキテクチャの詳細、実際に時間が費やされている場所を識別するパフォーマンス カウンターの機能、またはハードウェア ベンダーの完全な裁量に応じて、1、2、3、または 4 にすることができます。 CheckCounterInfo 関数の呼び出しに応答して、NumDetectableParallelUnits メンバー D3D10DDI_COUNTER_INFO の検出可能な並列単位の数が 1 (== 1) であることを報告するアーキテクチャでは、次の式が適用されます。

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

(D3D10DDI_COUNTER_GPU_IDLEと共に) これらすべてのカウンター識別子の監視は、同時にアクティブなカウンターの規則に従う必要があります。

検出可能な並列ユニットの数が 1 (!= 1) に等しくないと報告されるアーキテクチャの場合、各ビジー メトリック間の相互作用はより複雑になります。 たとえば、検出可能な並列単位の数が 4 (== 4) の場合、D3D10DDI_COUNTER_VERTEX_PROCESSINGとD3D10DDI_COUNTER_PIXEL_PROCESSINGは .25 (== .25) に等しく、残りのビジー状態のメトリックは 0 (== 0) になります。 D3D10DDI_COUNTER_GPU_IDLE、これらの並列単位の実際の重なり量に応じて、.5 から .75 の間になる可能性があります。

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_QUERY_PIPELINESTATS値の詳細

ドライバーがこのクエリの種類に関連付けるデータは、グラフィックス パイプラインの各ステージの統計情報を含む D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS 構造です。 ステージごとに、呼び出しの数の値は、無限キャッシュとキャッシュなしの間に収める必要があります。 クリッパーはジオメトリ シェーダー (GS) として動作するように見えます。 クリッパーは三角形ごとに実行されます。 呼び出しごとに、元の三角形が完全にクリップされている場合は 0 個のプリミティブが生成され、元の三角形がまったくクリップされない場合は 1 つのプリミティブが生成されます (または、クリッピングによって 1 つの三角形のみが生成されます)、元の三角形がクリップされて 2 つの三角形になった場合は 2 つのプリミティブが生成されます。 パイプラインの一般的な構成では、D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICSGSPrimitives メンバーの値は、CInvocations メンバーの値と等しくなります。 ラスター化が無効で、パイプラインがプリミティブをストリーム出力にのみ送信するように構成されている場合、GSPrimitives の値は、CInvocations の値から逸脱します。これは、CInvocations がインクリメントされないためです。 クリッピングの統計情報は、ガード バンドの実装に関して柔軟になります。 したがって、ビューポートを越えて伸びる三角形をレンダリングする場合、テストでは、クリッピングが値の範囲 (無限ガード バンドを想定する数値と、ビューポートの周囲に狭いクリッピング四角形を想定する数値) の間に収まっていることを確認します。 すべての値には、デバイス コンテキストの作成以降のイベントの数が含まれます。 これらの統計はいつでも要求できるため、継続的に正確に計算する必要があることに注意してください。

2 つの独立した統計要求の違いだけが意味のある情報を提供します。 ドライバーは、QueryBegin 関数の呼び出しが発生したときに受け取る統計データと、QueryEnd 関数の呼び出しが発生したときに受け取る統計データの差を計算する必要があります。

次に、IAVerticesIAPrimitives、およびポスト 頂点シェーダー (VS) キャッシュに関して、D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS のメンバー VSInvocations の値間の相互作用の例を示します。

シナリオ IAVertices の有効な値 IAPrimitives の有効な値 VSInvocations の有効な値
4 つのプリミティブのインデックス付き三角形ストリップを描画する (すべてのインデックスが同じ値を持つ) 6 4 1--12
4 つのプリミティブのインデックス付き三角形リストを描画する (すべてのインデックスが同じ値を持つ) 12 4 1--12
4 つのプリミティブの三角形ストリップを描画する 6 4 6--12
4 つのプリミティブの三角形リストを描画する 12 4 6--12

部分プリミティブは、頂点キャッシュの動作と同様に、値の範囲内に収まるようにできます。 したがって、部分的なプリミティブが可能な場合は、できるだけ早くクリップするパイプライン (入力アセンブラー (IA) がカウントする前)、またはできるだけ遅く (ポスト クリッパーとプリピクセル シェーダー (PS)) の間に統計を配置する必要があります。 ストリーム出力と NULL GS は、GS 呼び出しが実際に発生するかどうかに関して柔軟です。

D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICSのメンバー PSInvocations の値に関しては、初期深度とステンシルの最適化によって、ピクセル シェーダーの処理が実現されない場合と妨げる場合があります。 したがって、ピクセルが深度テストに失敗した場合、PSInvocations の値は、パイプラインで実際に深度テストが行われる場所に応じてインクリメントされる場合と、インクリメントされない場合があります。 ピクセル シェーダーが深度を出力する場合、PSInvocations の値は、出力深度が失敗した場合でも、期待どおりにインクリメントする必要があります。 次の例は、PSInvocations の値をテストする方法を示しています。

DSP (深度テストとステンシル テストに合格するピクセル数) と DSF (深度テストまたはステンシル テストに失敗したピクセル数) の数量を考慮してください。 DSP は OCCLUSION クエリとほぼ同じですが、OCCLUSION は複数のサンプル (ピクセルではなく) を測定する点が異なります。 いずれの場合も、DSP <= PSInvocations<= ( DSP + DSF) の値です。 ピクセル シェーダーが深度を出力すると、PSInvocations の値は DSP と DSF の合計になります。 さらに、NULL ピクセル シェーダーがパイプラインにバインドされている場合、PSInvocations の値はインクリメントされません。

IAVertices と VSInvocations の値に関しては、GS が隣接頂点を GS への入力として宣言していない場合、隣接する頂点処理が最適化される可能性があります。 したがって、GS が隣接する頂点を入力として宣言しない場合、IAVertices および VSInvocations の値、隣接する頂点によって暗黙的に示される処理が反映される場合と反映されない場合があります。 GS が隣接する頂点を宣言する場合、IAVertices の値には隣接する頂点 (ポスト VS キャッシュに関係なく) が含まれる必要があり、VSInvocations の値には隣接する頂点が含まれている必要があります (VS キャッシュ後の影響も含まれます)。

必要条件

要件 価値
サポートされる最小クライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
ヘッダー d3d10umddi.h (D3d10umddi.h を含む)

関連項目

CheckCounterInfo

D3D10DDIARG_CREATEQUERY

D3D10DDI_COUNTER_INFO

D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS

D3D10_DDI_QUERY_DATA_SO_STATISTICS

D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT