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:
- DXGKCB_QUERYFEATURESUPPORT (disponível a partir do WDDM 2.9)
- DXGKCB_ISFEATUREENABLED
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.