Modelo de execução paralela do driver gráfico User-Mode

O driver de exibição no modo utilizador não é carregado em vários processos simultaneamente—a DLL do driver de exibição no modo utilizador é carregada no espaço de endereçamento de cada processo separadamente. Ainda assim, vários fluxos podem ser executados no driver de exibição em modo utilizador ao mesmo tempo. No entanto, cada thread que está a ser executado no controlador de exibição em modo de utilizador deve acessar um dispositivo de exibição diferente, que é criado por uma chamada para a função CreateDevice do controlador de exibição em modo de utilizador. Por exemplo:

  • Um aplicativo que cria dois dispositivos Microsoft Direct3D pode ter dois threads que acessam esses dispositivos independentemente.

  • Uma aplicação pode usar, em duas threads diferentes, um dispositivo Direct3D criado pelo tempo de execução do Microsoft DirectX 9.0 Direct3D junto com um dispositivo Microsoft DirectDraw criado pelo tempo de execução do DirectX 5.0.

Observação Dois ou mais processos que estão utilizando o mesmo dispositivo de apresentação nunca podem ser executados no controlador de vídeo em modo de utilizador, simultaneamente.

Como o driver de miniporta de vídeo, o driver de vídeo de modo de usuário não é necessário para usar nenhuma estrutura de dados global, porque os dispositivos Direct3D são independentes e o estado e os recursos de cada dispositivo não afetam os outros dispositivos. Se o driver de exibição no modo utilizador precisar manter estruturas de dados globais entre dispositivos (como para um gestor de heap de memória do sistema personalizado), ele tem de arbitrar o acesso usando os seus próprios mecanismos. Essas estruturas de dados globais que o motorista gerencia são fortemente desencorajadas. Como o tempo de execução do Direct3D abre uma "exibição" independente do recurso compartilhado em cada dispositivo de exibição de modo de usuário que deve acessar o recurso, os recursos entre processos ou entre dispositivos não devem ser tratados de forma diferente dos recursos que um único processo ou dispositivo usa. O tempo de vida e outros tipos de gerenciamento são manipulados pelo subsistema do kernel de gráficos DirectX (Dxgkrnl.sys).

Em computadores com vários processadores, o runtime do Direct3D pode chamar um driver de display em modo de utilizador a partir de um thread de execução em vez de a partir do thread principal da aplicação. Essa otimização de vários processadores é transparente para o driver de apresentação em modo utilizador. Quando o tempo de execução usa a otimização de vários processadores, ele ainda garante que apenas um thread que faz referência a um determinado dispositivo seja executado no driver a qualquer momento.