D3DKMT_CREATE_DOORBELL 構造体 (d3dkmthk.h)
重要
一部の情報はプレリリース製品に関連しており、市販される前に大幅に変更される可能性があります。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
D3DKMT_CREATE_DOORBELL構造体には、D3DKMTCreateDoorbell のパラメーターが含まれています。
構文
typedef struct _D3DKMT_CREATE_DOORBELL {
D3DKMT_HANDLE hHwQueue;
D3DKMT_HANDLE hRingBuffer;
D3DKMT_HANDLE hRingBufferControl;
D3DKMT_CREATE_DOORBELL_FLAGS Flags;
UINT PrivateDriverDataSize;
VOID *PrivateDriverData;
VOID *DoorbellCPUVirtualAddress;
VOID *DoorbellSecondaryCPUVirtualAddress;
VOID *DoorbellStatusCPUVirtualAddress;
} D3DKMT_CREATE_DOORBELL;
メンバー
hHwQueue
[入力] D3DKMTCreateHwQueue の以前の呼び出しで作成されたハードウェア キュー オブジェクトの UMD ハンドル。 このオブジェクトは、ドアベルを割り当てる必要があるハードウェア キューを識別します。
hRingBuffer
[入力]UMD が 以前に作成したリング バッファー割り当てへの UMD ハンドル。 割り当ては GPU に表示され、既に常駐している必要があります。 Dxgkrnl は 、対応する DxgkDdiCreateDoorbell 呼び出しで、この割り当ての GPU 仮想アドレスとサイズを KMD に渡します。 ResizeRingBufferOperation フラグは、UMD から KMD へのヒントであり、新しいサイズ変更されたリング バッファーを使用して、このハードウェア キューに対してドアベルが再作成されます。
hRingBufferControl
[入力/省略可能]UMD によって 以前に作成された リング バッファー コントロールの割り当てに対する UMD ハンドル。 UMD と KMD では、この割り当てを制御領域として使用して、必要に応じてリング バッファーの読み取り/書き込みポインターの場所を格納できます。 割り当ては GPU に表示され、既に常駐している必要があります。 Dxgkrnl は 、対応する DxgkDdiCreateDoorbell 呼び出しで、この割り当ての GPU 仮想アドレスとサイズを KMD に渡します。
Flags
[入力/省略可能]ドアベル作成フラグ を指定するD3DKMT_CREATE_DOORBELL_FLAGS 値のビット フィールド。
PrivateDriverDataSize
[入力] pPrivateDriverData が指すプライベート ドライバー データのサイズ (バイト単位)。
PrivateDriverData
[入力/出力]ドライバーにプライベートなバッファーへのポインター。 このバッファーのサイズは 、PrivateDriverDataSize によって指定されます。
DoorbellCPUVirtualAddress
[out]このドアベル用に OS によって予約されている CPU 仮想アドレス (両方とも読み取り/書き込み) へのポインター。 UMD はこのアドレスに特定の値を書き込み、実質的に "ドアベルを鳴らします" して、ハードウェア キューでの新しい作業の送信を GPU スケジューラに通知します。 基になる物理的なドアベルが切断された場合でも、このアドレスはドアベルの有効期間にわたって一定のままです。 UMD は常にこのアドレスを使用して、このドアベルに書き込み/読み取りを行う必要があります。
DoorbellSecondaryCPUVirtualAddress
[out/optional]このドアベル用に OS によって予約されているセカンダリ CPU 仮想アドレス (両方とも読み取り/書き込み) へのポインター。
セカンダリ ドアベルの場所を実装するハードウェアでは、UMD によって RequireSecondaryCpuVA フラグが設定されます。 このようなデバイスの場合、OS はこのドアベル用に別の CPU 仮想アドレスを予約します。 ドアベルの有効期間中、基になる物理的なドアベルが切断された場合でも、このアドレスは一定のままになります。
DoorbellStatusCPUVirtualAddress
[out]ドアベルの状態の CPU 仮想アドレスへのポインター。 このアドレスの値は、このハードウェア キューに割り当てられているドアベルが現在接続されているかどうかを UMD に示します。 UMD がキューに新しい作業を送信し、ドアベルを呼び出すたびに、この値をチェックして、ドアベル リングが成功したかどうかを判断する必要があります。 リングに失敗した場合、UMD は D3DKMTConnectDoorbell を呼び出してドアベルを再接続してから、もう一度作業を送信する必要があります。
OS は、この 64 ビットのドアベル状態メモリを割り当てて書き込み、それをプロセスのアドレス空間にマップし、読み取り元の UMD にユーザー モードの CPU 仮想アドレスを提供します。 そのため、UMD は、このアドレスに格納されている 64 ビット値を読み取って、ドアベルの状態を取得する必要があります。 このアドレスの値には、D3DDDI_DOORBELL_STATUS列挙値のいずれかを指定できます。
値 | 意味 |
---|---|
D3DDDI_DOORBELL_STATUS_CONNECTED | ドアベルは接続され、仕事の提出の準備ができています。 |
D3DDDI_DOORBELL_STATUS_CONNECTED_NOTIFY | ドアベルは接続されています。ただし、新しい作業の送信とドアベル リングのたびに、UMD は D3DKMTNotifyWorkSubmission を呼び出して KMD に通知する必要があります。 |
D3DDDI_DOORBELL_STATUS_DISCONNECTED_RETRY | 現時点ではドアベルを接続できませんが、UMD は接続を再試行する必要があります。 |
D3DDDI_DOORBELL_STATUS_DISCONNECTED_ABORT | ドアベルは接続されず、UMD はこのハードウェア キューを使用して作業の送信を行うことはできません。 このエラーは、通常、GPU リセットや停止アダプターなどの回復不可能なシナリオを意味します。 |
基になる物理的なドアベルが切断された場合でも、このアドレスはドアベルの有効期間にわたって一定のままです。 UMD は常にこのアドレスを使用してドアベルの状態を読み取る必要があります。
OS のみがに書き込み、この状態メモリを更新します。
- DxgkDdiConnectDoorbell から正常に戻った場合、OS は状態をD3DDDI_DOORBELL_STATUS_CONNECTEDとして書き込みます。
- OS は、ハードウェア キューの中断または GPU の電源切断の一環としてドアベルを切断した場合、KMD の DxgkDdiDisconnectDoorbell を呼び出し、状態をD3DDDI_DOORBELL_STATUS_DISCONNECTED_RETRYとして書き込みます。
- KMD が何らかの理由でドアベルを切断する場合は、 DxgkDisconnectDoorbellCB コールバックを呼び出して OS に通知します。 KMD は、OS がこの状態ページに書き込む状態としてD3DDDI_DOORBELL_STATUSを提供します。
- GPU の紛失または停止のシナリオでは、OS は状態としてD3DDDI_DOORBELL_STATUS_DISCONNECTED_ABORTを書き込みます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | WIN11_FUTURE |
Header | d3dkmthk.h |
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示