PFND3DDDI_CREATERESOURCE2 コールバック関数 (d3dumddi.h)
リソースを作成します。 Windows ディスプレイ ドライバー モデル (WDDM) 1.2 以降のユーザー モード ディスプレイ ドライバーによって実装されます。
構文
PFND3DDDI_CREATERESOURCE2 Pfnd3dddiCreateresource2;
HRESULT Pfnd3dddiCreateresource2(
[in] HANDLE hDevice,
D3DDDIARG_CREATERESOURCE2 *unnamedParam2
)
{...}
パラメーター
[in] hDevice
リソースの作成に使用されるディスプレイ デバイス (グラフィックス コンテキスト) へのハンドル。
unnamedParam2
pResource2 [in, out]
作成されるリソースを記述する D3DDDIARG_CREATERESOURCE2 構造体へのポインター。
戻り値
S_OK または適切なエラー結果を返します。 WDDM 1.3 以降の Direct3D レベル 9 ドライバーは、次のエラー コードを返す必要があります。
リターン コード | 説明 |
---|---|
E_INVALIDARG | D3DDDIARG_CREATERESOURCE2.Flagsmember には CaptureBuffer フラグ値が設定されており、リソースがドライバーでサポートできる値を超えています。 |
備考
CreateResource2 呼び出しには、サーフェスの一覧を含めることができます。 pResource2 パラメーターで指定された D3DDDIARG_CREATERESOURCE2 構造体の SurfCount メンバーは、作成するサーフェスの数 (MIP マップ レベルを含む) を指定します。 たとえば、256 x 256 x 9 のテクスチャ MIP マップ リソースには、SurfCount メンバーと MIP マップ レベルの数の両方が 9 に設定されている 9 つのサーフェスの一覧が含まれています。 9 つの MIP マップ レベルを含むキューブ マップでは、MIP マップ レベルの数を 9 に設定し、SurfCount 54 に設定する必要があります。 3 サーフェス スワップ チェーンでは、SurfCount を 3 に設定し、MIP マップ レベルの数を 0 に設定する必要があります。 MIP マップ レベルの数は、SurfCountの値以下であることに注意してください。
CreateResource2 呼び出しに応答して、ユーザー モードディスプレイ ドライバーは、pfnAllocateCb 関数を呼び出して、1 つ以上のメモリ割り当てを作成できます。 ユーザー モード ディスプレイ ドライバーは、サーフェスごとに複数の割り当てを作成する必要があるか、すべてのサーフェスに対して 1 つの割り当てを作成するか、サーフェスごとに 1 つの割り当てを作成する必要があるかを判断する必要があります。 割り当ての詳細については、「ビデオ メモリ管理と GPU スケジューリング」を参照してください。
リソースは、複数のデバイス (hDevice) とプロセスで共有できます。 ランタイムは、D3DDDIARG_CREATERESOURCE2の Flags メンバーで SharedResource ビット フィールド フラグを設定することによって、リソースを共有することを指定します。 このビット フィールド フラグが設定されている場合、ユーザー モード ディスプレイ ドライバーは、共有リソースに対する次の制限に従う必要があります。
- ユーザー モード ディスプレイ ドライバーは、pfnAllocateCb を呼び出し、pfnDeallocateCb 関数をそれぞれ 1 回だけ実行できます。
- ユーザー モードのディスプレイ ドライバーは、リソースが最初に作成された後にリソースの追加の割り当てを作成することはできません。同様に、リソース自体が破棄された時点でのみリソースの割り当てを破棄できます。
- ユーザー モード ディスプレイ ドライバーの DestroyResource 関数が、ドライバーの CreateResource2 または OpenResource 関数の呼び出しによって作成または開かれた共有リソースに対して呼び出 場合、 D3DDDICB_DEALLOCATE 構造体の hResource メンバーを NULL 以外に設定し、pfnDeallocateCb 関数の呼び出しで、D3DDDICB_DEALLOCATE の NumAllocations メンバーを 0 に設定する必要があります。リソースを破棄または閉じます。 つまり、共有リソースに関連付けられている割り当てを個別に破棄したり閉じたりすることはできません。pfnDeallocateCb をする 1 回の呼び出しで、リソースを破棄またはアトミックに閉じる必要があります。
- 割り当ての数は、リソースの種類に対して一貫している必要があります (つまり、同じリソースの種類を作成する別のプロセスでは、同じ数と種類の割り当てを生成する必要があります)。 さらに、これらのリソースの名前変更は許可されません。
- Flags メンバーの未定義ビットが予約されています。
- Primary ビット フィールド フラグが Flagsで設定されていない場合、RefreshRate と Output メンバーが予約されます。
- RenderTarget、DecodeRenderTarget、または VideoProcessRenderTarget ビット フィールド フラグが Flagsで設定されていない場合は、MultisampleType および multisampleQuality メンバー 予約されます。
- VertexBuffer ビット フィールド フラグが Flagsで設定されていない場合、Fvf メンバーが予約されます。
- テクスチャ、CubeMap、および Volume ビット フィールド フラグが Flagsで設定されていない場合、MipLevels メンバーが予約されます。
システム メモリ リソースの場合、ディスプレイ ミニポート ドライバーは、システム メモリがグラフィックス処理装置 (GPU) による直接アクセス用に適切に配置されている場合、システム メモリの周囲に割り当てをラップすることを選択できます。 ディスプレイ ミニポート ドライバーは、DxgkDdiCreateAllocation 関数を使用して割り当てを作成するときに、DXGK_ALLOCATIONINFO 構造体の フラグ メンバーに ExistingSysMem フラグを設定することで、システム メモリの周囲に割り当てをラップします。 ディスプレイ ミニポート ドライバーがシステム メモリの周囲に割り当てをラップできない場合、または折り返しが失敗した場合でも、ドライバーはリソースの作成に成功し、CPU を使用してリソースにアクセスする必要があります。
ランタイムが頂点バッファーまたはインデックス バッファーの作成を要求し、メモリ不足以外の理由でユーザー モードディスプレイ ドライバーがバッファーを作成できない場合 (ハードウェアサポートの不足など)、ドライバーは D3DERR_NOTAVAILABLEで失敗する必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 |
サポートされる最小サーバー | Windows Server 2012 |
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | d3dumddi.h (D3dumddi.h を含む) |
関連項目
Blt を する
DxgkDdiCreateAllocation の
SetStreamSource の
SetTexture の
pfnAllocateCb の
pfnDeallocateCb の