PFND3DDDI_MAKERESIDENTCB função de retorno de chamada (d3dumddi.h)

pfnMakeResidentCb é usado para instruir o sistema operacional a adicionar um recurso à lista de residência do dispositivo e incrementar a contagem de referência de residência nessa alocação.

Sintaxe

PFND3DDDI_MAKERESIDENTCB Pfnd3dddiMakeresidentcb;

HRESULT Pfnd3dddiMakeresidentcb(
  HANDLE hDevice,
  D3DDDI_MAKERESIDENT *unnamedParam2
)
{...}

Parâmetros

hDevice

Um identificador para o dispositivo de exibição.

unnamedParam2

pData [in, out]

Um ponteiro para uma estrutura D3DDDI_MAKERESIDENT que descreve as páginas de memória a serem residentes.

Retornar valor

pfnMakeResidentCb retorna um dos seguintes valores:

Código de retorno Descrição
S_OK Todas as alocações foram feitas residentes na GPU após a saída dessa função e estão prontas para serem acessadas imediatamente.
E_PENDING As alocações foram adicionadas à lista de requisitos de residência do dispositivo, mas ainda têm operações de paginação pendentes para serem concluídas antes de serem acessadas com êxito. Nesse caso, o driver do modo de usuário deve aguardar que PagingFenceValue no objeto de sincronização de cerca monitorado associado a hPagingQueue seja sinalizado antes de enviar buffers de comando que referenciam alocações ou uma falha de página de GPU pode ocorrer.
E_OUTOFMEMORY O gerenciador de memória de vídeo não pode tornar todas as alocações solicitadas residentes. Quando isso acontecer, nenhuma alocação na lista fornecida verá sua contagem de residência modificada. Em outras palavras, esta é uma operação atômica em que toda a alocação aumenta a contagem de residências ou nenhuma delas. Além disso, NumBytesToTrim indica ao driver quantos bytes devem ser cortados da lista de requisitos de residência do dispositivo, chamando pfnEvictCb, antes de tentar tornar as alocações com falha residentes novamente.
O orçamento de memória associado a um aplicativo pode ser alterado de forma assíncrona com o aplicativo em execução. Como consequência disso, cortar o número solicitado de bytes não garantirá que a próxima tentativa de tornar o conjunto de alocações residente terá êxito, pois o orçamento de memória para o aplicativo pode ter diminuído. Devido a isso, um driver deve garantir que ele tente a solicitação de residência em um loop, cortando entre cada iteração, até que a solicitação seja bem-sucedida ou o driver tenha cortado tudo o que puder para fazer o progresso em uma única operação e usar o recurso necessário nessa tentativa final. Se essa tentativa final falhar, o dispositivo subjacente será colocado em erro e o driver do modo de usuário deverá anular a solicitação e retornar ao aplicativo. Nenhum envio adicional para nenhum dos contextos pertencentes a um dispositivo em erro será permitido pelo kernel.
Para o driver de modo de usuário do DirectX 12.0, o pfnMakeResidentCb se comporta um pouco diferente porque não é mais responsável por cortar ou paginar em alocações. Isso é feito para garantir que o estado de todas as alocações após o retorno da chamada permaneça o mesmo que antes da chamada. Isso significa que, se E_OUTOFMEMORY for retornado da função:
- Todas as alocações permanecem em seu estado original.
- As alocações não foram feitas residentes.
- PagingFenceValue deve ser ignorado.
Se o driver precisar executar chamadas pfnMakeResidentCb em vários lotes para acomodar a tradução de recurso para alocação, o driver deverá desfazer quaisquer chamadas anteriores para pfnMakeResidentCb com chamadas equivalentes para pfnEvictCb e propagar o código de erro de volta para o runtime.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10
Servidor mínimo com suporte Windows Server 2016
Plataforma de Destino Área de Trabalho
Cabeçalho d3dumddi.h (inclua D3dumddi.h)

Confira também

D3DDDI_MAKERESIDENT

pfnEvictCb