PFND3DKMT_CREATEALLOCATION funzione di callback (d3dkmthk.h)
La funzione D3DKMTCreateAllocation crea allocazioni di sistema o memoria video.
Sintassi
PFND3DKMT_CREATEALLOCATION Pfnd3dkmtCreateallocation;
NTSTATUS Pfnd3dkmtCreateallocation(
D3DKMT_CREATEALLOCATION *unnamedParam1
)
{...}
Parametri
unnamedParam1
pData [in, out]
Puntatore a una struttura D3DKMT_CREATEALLOCATION che contiene informazioni per la creazione di allocazioni.
Valore restituito
D3DKMTCreateAllocation restituisce uno dei valori seguenti:
Codice restituito | Descrizione |
---|---|
STATUS_SUCCESS | Le allocazioni sono state create correttamente. |
STATUS_DEVICE_REMOVED | La scheda grafica è stata arrestata o il dispositivo di visualizzazione è stato reimpostato. |
STATUS_INVALID_PARAMETER | I parametri sono stati convalidati e determinati per essere non corretti. |
STATUS_NO_MEMORY | D3DKMTCreateAllocation non è stato possibile completare a causa di memoria insufficiente. |
STATUS_NO_VIDEO_MEMORY | D3DKMTCreateAllocation non è stato possibile completare a causa di memoria video insufficiente. La gestione memoria video tenta di virtualizzare la memoria video; tuttavia, se la virtualizzazione ha esito negativo (ad esempio, quando lo spazio indirizzi virtuale viene esaurito), la gestione memoria potrebbe restituire questo codice di errore. |
Questa funzione potrebbe anche restituire altri valori NTSTATUS.
Commenti
OpenGL ICD usa la funzione D3DKMTCreateAllocation per creare allocazioni e risorse. Un'allocazione può essere associata a una risorsa o un'allocazione può essere autonoma. La funzione D3DKMTCreateAllocation può essere usata anche per aggiungere allocazioni aggiuntive a una risorsa in qualsiasi momento. Le uniche restrizioni sono che tutte le allocazioni condivise devono essere associate a una risorsa e le allocazioni aggiuntive non possono essere aggiunte a una risorsa condivisa esistente.
Esempio
Nell'esempio di codice seguente viene illustrato come un ICD OpenGL può usare D3DKMTCreateAllocation per creare un'allocazione autonoma nella memoria video che non è associata a una risorsa.
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;
}
Nell'esempio di codice seguente viene illustrato come un ICD OpenGL può usare D3DKMTCreateAllocation per creare una risorsa con una singola allocazione di memoria di sistema.
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;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista |
Piattaforma di destinazione | Universale |
Intestazione | d3dkmthk.h (include D3dkmthk.h) |