Compartilhar via


Compartilhar o repositório de backup com o KMD

A partir do Windows 11 versão 22H2 (WDDM 3.1), o WDDM foi estendido para permitir o acesso a um repositório de backup de alocação de gráficos a partir do driver de modo kernel (KMD). Um repositório de backup refere-se a um buffer de memória confirmado com o conteúdo de uma alocação de gráficos quando ela não reside na memória de vídeo.

Esse recurso permite que o driver de modo de usuário (UMD) e o KMD acessem a mesma memória de alocação. Esse recurso pode ser usado quando o UMD está sendo executado no host ou em uma máquina virtual usando a paravirtualização de GPU (GPU-PV).

Esse recurso foi retornado para o Windows 10 versão 20H1. O DDI está disponível para drivers WDDM 3.1 ou mais recentes.

Alocações de gráficos WDDM e repositórios de backup

Cada alocação de gráficos no modelo do WDDM tem um repositório de backup. Uma alocação gráfica é criada quando o UMD chama a função do Dxgkrnl, chamada D3DKMTCreateAllocation. O UMD passa dados privados para essa alocação, que o Dxgkrnl passa para o KMD através de uma chamada para DxgkddiCreateAllocation. O KMD retorna os sinalizadores de alocação desejados para Dxgkrnl.

Verificar a disponibilidade de recursos

Para verificar se o recurso de compartilhamento de repositório de backup está disponível, o KMD deve primeiro chamar um dos seguintes retornos de chamada com FeatureId definido DXGK_FEATURE_SHARE_BACKING_STORE_WITH_KMD:

O recurso poderá ser usado somente se o retorno de chamada for bem-sucedido e se Habilitar estiver definido como VERDADEIRO.

Fluxo de recursos

Depois que o KMD determinar com êxito que o recurso está habilitado, o UMD chama a D3DKMTCreateAllocation para criar uma alocação compartilhada visível pela CPU e instrui o KMD por meio de dados privados de que a alocação deve ser compartilhada com o KMD. No decorrer desta chamada, ocorre o seguinte:

  • O KMD define o sinalizador ShareBackingStoreWithKmd do DXGK_ALLOCATIONINFOFLAGS2 quando o sistema operacional chama o retorno de chamada DxgkddiCreateAllocation do KMD. Se o recurso não estiver habilitado, o KMD não consegue definir o sinalizador ShareBackingStoreWithKmd.

  • O Dxgkrnl chama o DDI DXGKDDI_SETALLOCATIONBACKINGSTORE para dar ao KMD um endereço de modo kernel para o repositório backup de alocação.

  • O UMD chama D3DKMTLock2 para obter o endereço de modo de usuário da alocação.

Propriedades da alocação

A alocação criada dessa maneira deve ter as seguintes propriedades:

  • A alocação pode estar somente no segmento de memória do sistema.
  • A alocação deve ser criada como compartilhada.
  • A alocação não pode usar a memória do sistema existente como repositório de backup.
  • O UMD pode fazer qualquer operação como para uma alocação regular.
    • O UMD pode chamar D3DKMTLock2 para obter um ponteiro da alocação.
    • O UMD pode chamar D3DKMTMakeResident para tornar a alocação acessível pela GPU.