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 256x9 テクスチャ 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 ビットフィールド フラグを設定することで、リソースを共有することを指定します。 このビット フィールド フラグが設定されている場合、ユーザー モード ディスプレイ ドライバーは、共有リソースに対する次の制限に従う必要があります。
- ユーザー モードのディスプレイ ドライバーは、それぞれ 1 回だけ pfnAllocateCb 関数と pfnDeallocateCb 関数を 呼び出すことができます。
- ユーザー モードのディスプレイ ドライバーは、リソースが最初に作成された後にリソースの追加の割り当てを作成することはできません。同様に、リソース自体が破棄された時点でのみリソース割り当てを破棄できます。
- ドライバーの CreateResource2 または OpenResource 関数の呼び出しによって作成または開かれた共有リソースに対してユーザー モード ディスプレイ ドライバーの DestroyResource 関数が呼び出されると、ドライバーは、リソースを破棄または閉じるには、D3DDDICB_DEALLOCATE構造体の hResource メンバーを null 以外に設定し、D3DDDICB_DEALLOCATEのNumAllocations メンバーを 0 に設定する必要があります。 つまり、共有リソースに関連付けられている割り当てを個別に破棄したり閉じたりすることはできません。リソースは、 pfnDeallocateCb の 1 回の呼び出しで破棄またはアトミックに閉じる必要があります。
- 割り当ての数は、リソースの種類に対して一貫している必要があります (つまり、同じリソースの種類を作成する別のプロセスでは、同じ数と割り当ての種類を生成する必要があります)。 さらに、これらのリソースの名前変更は許可されません。
- Flags メンバーの未定義のビットは予約されています。
- [フラグ] でプライマリ ビット フィールド フラグが設定されていない場合は、RefreshRate メンバーと Output メンバーが予約されます。
- RenderTarget、DecodeRenderTarget、または VideoProcessRenderTarget ビット フィールド フラグが Flags で設定されていない場合は、MultisampleType メンバーと MultisampleQuality メンバーが予約されます。
- VertexBuffer ビット フィールド フラグが Flags で設定されていない場合、Fvf メンバーは予約されています。
- Texture、CubeMap、Volume のビット フィールド フラグが Flags で設定されていない場合、MipLevels メンバーは予約されています。
システム メモリ リソースの場合、ディスプレイ ミニポート ドライバーは、システム メモリがグラフィックス処理装置 (GPU) による直接アクセス用に適切に配置されている場合に、システム メモリの周囲に割り当てをラップすることを選択できます。 ディスプレイ ミニポート ドライバーは、DxgkDdiCreateAllocation 関数を使用して割り当てを作成するときに、DXGK_ALLOCATIONINFO構造体の Flags メンバーに ExistingSysMem フラグを設定することで、システム メモリの周囲に割り当てをラップします。 ディスプレイ ミニポート ドライバーがシステム メモリの周囲に割り当てをラップできない場合、またはラップに失敗した場合でも、ドライバーはリソースの作成に成功し、CPU を使用してリソースにアクセスする必要があります。
ランタイムが頂点バッファーまたはインデックス バッファーの作成を要求し、メモリ不足以外の理由でユーザー モード ディスプレイ ドライバーがバッファーを作成できない場合 (ハードウェアサポートの不足など)、ドライバーは D3DERR_NOTAVAILABLEで失敗する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8 |
サポートされている最小のサーバー | Windows Server 2012 |
対象プラットフォーム | デスクトップ |
Header | d3dumddi.h (D3dumddi.h を含む) |