Solicitando e usando memória surface
O driver de exibição do modo de usuário recebe chamadas para sua função CreateResource quando o runtime do Microsoft Direct3D requer a criação de uma lista de superfícies. O runtime do Direct3D especifica um identificador de recurso para a lista de superfícies que o driver de exibição do modo de usuário usa para chamar de volta para o runtime. O driver de exibição do modo de usuário cria um objeto de recurso para representar a lista de superfícies, gera um identificador exclusivo para esse objeto e retorna o identificador de volta para o runtime do Direct3D. O runtime usa esse identificador exclusivo em chamadas de driver subsequentes para identificar a lista de superfícies. O runtime identifica uma superfície específica especificando o índice da superfície na matriz contida no membro pSurfList da estrutura D3DDDIARG_CREATERESOURCE .
Como o driver de exibição do modo de usuário recebe o identificador de recurso definido pelo driver em chamadas que se referem ao recurso, o driver não é necessário para executar uma pesquisa de identificador dispendiosa para localizar o objeto de recurso definido pelo driver. Da mesma forma, para que o runtime também não seja necessário para executar uma pesquisa de identificador, o driver de exibição do modo de usuário usa o identificador de recurso definido pelo runtime do Direct3D quando o driver de exibição do modo de usuário chama de volta para o runtime.
O driver de exibição do modo de usuário chama a função pfnAllocateCb para alocar memória para as superfícies. Na chamada pfnAllocateCb , o driver de exibição do modo de usuário pode passar dados privados para a lista de superfícies e para cada superfície individual nos membros pPrivateDriverData das estruturas D3DDDICB_ALLOCATE e D3DDDI_ALLOCATIONINFO , respectivamente. No entanto, o driver de exibição do modo de usuário não pode receber dados privados dos membros pPrivateDriverData . O driver de exibição do modo de usuário pode alocar memória para esses dados privados e pode liberar a memória após o retorno da chamada pfnAllocateCb ou pode usar a memória de pilha para passar esses dados privados. A função pfnAllocateCb retorna ao driver de exibição do modo de usuário um identificador para cada alocação para cada superfície alocada.
Nota O driver de exibição do modo de usuário deve chamar a função pfnAllocateCb uma vez para cada superfície compartilhada para cada dispositivo. Por exemplo, se o dispositivo 1 criar uma superfície compartilhada que também seja usada pelos dispositivos 2, 3 e 4, os dispositivos 2, 3 e 4 também deverão chamar pfnAllocateCb uma vez para a superfície compartilhada a fim de recuperar o identificador de alocação.
O driver de exibição do modo de usuário deve acompanhar cada superfície para cada identificador de alocação, normalmente, mantendo uma tabela de identificador de superfície para alocação. O driver de exibição do modo de usuário deve armazenar cada identificador de alocação dentro do objeto de recurso definido pelo driver.
Quando o runtime do Direct3D executa uma operação em uma superfície alocada anteriormente (por exemplo, em uma chamada para a função Blt do driver de exibição no modo de usuário), o driver de exibição do modo de usuário recebe o identificador para o recurso, possivelmente com um índice de superfície. O driver de exibição do modo de usuário usa esse identificador de recurso para recuperar o objeto de recurso definido pelo driver. O driver obtém os identificadores de alocação armazenados no objeto de recurso e os monta no buffer de comandos. O driver de exibição do modo de usuário usa os identificadores de alocação que correspondem às superfícies ao chamar a função pfnRenderCb para enviar um buffer de comando para o driver de miniporto de exibição. O driver de miniporto de exibição pode chamar a função DxgkCbGetHandleData para determinar para quais alocações de superfície o driver de exibição do modo de usuário se refere.