D3DKMTCreateAllocation2 関数 (d3dkmthk.h)
D3DKMTCreateAllocation2 関数は、システムまたはビデオ メモリの割り当てを作成または追加します。
構文
NTSTATUS D3DKMTCreateAllocation2(
D3DKMT_CREATEALLOCATION *unnamedParam1
);
パラメーター
unnamedParam1
[入力、出力] pData: 割り当てを作成するための情報を含む D3DKMT_CREATEALLOCATION 構造体へのポインター。
戻り値
操作が成功した場合、D3DKMTCreateAllocation2 はSTATUS_SUCCESSを返します。 それ以外の場合は、次のいずれかの値などの NTSTATUS コードを返す場合があります。
リターン コード | 説明 |
---|---|
STATUS_DEVICE_REMOVED | グラフィックス アダプターが停止したか、ディスプレイ デバイスがリセットされました。 |
STATUS_INVALID_PARAMETER | パラメーターが検証され、正しくないと判断されました。 |
STATUS_NO_MEMORY | システム メモリが不足しているため、このルーチンを完了できませんでした。 |
STATUS_NO_VIDEO_MEMORY | ビデオ メモリが不足しているため、このルーチンを完了できませんでした。 ビデオ メモリ マネージャーは、ビデオ メモリの仮想化を試みます。 ただし、仮想化が失敗した場合 (仮想アドレス空間が不足した場合など)、メモリ マネージャーはこのエラー コードを返す可能性があります。 |
注釈
ユーザー モードのグラフィックス クライアントは 、D3DKMTCreateAllocation2 を呼び出して割り当てとリソースを作成できます。 割り当ては、リソースに関連付けるか、スタンドアロンにすることができます。
D3DKMTCreateAllocation2 を呼び出して、いつでもリソースに割り当てを追加することもできます。 唯一の制限は、すべての共有割り当てをリソースに関連付ける必要があり、追加の割り当てを既存の共有リソースに追加できないことです。
例
リソースに関連付けられていないスタンドアロン割り当てをビデオ メモリに作成する
次のコード例は、ユーザー モードのグラフィックス クライアントが D3DKMTCreateAllocation2 を使用して、リソースに関連付けられていないスタンドアロン割り当てをビデオ メモリに作成する方法を示しています。
D3DKMT_HANDLE CreateStandAloneAllocation(D3DKMT_HANDLE hDevice, VOID* pPrivateAllocationInfo, UINT Size)
{
D3DKMT_CREATEALLOCATION CreateAllocation;
D3DDDI_ALLOCATIONINFO2 AllocationInfo;
memset(&CreateAllocation, 0, sizeof(CreateAllocation));
CreateAllocation.hDevice = hDevice;
CreateAllocation.NumAllocations = 1;
CreateAllocation.pAllocationInfo2 = &AllocationInfo;
AllocationInfo.hAllocation = NULL;
AllocationInfo.pSystemMem = NULL; // Vidmem allocation
AllocationInfo.pPrivateDriverData = pPrivateAllocationInfo; // Contains format, size, and so on.
AllocationInfo.PrivateDriverDataSize = Size;
if (NT_SUCCESS((*pfnKTCreateAllocation)(&CreateAllocation))) {
return AllocationInfo.hAllocation;
}
return 0;
}
1 つのシステム メモリ割り当てでリソースを作成する
次のコード例は、ユーザー モードのグラフィックス クライアントが D3DKMTCreateAllocation2 を使用して、単一のシステム メモリ割り当てでリソースを作成する方法を示しています。
HRESULT CreateSysmemResource(D3DKMT_HANDLE hDevice,
UINT AllocationSize,
VOID* pResourceData,
UINT ResourceDataSize,
VOID* pAllocationData,
UINT AllocationDataSize,
D3DKMT_HANDLE* phResource,
D3DKMT_HANDLE* phAllocation)
{
D3DKMT_CREATEALLOCATION CreateAllocation;
D3DDDI_ALLOCATIONINFO2 AllocationInfo;
VOID* pSysMem;
*phResource = NULL;
*phAllocation = NULL;
// For a sysmem allocation, preallocate the memory.
pSysMem = MemAlloc(AllocationSize);
if (pSysMem == NULL) {
return E_OUTOFMEMORY;
}
memset(&CreateAllocation, 0, sizeof(CreateAllocation));
CreateAllocation.hDevice = hDevice;
CreateAllocation.Flags.CreateResource = TRUE;
CreateAllocation.pPrivateDriverData = pResourceData;
CreateAllocation.PrivateDriverDataSize = ResourceDataSize;
CreateAllocation.NumAllocations = 1;
CreateAllocation.pAllocationInfo = &AllocationInfo;
AllocationInfo.hAllocation = NULL;
AllocationInfo.pSystemMem = pSysMem;
AllocationInfo.pPrivateDriverData = pAllocationData;
AllocationInfo.PrivateDriverDataSize = AllocationDataSize;
if (NT_SUCCESS((*pfnKTCreateAllocation)(&CreateAllocation))) {
*phResource = CreateAllocation.hResource;
*phAllocation = AllocationInfo.hAllocation;
return S_OK;
}
MemFree(pSysMem);
return E_FAIL;
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 7 |
対象プラットフォーム | ユニバーサル |
Header | d3dkmthk.h (D3dkmthk.h を含む) |
Library | Gdi32.lib |
[DLL] | Gdi32.dll |