Freigeben über


PFND3DKMT_CREATEALLOCATION Rückruffunktion (d3dkmthk.h)

Die D3DKMTCreateAllocation-Funktion erstellt Zuordnungen des System- oder Videospeichers.

Syntax

PFND3DKMT_CREATEALLOCATION Pfnd3dkmtCreateallocation;

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

Parameter

unnamedParam1

pData [in, out]

Ein Zeiger auf eine D3DKMT_CREATEALLOCATION-Struktur , die Informationen zum Erstellen von Zuordnungen enthält.

Rückgabewert

D3DKMTCreateAllocation gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
STATUS_SUCCESS Zuordnungen wurden erfolgreich erstellt.
STATUS_DEVICE_REMOVED Die Grafikkarte wurde angehalten, oder das Anzeigegerät wurde zurückgesetzt.
STATUS_INVALID_PARAMETER Die Parameter wurden überprüft und als falsch ermittelt.
STATUS_NO_MEMORY D3DKMTCreateAllocation konnte aufgrund von unzureichendem Arbeitsspeicher nicht abgeschlossen werden.
STATUS_NO_VIDEO_MEMORY D3DKMTCreateAllocation konnte aufgrund von 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 nicht ausreicht), gibt der Speicher-Manager möglicherweise diesen Fehlercode zurück.

Diese Funktion gibt möglicherweise auch andere NTSTATUS-Werte zurück.

Hinweise

Die OpenGL ICD verwendet die Funktion D3DKMTCreateAllocation , um Zuordnungen und Ressourcen zu erstellen. Eine Zuordnung kann einer Ressource zugeordnet werden, oder eine Zuordnung kann eigenständig sein. Die D3DKMTCreateAllocation-Funktion kann auch verwendet 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

Im folgenden Codebeispiel wird veranschaulicht, wie ein OpenGL ICD D3DKMTCreateAllocation 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_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;
}

Im folgenden Codebeispiel wird veranschaulicht, wie ein OpenGL ICD D3DKMTCreateAllocation verwenden kann, um eine Ressource mit einer einzelnen Systemspeicherbelegung 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_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;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Zielplattform Universell
Header d3dkmthk.h (include D3dkmthk.h)

Weitere Informationen

D3DKMT_CREATEALLOCATION