Freigeben über


D3DKMTCreateAllocation2-Funktion (d3dkmthk.h)

Die D3DKMTCreateAllocation2-Funktion erstellt oder fügt Zuordnungen des System- oder Videospeichers hinzu.

Syntax

NTSTATUS D3DKMTCreateAllocation2(
  D3DKMT_CREATEALLOCATION *unnamedParam1
);

Parameter

unnamedParam1

[ein, aus] pData: Ein Zeiger auf eine D3DKMT_CREATEALLOCATION Struktur, die Informationen zum Erstellen von Zuordnungen enthält.

Rückgabewert

D3DKMTCreateAllocation2 gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Andernfalls kann ein NTSTATUS-Code zurückgegeben werden, z. B. einen der folgenden Werte:

Rückgabecode Beschreibung
STATUS_DEVICE_REMOVED Der Grafikkarte wurde beendet oder das Anzeigegerät zurückgesetzt.
STATUS_INVALID_PARAMETER Parameter wurden überprüft und als falsch ermittelt.
STATUS_NO_MEMORY Diese Routine konnte aufgrund von unzureichendem Systemspeicher nicht abgeschlossen werden.
STATUS_NO_VIDEO_MEMORY Diese Routine konnte aufgrund eines unzureichenden Videospeichers nicht abgeschlossen werden. Der Videospeicher-Manager versucht, den Videospeicher zu virtualisieren. Wenn die Virtualisierung jedoch fehlschlägt (z. B. wenn der virtuelle Adressraum ausläuft), gibt der Speicher-Manager möglicherweise diesen Fehlercode zurück.

Hinweise

Ein Benutzermodus-Grafikclient kann D3DKMTCreateAllocation2 aufrufen, um Zuordnungen und Ressourcen zu erstellen. Eine Zuordnung kann einer Ressource zugeordnet oder eigenständig sein.

D3DKMTCreateAllocation2 kann auch aufgerufen werden, um einer Ressource jederzeit zusätzliche Zuordnungen hinzuzufügen. Die einzigen Einschränkungen sind, dass alle freigegebenen Zuordnungen einer Ressource zugeordnet werden müssen und keine zusätzlichen Zuordnungen zu einer vorhandenen freigegebenen Ressource hinzugefügt werden können.

Beispiele

Erstellen einer eigenständigen Zuordnung im Videospeicher, die keiner Ressource zugeordnet ist

Im folgenden Codebeispiel wird veranschaulicht, wie ein Benutzermodus-Grafikclient D3DKMTCreateAllocation2 verwenden kann, um eine eigenständige Zuordnung im Videospeicher zu erstellen, die keiner Ressource zugeordnet ist.

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;
}

Erstellen einer Ressource mit einer einzelnen Systemspeicherzuordnung

Im folgenden Codebeispiel wird veranschaulicht, wie ein Benutzermodusgrafikclient D3DKMTCreateAllocation2 verwenden kann, um eine Ressource mit einer einzelnen Systemspeicherzuordnung zu erstellen.

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;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7
Zielplattform Universell
Header d3dkmthk.h (einschließlich D3dkmthk.h)
Bibliothek Gdi32.lib
DLL Gdi32.dll

Weitere Informationen

D3DKMT_CREATEALLOCATION