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 |