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 関数をいつでも呼び出して、この統計データを要求できます。 したがって、継続的に正確に計算する必要があります。 |
D3D10DDI_QUERY_TIMESTAMP ドライバーがこのクエリの種類に関連付けるデータは UINT64 です。 TIMESTAMP クエリの種類は、同期プリミティブの種類も提供するため、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 クエリと比較して意味があるとは思われません。 TIMESTAMPDISJOINT クエリの期間中に TIMESTAMP クエリの値が連続することが保証されない場合、 Disjoint メンバーの BOOL 値は TRUE です。 それ以外の場合は、 Disjoint を 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 関数をいつでも呼び出して、これらの統計情報を要求できます。 したがって、継続的に正確に計算する必要があります。 |
D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE ドライバーがこのクエリの種類に関連付けるデータは BOOL です。 ストリーム出力がオーバーフローした場合、この BOOL は TRUE です 。 STREAMOVERFLOWPREDICATE 述語型と同じ角かっこで囲まれた範囲を同時に監視するために 2 つのD3D10DDI_QUERY_STREAMOUTPUTSTATS クエリを使用した場合、D3D10_DDI_QUERY_DATA_SO_STATISTICSの PrimitivesStorageNeeded メンバーの値の差が NumPrimitivesWritten メンバーの値の差よりも大きく異なる可能性があります。 STREAMOVERFLOWPREDICATE では、ヒントとして使用する機能はサポートされていません。 したがって、述語の型を保証する必要があります。 このクエリは述語であり、コマンドをレンダリングする述語に使用できます。これにより、不要なフレームがアプリケーションに表示されなくなります。 複数のバッファーに同時にストリーミングする場合、いずれかのバッファーがオーバーフローするとすぐに、ストリーム出力はすべてのバッファーに対して停止し、STREAMOVERFLOWPREDICATE のデータは TRUE になります。 |
D3D11DDI_QUERY_PIPELINESTATS Windows 7 以降のバージョンでサポートされています。 ドライバーがこのクエリの種類に関連付けるデータは、D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS構造です。 この構造体には、グラフィックス パイプラインの各ステージの統計情報が含まれています。 このクエリの種類は、D3D11DDI_QUERY_PIPELINESTATSクエリの種類と同じですが、D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICSは、ハル シェーダーとドメイン シェーダーに HSInvocations メンバーと DSInvocations メンバーを追加します。 |
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_STATISTICSの PrimitivesStorageNeeded メンバーの値の差によって、NumPrimitivesWritten メンバーの値の差よりも大きな差が生じる可能性があります。 |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1 Windows 7 以降のバージョンでサポートされています。 ドライバーがこのクエリの種類に関連付けるデータは BOOL です。 ストリーム 1 の出力がオーバーフローした場合、この BOOL は TRUE です 。 2 つのD3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1クエリを使用して、STREAMOVERFLOWPREDICATE_STREAM1述語型と同じ角かっこで囲まれた範囲を同時に監視した場合、D3D10_DDI_QUERY_DATA_SO_STATISTICSの PrimitivesStorageNeeded メンバーの値の違いにより、NumPrimitivesWritten メンバーの値の差よりも大きな差が生じる可能性があります。 |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2 Windows 7 以降のバージョンでサポートされています。 ドライバーがこのクエリの種類に関連付けるデータは BOOL です。 ストリーム 2 の出力がオーバーフローした場合、この BOOL は TRUE です 。 2 つのD3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1クエリを使用して、STREAMOVERFLOWPREDICATE_STREAM2述語型と同じ角かっこで囲まれた範囲を同時に監視した場合、D3D10_DDI_QUERY_DATA_SO_STATISTICSの PrimitivesStorageNeeded メンバーの値の差が NumPrimitivesWritten メンバーの値の差よりも大きくなります。 |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3 Windows 7 以降のバージョンでサポートされています。 ドライバーがこのクエリの種類に関連付けるデータは BOOL です。 ストリーム 3 の出力がオーバーフローした場合、この BOOL は TRUE です 。 2 つのD3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1クエリを使用して、STREAMOVERFLOWPREDICATE_STREAM3述語型と同じ角かっこで囲まれた範囲を同時に監視した場合、D3D10_DDI_QUERY_DATA_SO_STATISTICSの PrimitivesStorageNeeded メンバーの値の違いにより、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 関数の呼び出しに応じて、D3D10DDI_COUNTER_INFO構造体の NumDetectableParallelUnits メンバーの検出可能な並列単位の数を 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_STATISTICS の GSPrimitives メンバーの値は CInvocations メンバーの値と等しくなります。 ラスター化が無効になっており、パイプラインがストリーム出力にのみプリミティブを送信するように構成されている場合、CInvocations はインクリメントされないため、GSPrimitives の値は CInvocations の値から逸脱します。 クリッピング統計は、ガード バンドの実装に関して柔軟になります。 したがって、ビューポートを越えて伸びる三角形をレンダリングする場合、テストでは、クリッピングが値の範囲 (無限ガード バンドを想定する数値と、ビューポートの周りの狭いクリッピング四角形を想定する数値) の間に収まるようになります。 すべての値には、デバイス コンテキストの作成以降のイベントの数が含まれます。 これらの統計はいつでも要求できるため、継続的に正確に計算する必要があることに注意してください。
意味のある情報を提供するのは、2 つの独立した統計要求の違いのみです。 ドライバーは、 QueryBegin 関数の呼び出しが発生したときに受け取る統計データと、 QueryEnd 関数の呼び出しが発生したときに受け取る統計データの差を計算する必要があります。
次に、ポスト頂点シェーダー (VS) キャッシュに関して、D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICSの IAVertices、IAPrimitives、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)) の間に統計を配置する必要があります。 Stream出力と NULL GS は、実際に GS 呼び出しが発生するかどうかに関して柔軟です。
D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICSの PSInvocations メンバーの値に関して、初期深度とステンシルの最適化によって、ピクセル シェーダーの作業が実現できなくなる場合もあれば、妨げられる場合もあります。 したがって、ピクセルが深度テストに失敗した場合、パイプラインで深度テストが実際に発生する場所によっては、 PSInvocations の値がインクリメントされる場合と、増分されない場合があります。 ピクセル シェーダーが深度を出力する場合、 PSInvocations の 値は、出力深度が失敗した場合でも、期待どおりにインクリメントする必要があります。 次の例は、 PSInvocations の値がどのようにテストされるかを示しています。
DSP (深度テストとステンシル テストに合格するピクセル数) と DSF (深度テストまたはステンシル テストに失敗したピクセル数) の数量を考えてみましょう。 DSP は、オクルージョン クエリとほぼ同じですが、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 オペレーティング システムで使用できます。 |
Header | d3d10umddi.h (D3d10umddi.h を含む) |
こちらもご覧ください
D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS