D3DKMTPresent 関数 (d3dkmthk.h)
D3DKMTPresent 関数は、Microsoft DirectX グラフィックス カーネル サブシステム (Dxgkrnl.sys) に現在のコマンドを送信します。
構文
NTSTATUS D3DKMTPresent(
[in] D3DKMT_PRESENT *unnamedParam1
);
パラメーター
[in] unnamedParam1
pData: 提示するパラメーターを記述する D3DKMT_PRESENT 構造体へのポインター。
戻り値
D3DKMTPresent は、次のいずれかの値など、NTSTATUS 値を返します。
リターン コード | 説明 |
---|---|
STATUS_SUCCESS | 現在は正常に実行されました。 |
STATUS_DEVICE_REMOVED | グラフィックス アダプターが停止したか、表示コンテキストがリセットされました。 |
STATUS_INVALID_PARAMETER | パラメーターが検証され、正しくないと判断されました。 |
STATUS_NO_MEMORY | メモリ不足のため、D3DKMTPresent を完了できませんでした。 |
STATUS_GRAPHICS_ALLOCATION_INVALID | 表示モードの変更により、プライマリ サーフェス ハンドルが無効になりました。 OpenGL インストール可能クライアント ドライバー (ICD) がこのエラー コードを受け取った場合は、プライマリ ハンドルを再度開くか再作成し、コマンド バッファー内のすべての参照を新しいハンドルで古いハンドルに置き換えてから、バッファーを再送信する必要があります。 |
STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE | D3DKMT_PRESENT の hContext メンバーが指定するレンダリング デバイス コンテキストでエラー が 発生しました。 |
注意
STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE エラー コードは、タイムアウト検出および回復 (TDR) プロセスの開始、または GPU が応答を停止したことを示していません。 たとえば、DirectX グラフィックス カーネル サブシステムは、ディスプレイ ミニポート ドライバーがこのデバイスから送信された DMA バッファーでエラーが発生したことを示した場合、または DMA バッファーを分割した後でも DMA バッファーに必要なすべての割り当てをビデオ メモリ マネージャーがページングできなかった場合に、デバイスをエラー状態にします。 デバイスがエラー状態になると、それ以上操作を実行できず、破棄して再作成する必要があります。 ICD は D3DKMTGetDeviceState 関数を呼び出して、エラーのより正確な理由を判断できます。
注釈
D3DKMTPresent 関数は、パラメーター値の組み合わせ (つまり、pData が指すD3DKMT_PRESENT構造体のメンバーの値) に応じて、STATUS_INVALID_PARAMETERを返す場合があります。 次の一覧では、 D3DKMTPresent が PARAMETER STATUS_INVALID返される可能性があるパラメーター値の最も一般的な組み合わせについて説明します。
hDestination メンバーは NULL 以外であり、次の条件の少なくとも 1 つが true です。
- pSrcSubRects メンバーは NULL です。
- SubRectCnt メンバーは 0 です。
- Flags メンバーの Blt ビット フィールド フラグが設定されていません。
- Flags の SrcRectValid ビット フィールド フラグが設定されていません。
- Flags の ColorFill ビット フィールド フラグが設定されています。
- Flags の Flip、FlipDoNotFlip、FlipDoNotWait、または FlipRestart ビット フィールド フラグが設定されています。
- Flags の SrcColorKey または DstColorKey ビット フィールド フラグが設定されています。
- hSource メンバーは hDestination と同じです。
- ソースと宛先はプライマリ サーフェスではありません。
Flags の Flip ビット フィールド フラグが設定され、次の条件のうち少なくとも 1 つが true になります。
- Flags の ColorFill ビット フィールド フラグが設定されています。
- Flags の Blt ビット フィールド フラグが設定されています。
- Flags の SrcColorKey または DstColorKey ビット フィールド フラグが設定されています。
- Flags の SrcRectValid または DstRectValid ビット フィールド フラグが設定されています。
- Flags の [ビット フィールドの回転] フラグが設定されています。
- Flagsの RestrictVidPnSource ビット フィールド フラグが設定されています。
- ソースはプライマリ サーフェスではありません。
- ディスプレイ ミニポート ドライバーは、 FlipInterval メンバーが指定する反転間隔をサポートしていません。
- D3DKMTSetDisplayMode 関数は以前に呼び出されませんでした。
Flags の ColorFill ビット フィールド フラグが設定され、次のいずれかの条件が満たされます。
- pSrcSubRects が NULL です。
- SubRectCnt は 0 です。
- Flags の Blt ビット フィールド フラグが設定されています。
- Flags の Flip、FlipDoNotFlip、FlipDoNotWait、または FlipRestart ビット フィールド フラグが設定されています。
- Flags の SrcColorKey または DstColorKey ビット フィールド フラグが設定されています。
- Flags の SrcRectValid ビット フィールド フラグが設定されています。
Flags の Blt ビット フィールド フラグが設定され、次のいずれかの条件が満たされます。
- pSrcSubRects が NULL です。
- SubRectCnt は 0 です。
- Flags の ColorFill ビット フィールド フラグが設定されています。
- Flags の Flip、FlipDoNotFlip、FlipDoNotWait、または FlipRestart ビット フィールド フラグが設定されています。
Blit スタイルの D3DKMTPresent を呼び出すユーザー モードのグラフィックス ドライバーで、 Blt ビット フィールド フラグが 設定されている Flags が設定されている場合は、提示元のコンテキストに以前に送信されたすべての作業が完全にドレイン可能になるように特別な注意を払う必要があります。 これを行わないと、アプリケーション自体がデッドロックしたり、コーナーケースで現在のユーザー デスクトップがデッドロックしたりする可能性があります。 対応するシグナルが既に GPU スケジューラ データベースにキューに入れられ、そのシグナル自体が別の不可解な待機の背後にない GPU 同期オブジェクトでの待機のみが含まれている場合、コンテキストは完全にドレイン可能です。 つまり、システム内のすべてのプロセスのユーザー空間が D3DKMTPresent の呼び出しの直後に一時停止された場合、GPU スケジューラに既にキューに置かれた依存レンダリング チェーンのレンダリングが完了すると、待機は満たされます。 ドライバーは、GPU 待機に依存するコンテキストに存在する blit を呼び出す必要はありません。これは現在満たされておらず、このプロセスまたは別のプロセスから発生した後の操作によって満たされることが想定されています。
例
次のコード例は、OpenGL ICD で D3DKMTPresent を使用してデータを表示する方法を示しています。
HRESULT Present(D3DKMT_HANDLE hDevice,
HWND hWnd,
RECT* pSrcRect,
RECT* pDstRect)
{
D3DKMT_PRESENT PresentData = {0};
PresentData.hDevice = hDevice;
PresentData.Flags.Blt =
PresentData.Flags.DstRectValid =
PresentData.Flags.SrcRectValid = TRUE;
PresentData.hWindow = hWnd;
PresentData.DstRect = *pDstRect;
PresentData.SrcRect = *pSrcRect;
PresentData.SubRectCnt = 1;
PresentData.pSrcSubRects = pSrcRect;
if (NT_SUCCESS((*pfnKTPresent)(&PresentData))) {
return S_OK;
}
return E_FAIL;
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista |
対象プラットフォーム | ユニバーサル |
Header | d3dkmthk.h (D3dkmthk.h を含む) |
Library | Gdi32.lib |
[DLL] | Gdi32.dll |