Partilhar via


Solicitando renomeação de uma alocação

O driver de exibição do modo de usuário deve solicitar que o gerenciador de memória de vídeo renomeie uma alocação associada a uma superfície quando um aplicativo indicar descartar o conteúdo da superfície como parte de uma solicitação para bloquear a superfície (por exemplo, um buffer de vértice). O runtime do Microsoft Direct3D passa o sinalizador Descartar campo de bits para indicar que ele não requer mais o conteúdo atual da superfície. O driver pode solicitar que o gerenciador de memória de vídeo aloque uma nova alocação para lidar com a solicitação de bloqueio se a alocação atual que contém o conteúdo da superfície estiver ocupada, em vez de parar o thread do aplicativo até que a alocação atual fique ociosa.

O driver de exibição do modo de usuário solicita que o gerenciador de memória de vídeo renomeie uma alocação quando o driver define o membro Discard da estrutura D3DDDICB_LOCKFLAGS em uma chamada para a função pfnLockCb . O gerenciador de memória de vídeo determina se deve renomear a alocação ou se deve fazer com que o aplicativo seja interrompido até que a alocação esteja ociosa com base em se a alocação está ocupada no momento e na condição de memória atual. Para cada alocação que está sendo renomeada, o gerenciador de memória de vídeo mantém uma lista de alocações que são sucessivamente usadas para bloquear alocações. O gerenciador de memória de vídeo percorre a lista sempre que o aplicativo descarta o conteúdo de uma alocação. O comprimento da lista é determinado pelos requisitos do aplicativo e pela pressão de memória. O gerenciador de memória de vídeo tenta manter a lista por tempo suficiente para evitar interromper o thread do aplicativo em uma solicitação de bloqueio. No entanto, sob pressão de memória, o gerenciador de memória de vídeo pode cortar a lista para evitar causar pressão de memória extra.

Para impor um limite no comprimento da lista de renomeação para uma alocação, o driver define o membro MaximumRenamingListLength da estrutura DXGK_ALLOCATIONINFO ao criar a alocação. Se o driver definir MaximumRenamingListLength como um valor diferente de zero, o gerenciador de memória de vídeo determinará o comprimento apropriado da lista de renomeação sem exceder o limite imposto pelo driver. Se o driver definir MaximumRenamingListLength como 0, o gerenciador de memória poderá aumentar o tamanho da lista de renomeação para qualquer tamanho necessário para melhorar o desempenho.

Observe que quando o driver de exibição do modo de usuário define o membro Discard de D3DDDICB_LOCKFLAGS, o gerenciador de memória de vídeo não chama o driver de miniporto de exibição para alocar alocações extras para a alocação original. O gerenciador de memória de vídeo cria todas as alocações extras usando os parâmetros de criação da alocação original. Da perspectiva do driver de miniporta de exibição, a mesma alocação é paginada em locais potencialmente vários segmentos simultâneos.