Fungsi D3DKMTCreateAllocation2 (d3dkmthk.h)
Fungsi D3DKMTCreateAllocation2 membuat atau menambahkan alokasi memori sistem atau video.
Sintaks
NTSTATUS D3DKMTCreateAllocation2(
D3DKMT_CREATEALLOCATION *unnamedParam1
);
Parameter
unnamedParam1
[in, out] pData: Penunjuk ke struktur D3DKMT_CREATEALLOCATION yang berisi informasi untuk membuat alokasi.
Nilai kembali
D3DKMTCreateAllocation2 mengembalikan STATUS_SUCCESS jika operasi berhasil. Jika tidak, ini mungkin mengembalikan kode NTSTATUS seperti salah satu nilai berikut:
Menampilkan kode | Deskripsi |
---|---|
STATUS_DEVICE_REMOVED | Adaptor grafis dihentikan atau perangkat tampilan direset. |
STATUS_INVALID_PARAMETER | Parameter divalidasi dan ditentukan salah. |
STATUS_NO_MEMORY | Rutinitas ini tidak dapat diselesaikan karena memori sistem tidak mencukuum. |
STATUS_NO_VIDEO_MEMORY | Rutinitas ini tidak dapat diselesaikan karena memori video tidak mencukup. Manajer memori video mencoba memvirtualisasi memori video. Namun, jika virtualisasi gagal (seperti ketika ruang alamat virtual habis), manajer memori mungkin mengembalikan kode kesalahan ini. |
Keterangan
Klien grafis mode pengguna dapat memanggil D3DKMTCreateAllocation2 untuk membuat alokasi dan sumber daya. Alokasi dapat dikaitkan dengan sumber daya atau dapat berdiri sendiri.
D3DKMTCreateAllocation2 juga dapat dipanggil untuk menambahkan alokasi tambahan ke sumber daya kapan saja. Satu-satunya batasan adalah bahwa semua alokasi bersama harus dikaitkan dengan sumber daya dan alokasi tambahan tidak dapat ditambahkan ke sumber daya bersama yang ada.
Contoh
Membuat alokasi mandiri dalam memori video yang tidak terkait dengan sumber daya
Contoh kode berikut menunjukkan bagaimana klien grafis mode pengguna dapat menggunakan D3DKMTCreateAllocation2 untuk membuat alokasi mandiri dalam memori video yang tidak terkait dengan sumber daya.
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;
}
Membuat sumber daya dengan alokasi memori sistem tunggal
Contoh kode berikut menunjukkan bagaimana klien grafis mode pengguna dapat menggunakan D3DKMTCreateAllocation2 untuk membuat sumber daya dengan alokasi memori sistem tunggal.
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;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 7 |
Target Platform | Universal |
Header | d3dkmthk.h (termasuk D3dkmthk.h) |
Pustaka | Gdi32.lib |
DLL | Gdi32.dll |