Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El modelo de adelantamiento de GPU se actualizó en Windows 8 (WDDM 1.2). En el modelo actualizado, el sistema operativo:
- No permite que el controlador de pantalla del modo núcleo (KMD) deshabilite la preempción de los paquetes DMA de GPU.
- Garantiza que las solicitudes de preempción se envían a la GPU antes de iniciar un proceso de detección y recuperación de tiempo de espera (TDR).
| Requisito | Descripción |
|---|---|
| Implementación del controlador: gráficos completos y solo renderizado | Obligatorio |
| Requisitos y pruebas de WHLK | Device.Graphics…Prueba de Preempción, Device.Graphics…FlipOnVSyncMmIo |
Si el sistema operativo no puede reemplazar correctamente los paquetes de ejecución prolongada, haga lo siguiente:
- El trabajo de GPU de alta prioridad (como el trabajo requerido por desktop Window Manager (DWM)) se puede retrasar. Este retraso da lugar a problemas durante las transiciones de ventana y las animaciones.
- El proceso de TDR puede restablecer repetidamente la GPU y, finalmente, provocar que se produzca una comprobación de errores del sistema.
Todos los KMDs de WDDM 1.2 deben admitir el modelo de preempción de Windows 8. Sin embargo, cuando está en funcionamiento, los controladores WDDM 1.2 también pueden rechazar el modelo de adelantamiento de Windows 8 y conservar el comportamiento de Windows 7 mediante el programador del subsistema de kernel de gráficos de DirectX (Dxgkrnl).
Interfaz de preempción de GPU
KMD puede usar los siguientes DDIs para implementar el modelo de adelantamiento de GPU de Windows 8.
- DxgkCbCreateContextAllocation
- DxgkCbDestroyContextAllocation
- pfnSetPriorityCb
- Dxgkrnl (interfaz)
- DXGKRNL_INTERFACE
- D3DKMDT_COMPUTE_PREEMPTION_GRANULARITY
- D3DKMDT_GRAPHICS_PREEMPTION_GRANULARITY
- D3DKMDT_PREEMPTION_CAPS
- D3DKMT_QUERYADAPTERINFO
- DXGK_DRIVERCAPS
- DXGK_SUBMITCOMMANDFLAGS
- DXGK_VIDSCHCAPS
- DXGKARGCB_CREATECONTEXTALLOCATION
Pasos de implementación del controlador
Siga estos pasos generales para implementar el modelo de adelantamiento de GPU de Windows 8 en el KMD:
- Compile el controlador con encabezados que tengan DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN8.
- Declare la compatibilidad con el modelo de adelantamiento de GPU de Windows 8 estableciendo los miembros PreemptionAware y MultiEngineAware de la estructura DXGK_VIDSCHCAPS en 1. Para admitir el modelo de adelantamiento de Windows 7, establezca PreemptionAware en cero.
- Especifique el nivel admitido de granularidad de adelantamiento en la estructura D3DKMDT_PREEMPTION_CAPS, que toma valores constantes de las enumeraciones D3DKMDT_GRAPHICS_PREEMPTION_GRANULARITY y D3DKMDT_COMPUTE_PREEMPTION_GRANULARITY.
- Si el hardware admite la conmutación de contexto diferida, envíe un búfer de longitud cero a la función DxgkDdiSubmitCommand y establezca el miembro pSubmitCommand->Flags->ContextSwitch en 1. Anote la discusión en el miembro ContextSwitch de la estructura DXGK_SUBMITCOMMANDFLAGS.
- Establezca asignaciones de contexto de GPU y asignaciones de contexto de dispositivo mediante una llamada a la función DxgkCbCreateContextAllocation . Tenga en cuenta las instrucciones y restricciones específicas dadas en Comentarios para la función.
- Llame a la función DxgkCbDestroyContextAllocation para destruir las asignaciones de contexto de GPU y las asignaciones de contexto de dispositivo que se crearon con DxgkCbCreateContextAllocation.
- Al preparar el búfer DMA en respuesta a una llamada a la función DxgkDdiBuildPagingBuffer , inicialice el recurso de contexto rellenando la estructura interna InitContextResource dentro de la estructura DXGKARG_BUILDPAGINGBUFFER . Si los recursos de contexto se expulsan o reubican, el administrador de memoria de vídeo conservará el contenido de los recursos de contexto.
- El controlador debe admitir el volteo de E/S asignada por memoria en la siguiente sincronización vertical. En Windows 8, el programador de GPU intenta interrumpir el hardware incluso si los volteos están pendientes. Por lo tanto, para evitar el desgarro y la representación de artefactos, el controlador debe admitir el modelo de volteo de E/S asignado a la memoria y debe establecer el miembro FlipOnVSyncMmIo de la estructura de DXGK_FLIPCAPS en 1 y admitir las operaciones descritas en FlipOnVSyncMmIo.
Consideraciones de mapeo de memoria en tu implementación
Siga estas instrucciones para crear un controlador sólido que admita el modelo de adelantamiento de GPU de Windows 8 y proporcione una experiencia de usuario de calidad:
- Solicite la preempción del búfer de DMA medio de la GPU cuando el programador Dxgkrnl envíe un comando de preempción. Los dispositivos de hardware que tienen una granularidad más fina de la preempción del búfer intermedio de DMA deben mejorar la experiencia del usuario.
- Permitir que se reutilicen los identificadores de barrera de comandos de paginación: si una solicitud de preempción dio lugar a la interrupción de comandos de paginación en la cola de hardware, el Programador Dxgkrnl volverá a enviar los comandos de paginación preemptados con los mismos identificadores de barrera que se usaron originalmente para ellos y los comandos de paginación se programarán antes de cualquier otro comando en ese procesador. Los comandos no de paginación se volverán a enviar con nuevos ID de fence asignados.
- Proporcione una lista de ubicaciones de parches para los búferes DMA divididos. Para obtener más información, consulte División de un búfer DMA.
- Hay disponible un modo de verificación, denominado detección de fugas de enlace. Este modo de comprobación recorre la lista de ubicaciones de parches y rechaza los paquetes que no se desvinculen o que no reprograman asignaciones para cada paquete dividido. Algunos hardware admiten direcciones virtuales, lo que permite un nivel adicional de direccionamiento indirecto que puede hacer que esta comprobación sea innecesaria. En tal caso, para indicar que el controlador opta por no participar en el modo de verificación, establezca el miembro NoDmaPatching de la estructura de DXGK_VIDSCHCAPS en 1.
- En Windows 7, el programador dxgkrnl garantiza que todos los paquetes DMA divididos que corresponden al mismo comando de representación se ejecutan secuencialmente sin cambiar a otro contexto de representación. En el modelo preemptivo de Windows 8, el planificador puede ejecutar paquetes de renderizado desde un contexto diferente entre dos paquetes divididos que corresponden al mismo comando de renderizado. Como consecuencia, los controladores que conocen la preempción deben gestionar un envío de paquetes DMA dividido o parcial de la misma manera que un envío de paquetes completo normal. En concreto, el estado de GPU debe guardarse o restaurarse en el límite de dichos envíos.
- Un controlador consciente de la preempción no debe cambiar el contenido de un búfer DMA dividido cuando se transmite a varios adaptadores en el modo de adaptador de pantalla vinculado (LDA), donde varias GPU físicas están vinculadas para formar una única GPU virtual más rápida. En el modelo de adelantamiento de Windows 8, el programador dxgkrnl ya no garantiza la ejecución sincrónica de una secuencia de paquetes dividida sin cambiar a otro contexto. Un controlador que cambió el contenido de un paquete DMA dividido comprometería la integridad de los datos del paquete. En concreto, si el paquete se ejecutó en otro motor, funcionaría en la misma copia de los datos del búfer DMA.
- En el modelo de preemptión de GPU de Windows 8, el programador Dxgkrnl permite la preemptión para los paquetes que tienen primitivos de sincronización de "señal al enviar". Si un dispositivo usa primitivos de sincronización de "señal al enviar" con estados de espera basados en hardware, debe admitir la capacidad de adelantar una instrucción de espera antes de que se cumpla la condición de espera.
Requisitos de certificación de hardware
Para obtener información sobre los requisitos que deben cumplir los dispositivos de hardware cuando implementen esta característica, consulte la documentación pertinente de WHLK en Device.Graphics... Prueba de adelantamiento y Device.Graphics... FlipOnVSyncMmIo.