DXGKDDI_CREATEALLOCATION función de devolución de llamada (d3dkmddi.h)
La función DxgkDdiCreateAllocation crea asignaciones de memoria del sistema o vídeo.
Sintaxis
DXGKDDI_CREATEALLOCATION DxgkddiCreateallocation;
NTSTATUS DxgkddiCreateallocation(
[in] IN_CONST_HANDLE hAdapter,
[in/out] INOUT_PDXGKARG_CREATEALLOCATION pCreateAllocation
)
{...}
Parámetros
[in] hAdapter
Identificador de un bloque de contexto asociado a un adaptador de pantalla. El controlador de minipuerto de pantalla proporcionó anteriormente este identificador al subsistema del kernel de gráficos de Microsoft DirectX en el parámetro de salida MiniportDeviceContext de la función DxgkDdiAddDevice .
[in/out] pCreateAllocation
Puntero a una estructura DXGKARG_CREATEALLOCATION que contiene información para crear asignaciones.
Valor devuelto
DxgkDdiCreateAllocation devuelve uno de los siguientes valores:
Código devuelto | Descripción |
---|---|
STATUS_SUCCESS | DxgkDdiCreateAllocation creó correctamente la asignación. |
STATUS_INVALID_PARAMETER | Los parámetros que se pasaron a DxgkDdiCreateAllocation contenían errores que impedían que se completara. |
STATUS_NO_MEMORY | DxgkDdiCreateAllocation no pudo asignar memoria necesaria para que se completara. |
STATUS_GRAPHICS_DRIVER_MISMATCH | El controlador de miniporte de pantalla de pantalla no es compatible con el controlador de pantalla en modo de usuario que inició la llamada a DxgkDdiCreateAllocation. |
Comentarios
Después de que el controlador de pantalla en modo de usuario llame a la función pfnAllocateCb , el subsistema del kernel de gráficos directX llama a la función DxgkDdiCreateAllocation del controlador de miniporte de pantalla para crear las asignaciones. El controlador de minipuerto de pantalla debe interpretar los datos privados (en el miembro pPrivateDriverData de la estructura DXGK_ALLOCATIONINFO para cada asignación) que se pasa desde el controlador de pantalla en modo de usuario y debe determinar la lista de parámetros necesarios para crear cada asignación a través del administrador de memoria de vídeo. Para obtener más información sobre cómo el controlador de minipuerto de pantalla proporciona estos parámetros al administrador de memoria de vídeo, vea Especificar segmentos al crear asignaciones.
El controlador de minipuerto de pantalla debe devolver un identificador de asignación, que suele ser un puntero a una estructura de datos del controlador privado que contiene información sobre la asignación. El controlador de minipuerto de pantalla puede llamar a la función DxgkCbGetHandleData en cualquier momento para recuperar los datos privados de un identificador de asignación. Por lo tanto, el controlador de minipuerto de pantalla no es necesario para mantener una tabla de identificadores de asignación privada. De hecho, se desaconseja encarecidamente las tablas de identificadores privados porque podrían quedar obsoletas o no sincronizadas con el subsistema del kernel de gráficos directX en escenarios de conmutador de modo de visualización, como el conmutador de usuario rápido, el desconecte activo, etc.
El controlador de pantalla en modo de usuario asigna una asignación a un recurso o a un dispositivo. Para determinar si la asignación pertenece a un recurso, el controlador de minipuerto de pantalla puede comprobar si la marca de campo de bits resource está establecida en el miembro Flags de la estructura DXGKARG_CREATEALLOCATION a la que apunta el parámetro pCreateAllocation de DxgkDdiCreateAllocation . Si la asignación pertenece a un recurso, el controlador de minipuerto de pantalla puede (pero no es necesario para) devolver un identificador de recursos, que suele ser un puntero a una estructura de datos del controlador privado que describe el recurso. Si el subsistema del kernel de gráficos de DirectX llama a DxgkDdiCreateAllocation para crear una asignación adicional para un recurso existente, el miembro hResource de DXGKARG_CREATEALLOCATION contiene el identificador devuelto por la llamada dxgkDdiCreateAllocation anterior para ese recurso. Si es necesario, el controlador de minipuerto de pantalla puede cambiar el identificador de recursos durante una llamada a DxgkDdiCreateAllocation.
Si el controlador de pantalla en modo de usuario coloca un identificador de recursos en un búfer de comandos, el controlador de miniporte de pantalla puede recuperar los datos privados llamando a DxgkCbGetHandleData. El controlador de minipuerto de pantalla también puede enumerar todas las asignaciones secundarias del recurso mediante una llamada a la función DxgkCbEnumHandleChildren .
A partir de Windows 7, si un controlador de minipuerto de pantalla procesa una llamada a la función DxgkDdiCreateAllocation para crear asignaciones para la aceleración de hardware GDI, el controlador debe establecer el tamaño de la asignación (incluido el valor de tono para las asignaciones visibles de CPU), pCreateAllocation-pAllocationInfo-Size>.>
Los recursos creados en la llamada DxgkDdiCreateAllocation pertenecen al adaptador y no al dispositivo. El controlador de minipuerto de pantalla no debe hacer referencia a los datos del dispositivo en ningún lugar dentro de las estructuras de datos de recursos y asignación privada. Debido al uso compartido de superficies, un recurso podría estar en uso después de la destrucción del dispositivo desde el que el controlador de visualización en modo de usuario creó el recurso.
DxgkDdiCreateAllocation debe ser paginable.
Asignación de búferes de historial
A partir de Windows 8.1, cuando se llama a DxgkDdiCreateAllocation, el controlador de minipuerto de pantalla puede establecer el DXGK_ALLOCATIONINFOFLAGS.Miembro HistoryBuffer para indicar que el controlador en modo de usuario puede administrar la creación y destrucción de búferes del historial.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Plataforma de destino | Escritorio |
Encabezado | d3dkmddi.h |
IRQL | PASSIVE_LEVEL |