D3DKMTRender 関数 (d3dkmthk.h)
D3DKMTRender 関数は、現在のコマンド バッファーを Microsoft DirectX グラフィックス カーネル サブシステム (Dxgkrnl.sys) に送信します。
構文
NTSTATUS D3DKMTRender(
D3DKMT_RENDER *unnamedParam1
);
パラメーター
unnamedParam1
pData [in, out]
現在 のコマンド バッファーをグラフィックス カーネル サブシステムに送信するためのパラメーターを記述するD3DKMT_RENDER構造体へのポインター。
戻り値
D3DKMTRender は 、次のいずれかの値を返します。
リターン コード | 説明 |
---|---|
STATUS_SUCCESS | コマンド バッファーが正常に送信されました。 |
STATUS_DEVICE_REMOVED | グラフィックス アダプターが停止したか、表示コンテキストがリセットされました。 |
STATUS_INVALID_PARAMETER | パラメーターが検証され、正しくないと判断されました。 |
STATUS_NO_MEMORY | メモリ不足のため、D3DKMTRender を完了できませんでした。 |
STATUS_INVALID_HANDLE | OpenGL ICD によって、コマンド バッファーに無効なハンドルが検出されました。 |
STATUS_PRIVILEGED_INSTRUCTION | D3DKMTRender は、特権のない命令 (つまり、現在の CPU プロセスの特権を超えてメモリにアクセスする命令) を検出しました。 |
この関数は、他の NTSTATUS 値も 返す場合があります。
注釈
通常、コマンド バッファーには多くのグラフィックス コマンドが含まれます。
D3DKMTRender がSTATUS_GRAPHICS_ALLOCATION_INVALIDを返した場合、OpenGL ICD はプライマリ ハンドルを再度開くか再作成し、コマンド バッファー内のすべての参照を前のハンドルに置き換えてから、もう一度 D3DKMTRender を呼び出してバッファーを再送信する必要があります。
D3DKMTRender を呼び出した後、OpenGL ICD は、pData パラメーターによって指されるD3DKMT_RENDER構造体の pCommandBuffer メンバーと CommandBufferSize メンバーから、次の送信に使用する必要があるコマンド バッファーのベース アドレスとサイズを決定する必要があります。
保証された DMA バッファー コントラクト モードを使用するデバイスの場合 (このモードの詳細については、「 保証されたコントラクト DMA バッファー モデルの使用」を参照してください)、ディスプレイ ミニポート ドライバーが次の送信時にコマンド バッファーを変換するために使用できる DMA バッファーのサイズは、コマンド バッファー自体のサイズと同じです。 このようなデバイスの場合、OpenGL ICD は、D3DKMT_RENDER の AllocationListSize メンバーで返される値から、次の送信時にコマンド バッファーの変換中にディスプレイ ミニポート ドライバーで使用できる割り当てリストのサイズも決定 する必要があります。
保証された DMA バッファー コントラクトを使用しないデバイスの場合、OpenGL ICD は CommandBufferSize メンバーと AllocationListSize メンバーで返される情報を使用して、変換に使用できる次の DMA バッファーと割り当てリストのサイズを決定できます。 ただし、メモリ不足の条件下では、ディスプレイ ミニポート ドライバーに提供される実際の DMA バッファーと割り当てリストが、必要なよりも小さい場合があります。
OpenGL ICD で、コマンド バッファーフラッシュの大部分が、ドライバーがコマンド バッファーまたは割り当てリストの領域を使い切っているためであることが検出された場合、ドライバーはサイズ変更を要求できます。 コマンド バッファーのサイズを変更するために、ドライバーは D3DKMT_RENDER の Flags メンバーに ResizeCommandBuffer ビット フィールド フラグを設定し、要求されたサイズを D3DKMT_RENDER の CommandBufferSize メンバーに配置します。 同様に、割り当てリストのサイズを変更するために、ドライバーは D3DKMT_RENDER の Flags メンバーに ResizeAllocationList ビット フィールド フラグを設定し、要求された数の要素を D3DKMT_RENDER の AllocationListSize メンバーに配置します。
注意
ドライバーは、コマンド バッファーと割り当てリストの両方のサイズ変更を要求できますが、ビデオ メモリ マネージャーが準拠できない可能性があります。 したがって、D3DKMTRender の呼び出しが成功した場合、ドライバーは pCommandBuffer、CommandBufferSize、AllocationListSize メンバーで返される値を確認する必要があります。
ただし、 D3DKMTRender の呼び出しが失敗した場合、ドライバーはコマンド バッファー、割り当てリスト、またはその両方のサイズが変更されなかったと判断します。 そのため、ドライバーは pCommandBuffer、CommandBufferSize、および AllocationListSize メンバーで返される値が無効であるため、処理しないでください。
例
次のコード例では、OpenGL ICD で D3DKMTRender を使用して 3-D プリミティブをレンダリングする方法を示します。
HRESULT Render(D3DKMT_HANDLE hDevice, UINT CommandOffset, UINT CommandLength)
{
D3DKMT_RENDER RenderData;
memset(&RenderData, 0, sizeof(RenderData));
RenderData.hDevice = hDevice;
RenderData.CommandOffset = CommandOffset;
RenderData.CommandLength = CommandLength;
if (NT_SUCCESS((*pfnKTRender)(&RenderData))) {
return S_OK;
}
return E_FAIL;
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista |
対象プラットフォーム | ユニバーサル |
Header | d3dkmthk.h (D3dkmthk.h を含む) |
Library | Gdi32.lib |
[DLL] | Gdi32.dll |