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 |