PFND3DKMT_CREATEALLOCATION función de devolución de llamada (d3dkmthk.h)
La función D3DKMTCreateAllocation crea asignaciones de memoria de sistema o vídeo.
Sintaxis
PFND3DKMT_CREATEALLOCATION Pfnd3dkmtCreateallocation;
NTSTATUS Pfnd3dkmtCreateallocation(
D3DKMT_CREATEALLOCATION *unnamedParam1
)
{...}
Parámetros
unnamedParam1
pData [in, out]
Puntero a una estructura D3DKMT_CREATEALLOCATION que contiene información para crear asignaciones.
Valor devuelto
D3DKMTCreateAllocation devuelve uno de los siguientes valores:
Código devuelto | Descripción |
---|---|
STATUS_SUCCESS | Las asignaciones se crearon correctamente. |
STATUS_DEVICE_REMOVED | El adaptador de gráficos se detuvo o se restableció el dispositivo de pantalla. |
STATUS_INVALID_PARAMETER | Los parámetros se validaron y determinaron que son incorrectos. |
STATUS_NO_MEMORY | D3DKMTCreateAllocation no se pudo completar debido a memoria insuficiente. |
STATUS_NO_VIDEO_MEMORY | D3DKMTCreateAllocation no se pudo completar debido a una memoria de vídeo insuficiente. El administrador de memoria de vídeo intenta virtualizar la memoria de vídeo; sin embargo, si se produce un error en la virtualización (por ejemplo, cuando se agota el espacio de direcciones virtuales), el administrador de memoria podría devolver este código de error. |
Esta función también podría devolver otros valores NTSTATUS.
Comentarios
OpenGL ICD usa la función D3DKMTCreateAllocation para crear asignaciones y recursos. Una asignación se puede asociar a un recurso o una asignación puede ser independiente. La función D3DKMTCreateAllocation también se puede usar para agregar asignaciones adicionales a un recurso en cualquier momento. Las únicas restricciones son que todas las asignaciones compartidas deben estar asociadas a un recurso y no se pueden agregar asignaciones adicionales a un recurso compartido existente.
Ejemplos
En el ejemplo de código siguiente se muestra cómo un ICD de OpenGL puede usar D3DKMTCreateAllocation para crear una asignación independiente en memoria de vídeo que no está asociada a un recurso.
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;
}
En el ejemplo de código siguiente se muestra cómo un ICD de OpenGL puede usar D3DKMTCreateAllocation para crear un recurso con una única asignación de memoria del 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;
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Plataforma de destino | Universal |
Encabezado | d3dkmthk.h (incluya D3dkmthk.h) |