PFND3DKMT_CREATEALLOCATION Rückruffunktion (d3dkmthk.h)
Die D3DKMTCreateAllocation Funktion erstellt Zuordnungen von System- oder Videospeicher.
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 | 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 | D3DKMTCreateAllocation konnte aufgrund unzureichendem Arbeitsspeicher nicht abgeschlossen werden. |
STATUS_NO_VIDEO_MEMORY | D3DKMTCreateAllocation 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. |
Diese Funktion kann auch andere NTSTATUS-Werte zurückgeben.
Bemerkungen
Die OpenGL ICD verwendet die D3DKMTCreateAllocation Funktion, 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 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
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 einzigen 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_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 |
---|---|
mindestens unterstützte Client- | Windows Vista |
Zielplattform- | Universal |
Header- | d3dkmthk.h (einschließlich D3dkmthk.h) |