Processar orçamentos de residência

No Modelo de Driver de Exibição do Windows (WDDM) v2, os processos receberão orçamentos para a quantidade de memória que podem manter residente. Esse orçamento pode mudar ao longo do tempo, mas geralmente só será imposto quando o sistema estiver sob pressão de memória. Antes do Microsoft Direct3D 12, o orçamento é tratado pelo driver de modo de usuário na forma de notificações de corte e falhas do MakeResident com STATUS_NO_MEMORY. A notificação TrimToBudget, Evict e as chamadas MakeResident com falha retornam o orçamento mais recente na forma de um valor inteiro NumBytesToTrim que indica quanto precisa ser cortado para se ajustar ao novo orçamento.

Para aplicativos Direct3D 12, o orçamento é tratado completamente pelo aplicativo. O tamanho do orçamento serve como uma referência para que o aplicativo saiba a que tamanho se ajustar. Usando o tamanho do orçamento como dica, o aplicativo pode decidir quantos recursos manter residente, qual resolução e qualidade de recursos manter.

Para gerenciar corretamente esses orçamentos, o kernel precisa saber qual memória deve participar do orçamento. Há um novo bit ApplicationTarget na estrutura DXGK_SEGMENTFLAGS2 que precisa ser configurado em segmentos que o driver do modo kernel deseja incluir na lógica de orçamento. Por exemplo, em uma GPU (unidade de processamento gráfico) discreta com 1 segmento de VRAM adequado para uso do aplicativo e um segmento de VRAM usado automaticamente para recursos de uso especial, o driver provavelmente marcaria apenas o segmento de VRAM primário como ApplicationTarget. Para GPUs integradas, o segmento de abertura principal geralmente será o marcado. Não há limite para quantos segmentos podem ser marcados como ApplicationTarget. O kernel os agregará e apresentará ao aplicativo um tamanho unificado.