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

[in, out] 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 wurde zurückgesetzt.
STATUS_INVALID_PARAMETER Parameter wurden überprüft und ermittelt, dass sie falsch sind.
STATUS_NO_MEMORY Diese Routine konnte aufgrund unzureichendem Systemspeicher nicht abgeschlossen werden.
STATUS_NO_VIDEO_MEMORY Diese Routine konnte aufgrund unzureichendem Videospeicher 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.

Bemerkungen

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

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

Beispiele

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

Im folgenden Codebeispiel wird veranschaulicht, wie ein Benutzermodusgrafikclient 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 einzigen Systemspeicherzuweisung

Im folgenden Codebeispiel wird veranschaulicht, wie ein Benutzermodusgrafikclient D3DKMTCreateAllocation2- verwenden kann, um eine Ressource mit einer einzigen Systemspeicherzuweisung 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
mindestens unterstützte Client- Windows 7
Zielplattform- Universal
Header- d3dkmthk.h (einschließlich D3dkmthk.h)
Library Gdi32.lib
DLL- Gdi32.dll

Siehe auch

D3DKMT_CREATEALLOCATION