PFND3DKMT_CREATEALLOCATION fonction de rappel (d3dkmthk.h)
La fonction D3DKMTCreateAllocation crée des allocations de mémoire système ou vidéo.
Syntaxe
PFND3DKMT_CREATEALLOCATION Pfnd3dkmtCreateallocation;
NTSTATUS Pfnd3dkmtCreateallocation(
D3DKMT_CREATEALLOCATION *unnamedParam1
)
{...}
Paramètres
unnamedParam1
pData [in, out]
Pointeur vers une structure de D3DKMT_CREATEALLOCATION qui contient des informations pour la création d’allocations.
Valeur retournée
D3DKMTCreateAllocation retourne l’une des valeurs suivantes :
Code de retour | Description |
---|---|
STATUS_SUCCESS | Les allocations ont été créées avec succès. |
STATUS_DEVICE_REMOVED | La carte graphique a été arrêtée ou le périphérique d’affichage a été réinitialisé. |
STATUS_INVALID_PARAMETER | Les paramètres ont été validés et déterminés comme incorrects. |
STATUS_NO_MEMORY | D3DKMTCreateAllocation n’a pas pu se terminer en raison d’une mémoire insuffisante. |
STATUS_NO_VIDEO_MEMORY | D3DKMTCreateAllocation n’a pas pu se terminer en raison d’une mémoire vidéo insuffisante. Le gestionnaire de mémoire vidéo tente de virtualiser la mémoire vidéo ; Toutefois, si la virtualisation échoue (par exemple, lorsque l’espace d’adressage virtuel est insuffisant), le gestionnaire de mémoire peut retourner ce code d’erreur. |
Cette fonction peut également retourner d’autres valeurs NTSTATUS.
Remarques
OpenGL ICD utilise la fonction D3DKMTCreateAllocation pour créer des allocations et des ressources. Une allocation peut être associée à une ressource, ou une allocation peut être autonome. La fonction D3DKMTCreateAllocation peut également être utilisée pour ajouter des allocations supplémentaires à une ressource à tout moment. Les seules restrictions sont que toutes les allocations partagées doivent être associées à une ressource et que des allocations supplémentaires ne peuvent pas être ajoutées à une ressource partagée existante.
Exemples
L’exemple de code suivant montre comment un ICD OpenGL peut utiliser D3DKMTCreateAllocation pour créer une allocation autonome dans la mémoire vidéo qui n’est pas associée à une ressource.
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;
}
L’exemple de code suivant montre comment un ICD OpenGL peut utiliser D3DKMTCreateAllocation pour créer une ressource avec une seule allocation de mémoire système.
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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista |
Plateforme cible | Universal |
En-tête | d3dkmthk.h (include D3dkmthk.h) |