Compartir a través de


Uso compartido del almacén auxiliar con el KMD

A partir de la versión 22H2 de Windows 11 (WDDM 3.1), WDDM se ha ampliado para permitir el acceso a un almacén auxiliar de asignación de gráficos a través del controlador en modo kernel (KMD). Un almacén de respaldo hace referencia a un búfer de memoria confirmada que contiene el contenido de una asignación de gráficos cuando no reside en la memoria de vídeo.

Esta característica permite que tanto el controlador en modo de usuario (UMD) como el KMD tengan acceso a la misma memoria de asignación. Esta característica se puede usar cuando el UMD se ejecuta en el host o en una máquina virtual mediante la paravirtualización de la GPU (GPU-PV).

Esta característica se volvió a migrar a Windows 10 en su versión 20H1. DDI está disponible para los controladores de WDDM 3.1 o versiones posteriores.

Asignaciones de gráficos de WDDM y almacenes auxiliares

Cada asignación de gráficos en el modelo WDDM tiene un almacén de respaldo. Se crea una asignación de gráficos cuando UMD llama a la función D3DKMTCreateAllocation de Dxgkrnl. El UMD pasa datos privados de esta asignación, que Dxgkrnl pasa al KMD a través de una llamada a DxgkddiCreateAllocation. El KMD devuelve los indicadores de asignación deseadas a Dxgkrnl.

Comprobación de disponibilidad de la característica

Para comprobar si la característica de uso compartido del almacén auxiliar está disponible, el KMD primero debe llamar a una de las siguientes devoluciones de llamada con FeatureId con el valor DXGK_FEATURE_SHARE_BACKING_STORE_WITH_KMD:

La característica solo se puede usar si la devolución de llamada se realiza correctamente y Enable tiene el valor TRUE.

Flujo de característica

Una vez que el KMD determina correctamente que la característica está habilitada, el UMD llama a D3DKMTCreateAllocation para crear una asignación compartida visible para la CPU e indica al KMD a través de datos privados que la asignación debe compartirse con el KMD. Mientras se realiza esta llamada, se produce lo siguiente:

  • El KMD establece la marca DXGK_ALLOCATIONINFOFLAGS2's ShareBackingStoreWithKmd cuando el sistema operativo llama a la devolución de llamada DXGKDDI_CREATEALLOCATION del KMD. Si la característica no está habilitada, el KMD no deberá establecer la marca ShareBackingStoreWithKmd.

  • Dxgkrnl llama a la DDI DXGKDDI_SETALLOCATIONBACKINGSTORE para otorgar al KMD una dirección en modo kernel en el almacén auxiliar de asignación.

  • El UMD llama a D3DKMTLock2 para obtener la dirección del modo de usuario de la asignación.

Propiedades de la asignación

La asignación creada de esta manera debe tener las siguientes propiedades:

  • La asignación solo puede estar en el segmento de memoria del sistema.
  • La asignación debe crearse como compartida.
  • La asignación no puede usar la memoria del sistema existente como memoria auxiliar.
  • El UMD puede realizar cualquier operación para una asignación normal.
    • El UMD puede llamar a D3DKMTLock2 para obtener un puntero a la asignación.
    • El UMD puede llamar a D3DKMTMakeResident para que la GPU pueda acceder a la asignación.