DXGKDDI_RENDERKM función de devolución de llamada (d3dkmddi.h)
Para los adaptadores de pantalla que admiten la aceleración de hardware GDI, la función DxgkDdiRenderKm genera un búfer de acceso directo a memoria (DMA) desde el búfer de comandos que pasó el controlador de pantalla canónico (CDD) en modo kernel.
Sintaxis
DXGKDDI_RENDERKM DxgkddiRenderkm;
NTSTATUS DxgkddiRenderkm(
[in] IN_CONST_HANDLE hContext,
[in/out] INOUT_PDXGKARG_RENDER pRenderKmArgs
)
{...}
Parámetros
[in] hContext
Identificador del contexto del dispositivo para los búferes de comandos y DMA. La función DxgkDdiCreateContext del controlador de miniporte para mostrar devolvió anteriormente este identificador en el miembro hContext de la estructura DXGKARG_CREATECONTEXT a la que apunta el parámetro pCreateContext de DxgkDdiCreateContext .
Si el controlador no admite la creación de contextos, el subsistema del kernel de gráficos de Microsoft DirectX reemplaza el identificador al contexto por un identificador para el dispositivo. La función DxgkDdiCreateDevice del controlador de miniporte de pantalla devolvió previamente el identificador del dispositivo en el miembro hDevice de la estructura DXGKARG_CREATEDEVICE a la que apunta el parámetro pCreateDevice de DxgkDdiCreateDevice .
[in/out] pRenderKmArgs
Puntero a una estructura de DXGKARG_RENDER que contiene información sobre el búfer DMA y un búfer de comandos con formato.
Si el controlador de miniporte de pantalla admite la aceleración de hardware GDI, pRenderKmArgs-pCommand> apunta al búfer de comandos de DXGK_RENDERKM_COMMAND.
El controlador debe traducir el búfer de comandos de entrada en comandos de búfer DMA y compilar la lista de ubicaciones de revisión.
Valor devuelto
DxgkDdiRenderKm devuelve uno de los siguientes valores:
Código devuelto | Descripción |
---|---|
STATUS_SUCCESS | Se ha traducido todo el búfer de comandos. |
STATUS_NO_MEMORY | DxgkDdiRenderKm no pudo asignar memoria necesaria para que se complete. |
STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER | El búfer DMA actual se agota. |
STATUS_INVALID_PARAMETER | DxgkDdiRenderKm detectó parámetros de instrucción que el hardware gráfico no podía admitir; sin embargo, el hardware gráfico puede admitir las instrucciones. El controlador no es necesario para devolver este código de error. En su lugar, puede devolver STATUS_ILLEGAL_INSTRUCTION cuando detecta parámetros de instrucción no admitidos. |
STATUS_INVALID_USER_BUFFER | DxgkDdiRenderKm detectó datos o instrucciones bajo ejecución o saturación. Es decir, el controlador recibió menos o más instrucciones o datos de los esperados. El controlador no es necesario para devolver este código de error. En su lugar, puede devolver STATUS_ILLEGAL_INSTRUCTION cuando detecta datos o instrucciones infraejecutaciones o sobreejecutaciones. |
STATUS_INVALID_HANDLE | DxgkDdiRenderKm detectó un identificador no válido en el búfer de comandos. |
STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE | El controlador de minipuerto de pantalla detectó un error en la secuencia DMA. El dispositivo de contexto gráfico se coloca en un estado perdido si el controlador devuelve este código de error. |
Comentarios
El subsistema del kernel de gráficos de DirectX llama a la función DxgkDdiRenderKm del controlador de miniporte para mostrar para generar un búfer DMA desde el búfer de comandos que pasa el controlador de pantalla canónica (CDD) en modo kernel proporcionado por el sistema operativo. Además del búfer DMA de salida, el controlador de minipuerto de pantalla también debe generar una lista de ubicaciones de revisión de salida. El administrador de memoria de vídeo usa esta lista para dividir y aplicar revisiones a los búferes DMA correctamente.
El acceso a los búferes del kernel no requiere protección frente al try/except
código.
El controlador de minipuerto de pantalla no es necesario para usar la información que proporciona el CDD si puede volver a crear la información de forma más óptima. Por ejemplo, si el miembro pRender-pPatchLocationListIn> está vacío porque el controlador de pantalla en modo de usuario no proporcionó una lista de revisiones de entrada, el controlador de miniport para mostrar puede generar el contenido del miembro pRender-pPatchLocationListOut> en función del contenido del búfer de comandos en su lugar.
Además del identificador específico del dispositivo, el subsistema del kernel de gráficos de DirectX proporciona el controlador de miniporte de pantalla con la última dirección de segmento de GPU conocida para cada asignación. Si el índice de asignación N se pagina actualmente, el subsistema del kernel de gráficos de DirectX establece el miembro SegmentId del elemento Ndel miembro pAllocationList de DXGKARG_RENDER en cero. Si el miembro SegmentId del elemento Nºde la lista de asignación no está establecido en cero, el controlador de miniporte de pantalla debe revisar el búfer DMA generado con la información de dirección del segmento proporcionada antes de que el subsistema del kernel de gráficos de DirectX llame a la función DxgkDdiPatch para volver a revisar el búfer DMA. El controlador debe realizar esta revisión inicial cuando se solicite porque es posible que el subsistema del kernel de gráficos de DirectX no llame a la función DxgkDdiPatch en un búfer DMA que el controlador debe haber revisado correctamente.
Aunque la función DxgkDdiRenderKm del controlador realiza la revisión inicial del búfer DMA como se ha descrito anteriormente, el controlador todavía debe insertar todas las referencias a las asignaciones en la lista de ubicación de revisión de salida que especifica el miembro pPatchLocationListOut de DXGKARG_RENDER . Esta lista debe contener todas las referencias porque las direcciones de las asignaciones pueden cambiar antes de que el búfer DMA se envíe a la GPU; por lo tanto, el subsistema del kernel de gráficos de DirectX llamará a la función DxgkDdiPatch para volver a guardar el búfer DMA.
Para desenlazar una asignación, el controlador de miniporte para mostrar puede especificar un elemento en la lista de asignación que haga referencia a un identificador NULL y, a continuación, puede usar un elemento patch-location que haga referencia a esa asignación NULL . Normalmente, el controlador debe usar el primer elemento de la lista de asignación (elemento 0) como elemento NULL .
En el modo DMA de contrato garantizado, cuando el controlador de minipuerto de pantalla traduce un búfer de comandos a un búfer DMA, el CDD debe garantizar suficientes recursos para el comando de traducción. Si no existen suficientes recursos para la traducción, el controlador de minipuerto de pantalla debe rechazar el búfer DMA. Para obtener más información, vea Uso del modelo de búfer DMA de contrato garantizado.
DxgkDdiRenderKm debe ser paginable.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 7 |
Plataforma de destino | Escritorio |
Encabezado | d3dkmddi.h |
IRQL | PASSIVE_LEVEL |