D3DKMTCreateNativeFence 関数 (d3dkmthk.h)
Dxgkrnl は D3DKMTCreateNativeFence を呼び出して、特定のデバイスにネイティブ GPU フェンス オブジェクトを作成します。
構文
NTSTATUS D3DKMTCreateNativeFence(
D3DKMT_CREATENATIVEFENCE *unnamedParam1
);
パラメーター
unnamedParam1
[入力/出力]作成するフェンス オブジェクトを記述する D3DKMT_CREATENATIVEFENCE 構造体へのポインター。
戻り値
D3DKMTCreateNativeFence は、正常に作成されたSTATUS_SUCCESSを返します。 それ以外の場合は、STATUS_INVALID_PARAMETER などの NTSTATUS エラー コードが返されます。
注釈
指定した D3DDDI_NATIVEFENCE_TYPE によって、OS によって作成されるネイティブ フェンスの種類が決まります。 これらのフェンスは、 CurrentValue と MonitoredValue の機能、パフォーマンス特性、ストレージ要件が異なります。 次の表は、これらの違いを示しています。CVal は CurrentValue を表し、MVal は MonitoredValue を表します。
型 | CurrentValue | MonitoredValue | CPU でのクロスプロセス共有をサポート | クロスアダプター共有をサポート | UM CPUVA CVal | KM CPUVA CVal | GPU VA CVal | CMPVA CVal | UM MVal | KM MVal | GPU VA MVal | CMPVA MVal | ユース ケース |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
D3DDDI_NATIVEFENCE_TYPE_DEFAULT | シスメム | シスメム | Yes | Yes | ReadOnly | 読み取り/書き込み | 読み取り/書き込み | 読み取り/書き込み | 該当なし | Write | ReadOnly (または読み取り/書き込み) | 読み取り/書き込み | CPU 割り込みが減ったアプリケーション フェンス。 CPU をウェイクアップせずに GPU ウェイターのブロックが解除される |
D3DDDI_NATIVEFENCE_TYPE_DEFAULT (最適化) | シスメム | Vram | Yes | Yes | ReadOnly | 読み取り/書き込み | 読み取り/書き込み | 読み取り/書き込み | 該当なし | Write | ReadOnly (または読み取り/書き込み) | 読み取り/書き込み | タイプ 0 と同じですが、MVal 読み取りは GPU に対してローカルなので PCI バス トラフィックが減少します。 GPU シグナル コマンドは、待機時間の短縮 (スループット++) により、より高速に完了します。 |
D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU | Vram | Vram | はい | いいえ | 該当なし | 該当なし | 読み取り/書き込み | 読み取り/書き込み | 該当なし | 該当なし | ReadOnly (または読み取り/書き込み) | 読み取り/書き込み | 同じ GPU 内でのコマンド バッファー レベル (アプリケーションが表示されない) 同期。 フェンス値への読み取り/書き込み (CVal) はローカルであるため、シグナル/ブロック解除操作は高速です。 |
D3DDDI_NATIVEFENCE_TYPE_DEFAULT
- Windows 11 バージョン 24H2 でサポートされます。
- このフェンスの種類では、既存のすべての D3DKMT 同期オブジェクト Wait/Signal from CPU/GPU 操作がサポートされます。
- このフェンスの種類の CurrentValue ストレージと MonitoredValue ストレージの両方が、システム メモリ セグメントに割り当てられます。
D3DDDI_NATIVEFENCE_TYPE_DEFAULT (最適化)
- この機能は現在、OS ではサポートされていません。
- VRAM で MonitoredValue ストレージを割り当てることができる最適化バージョンのD3DDDI_NATIVEFENCE_TYPE_DEFAULTにより、GPU エンジンからの MonitoredValue の読み取りが高速化されます。
- この最適化は UMD に公開されません。 代わりに、 Dxgkrnl と KMD は、VRAM に MonitoredValue ストレージを割り当てることで、既定のフェンスの種類を最適化できるかどうかを決定します。
- システムがローカル メモリ不足の場合、VRAM に割り当てられた MonitoredValue ストレージは引き続きシステム メモリに降格される可能性があります。
- OS でこのフェンスの種類がサポートされている場合は、DXGKARGCB_FEATURE_NATIVEFENCE_CAPS_1機能インターフェイス テーブルで SupportOptimizedDefaultFenceType を TRUE に設定します。 KMD では、ドライバーの初期化中に機能インターフェイス テーブルに対してクエリを実行して、この OS の機能を判断する必要があります。
D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU
- この機能は現在、OS ではサポートされていません。
- D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU フェンスでは、CPU 操作はサポートされていません。つまり、OS では、ユーザー モードで待機をキューに入れ、このフェンス オブジェクトにシグナルを送ることはできません。
- そのため、この型は、CPU 待機とシグナル セマンティクスをサポートする必要がある DX アプリケーション フェンスには使用できません。 このタイプは主に、GPU エンジン間の同期のために内部 UMD フェンスに使用されます。 この型を D3DKMT ネイティブ フェンス オブジェクトとして作成すると、 GpuView やデバッグなどのツールでこれらのフェンスを表示できます。
- このフェンスでサポートされるセグメントは、CPU に表示されないローカル メモリ セグメントである必要があります。
- ローカル メモリに割り当てられたストレージは、システムがローカル メモリ不足の場合でもシステム メモリに降格される可能性があります。
- OS でこのフェンスの種類がサポートされている場合は、DXGKARGCB_FEATURE_NATIVEFENCE_CAPS_1機能インターフェイス テーブルで SupportIntraGpuFenceType を TRUE に設定します。 KMD では、ドライバーの初期化中に機能インターフェイス テーブルに対してクエリを実行して、この OS の機能を判断する必要があります。
ネイティブ GPU フェンスの詳細については、「 ネイティブ GPU フェンス オブジェクト」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 11バージョン 24H2 |
Header | d3dkmthk.h |
こちらもご覧ください
D3DKMTOpenNativeFenceFromNTHandle