次の方法で共有


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 関数の MiniportDeviceContext 出力パラメーターで Microsoft DirectX グラフィックス カーネル サブシステムにこのハンドルを提供しました。

[in] pPreemptCommand

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

戻り値

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

注釈

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

  • 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
対象プラットフォーム デスクトップ
Header d3dkmddi.h
IRQL DISPATCH_LEVEL

こちらもご覧ください

DXGKARG_PREEMPTCOMMAND

DxgkCbNotifyInterrupt

DxgkCbSynchronizeExecution

DxgkDdiAddDevice

DxgkDdiInterruptRoutine