次の方法で共有


DXGKDDI_PREEMPTCOMMAND コールバック関数 (d3dkmddi.h)

DxgkDdiPreemptCommand 関数は、ハードウェア コマンド実行ユニットに以前に送信され、現在キューに入れられていたダイレクト メモリ アクセス (DMA) バッファーをプリエンプトします。

構文

DXGKDDI_PREEMPTCOMMAND DxgkddiPreemptcommand;

NTSTATUS DxgkddiPreemptcommand(
  [in] IN_CONST_HANDLE hAdapter,
  [in] IN_CONST_PDXGKARG_PREEMPTCOMMAND pPreemptCommand
)
{...}

パラメーター

[in] hAdapter

ディスプレイ アダプターに関連付けられているコンテキスト ブロックへのハンドル。 ディスプレイ ミニポート ドライバーは、DxgkDdiAddDevice 関数の出力パラメーター ミニポートDeviceContext の Microsoft DirectX グラフィックス カーネル サブシステムにこのハンドルを提供しました。

[in] pPreemptCommand

以前にハードウェア コマンド実行ユニットに送信された DMA バッファーをプリエンプトするために使用されるコマンドを記述する DXGKARG_PREEMPTCOMMAND 構造体へのポインター。

戻り値

正常に完了したときに STATUS_SUCCESS を返します。 ドライバーが代わりにエラー コードを返す場合は、オペレーティング システムによってシステムのバグチェックが発生します。 詳細については、次の「解説」セクションを参照してください。

備考

ドライバーが、送信されたすべての DMA バッファーの処理が既に完了していること、およびハードウェアが完了についてグラフィックス処理装置 (GPU) スケジューラに通知した場合--DMA バッファーを割り込む DxgkDdiPreemptCommand 関数が呼び出されたときに、 ドライバーは、PreemptionFenceId メンバーによって識別されるプリエンプション フェンスをハードウェアに送信する代わりに、次の操作 DXGKARG_PREEMPTCOMMAND を実行する必要があります。

  • IRQL を割り込みレベルに上げます。 たとえば、ドライバーは、DxgkCbSynchronizeExecution 関数を呼び出して、その DxgkDdiInterruptRoutine 関数と同期できます。
  • プリエンプション情報について GPU スケジューラに通知します。 ドライバーは、DxgkCbNotifyInterrupt 関数を直接呼び出すか、その DxgkDdiInterruptRoutine 関数を呼び出すことができます (たとえば、ドライバーが他の更新プログラムを実行する必要がある場合など)。

    GPU スケジューラは、タイムアウト検出と回復 (TDR) の動作のためにハードウェアが応答を停止したインスタンスを処理することに注意してください。

ドライバーからエラー コードが返された場合、Microsoft DirectX グラフィックス カーネル サブシステムによってシステムバグチェックが発生します。 クラッシュ ダンプ ファイルでは、次の 4 つのパラメーターを持つ BugCheck 0x119 メッセージによってエラーが示されます。
  1. 0x2
  2. 失敗したドライバー呼び出しから返された NTSTATUS エラー コード
  3. DXGKARG_PREEMPTCOMMAND 構造体へのポインター
  4. 内部スケジューラ データ構造へのポインター
DxgkDdiPreemptCommand IRQL = DISPATCH_LEVELで実行されるため、ページ不可にする必要があります

必要条件

要件 価値
サポートされる最小クライアント Windows Vista
ターゲット プラットフォーム デスクトップ
ヘッダー d3dkmddi.h
IRQL DISPATCH_LEVEL

関連項目

DXGKARG_PREEMPTCOMMAND

DxgkCbNotifyInterrupt する

DxgkCbSynchronizeExecution

DxgkDdiAddDevice

DxgkDdiInterruptRoutine