次の方法で共有


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

重要

一部の情報はプレリリース製品に関連しており、商用リリース前に大幅に変更される可能性があります。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。

DxgkDdiNotifyWorkSubmission 関数は、UMD が新しい作業を送信したことを KMD に通知します。

構文

DXGKDDI_NOTIFYWORKSUBMISSION DxgkddiNotifyworksubmission;

NTSTATUS DxgkddiNotifyworksubmission(
  INOUT_PDXGKARG_NOTIFYWORKSUBMISSION pArgs
)
{...}

パラメーター

pArgs

[入力]作業が送信されたハードウェア キューを識別する DXGKARG_NOTIFYWORKSUBMISSION 構造体へのポインター。

戻り値

DxgkDdiNotifyWorkSubmission は成功し、STATUS_SUCCESSを返す必要があります。

注釈

ユーザー モードの作業送信モデルでは、KMD は作業の提出に関与しないため、通常、ハードウェア キューで新しい作業が送信された場合は認識されません。 この要因は、待ち時間の短い作業の提出パスのメイン動機です。 ただし、ハードウェア キューで作業が送信されるたびに KMD に通知する必要がある特定のニッチなシナリオとハードウェアの制限があります。 たとえば、GPU ハードウェア スケジューラでは、リアルタイム コンテキストが作業を送信するときに、ハードウェアランリストを通常からリアルタイムに切り替えるために KMD が必要です。 KMD が作業の送信に関与していない場合は、ランリスト スイッチをすぐにトリガーできないため、リアルタイムの作業の実行が遅れます。

この問題を解決するために、KMD はドアベルの 作成時にドアベルの接続状態をD3DDDI_DOORBELL_STATUS_CONNECTED_NOTIFYとして指定できます。 UMD は、このドアベルの状態を確認するたびに、新しいコマンドを作成してドアベルを呼び出した後、 D3DKMTNotifyWorkSubmission を使用してカーネルを呼び出す作業送信ワークフローを調整します。 Dxgkrnl はDxgkDdiNotifyWorkSubmission 経由で KMD にこの呼び出しを転送します。

DxgkDdiNotifyWorkSubmission は、UMD から Dxgkrnl から KMD への単純な ping であり、新しい作業が特定のハードウェア キューに送信されたことを後者に通知するため、KMD はランリストをリアルタイムに切り替えるなどの特定のアクションを開始できます。

KMD では、ドアベルの作成後に動的に通知を要求することもできます。 KMD がこのハードウェア キューでの作業の送信を通知する必要がある条件を検出した場合は、まず状態がD3DDDI_DOORBELL_STATUS_DISCONNECTED_RETRYされた DxgkCbDisconnectDoorbell を呼び出してドアベルを切断できます。 後で UMD がドアベルの再接続を試みると、KMD は状態D3DDDI_DOORBELL_STATUS_CONNECTED_NOTIFYとの接続を確立できます。

ドライバーは、非常に具体的で頻度の低いシナリオでこのメカニズムを使用する必要があります。これは、すべての作業の提出に UMD から KMD へのラウンド トリップが含まれるためであり、広範なシナリオで使用される場合は、待ち時間の短いユーザー モード送信モデルの目的を打ち破ります。

詳細については、「 ユーザー モードの作業の送信」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 11バージョン 24H2 (WDDM 3.2)
Header d3dkmddi.h
IRQL PASSIVE_LEVEL

こちらもご覧ください

DXGKARG_NOTIFYWORKSUBMISSION

**DxgkDdiCreateDoorbell

DxgkCbDisconnectDoorbell