Bagikan melalui


PFND3DKMT_CREATEALLOCATION fungsi panggilan balik (d3dkmthk.h)

Fungsi D3DKMTCreateAllocation membuat alokasi memori sistem atau video.

Sintaks

PFND3DKMT_CREATEALLOCATION Pfnd3dkmtCreateallocation;

NTSTATUS Pfnd3dkmtCreateallocation(
  D3DKMT_CREATEALLOCATION *unnamedParam1
)
{...}

Parameter

unnamedParam1

pData [masuk, keluar]

Penunjuk ke struktur D3DKMT_CREATEALLOCATION yang berisi informasi untuk membuat alokasi.

Nilai kembali

D3DKMTCreateAllocation mengembalikan salah satu nilai berikut:

Menampilkan kode Deskripsi
STATUS_SUCCESS Alokasi berhasil dibuat.
STATUS_DEVICE_REMOVED Adaptor grafis dihentikan atau perangkat tampilan direset.
STATUS_INVALID_PARAMETER Parameter divalidasi dan ditentukan salah.
STATUS_NO_MEMORY D3DKMTCreateAllocation tidak dapat diselesaikan karena memori yang tidak mencukuum.
STATUS_NO_VIDEO_MEMORY D3DKMTCreateAllocation tidak dapat diselesaikan karena memori video yang 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.

Fungsi ini mungkin juga mengembalikan nilai NTSTATUS lainnya.

Keterangan

OpenGL ICD menggunakan fungsi D3DKMTCreateAllocation untuk membuat alokasi dan sumber daya. Alokasi dapat dikaitkan dengan sumber daya, atau alokasi dapat berdiri sendiri. Fungsi D3DKMTCreateAllocation juga dapat digunakan 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

Contoh kode berikut menunjukkan bagaimana OpenGL ICD dapat menggunakan D3DKMTCreateAllocation 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_ALLOCATIONINFO AllocationInfo;

    memset(&CreateAllocation, 0, sizeof(CreateAllocation));
    CreateAllocation.hDevice = hDevice;
    CreateAllocation.NumAllocations = 1;
    CreateAllocation.pAllocationInfo = &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;
}

Contoh kode berikut menunjukkan bagaimana OpenGL ICD dapat menggunakan D3DKMTCreateAllocation 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_ALLOCATIONINFO 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 Vista
Target Platform Universal
Header d3dkmthk.h (termasuk D3dkmthk.h)

Lihat juga

D3DKMT_CREATEALLOCATION