Compartilhar via


Compartilhar o repositório de backup com o KMD

A partir do Windows 11 versão 22H2, a API WDDM foi estendida para permitir o acesso a um repositório de backup de alocação de gráficos a partir do driver de modo kernel (KMD). Usando essa API, o driver de modo de usuário (UMD) e KMD podem acessar 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 portado de volta 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 WDDM possui um repositório de backup, que é um buffer de memória comprometida que retém o conteúdo de alocação quando ele não está na memória de vídeo.

Uma alocação de gráficos é criada chamando D3DKMTCreateAllocation. O UMD passa dados privados para essa alocação, que Dxgkrnl passa para o KMD através de uma chamada para DXGKDDI_CREATEALLOCATION. 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 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 DXGKDDI_CREATEALLOCATION do KMD. Se o recurso não estiver habilitado, o KMD não deve 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.