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) |