Bagikan melalui


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

Lihat juga

D3DKMT_CREATEALLOCATION