Suporte a vários processadores

Os drivers de exibição no modo de usuário em computadores com vários processadores podem permitir que o runtime do Microsoft Direct3D manipule otimizações de vários processadores ou os drivers possam executar suas próprias otimizações de vários processadores.

Otimizações de Multiple-Processor tratadas por runtime

As otimizações de vários processadores que são tratadas pelo runtime do Direct3D são habilitadas apenas em drivers que dão suporte às funções LockAsync, UnlockAsync e Rename . Essas funções permitem que as otimizações de vários processadores funcionem bem com aplicativos que frequentemente bloqueiam recursos dinâmicos. As funções LockAsync e UnlockAsync , juntamente com a função GetQueryData , devem ser reentrantes em drivers que expõem uma versão DDI de 0x0000000B ou superior. O driver retorna o valor de versão DDI no membro DriverVersion da estrutura D3D10DDIARG_OPENADAPTER em uma chamada para a função OpenAdapter do driver. Quando o runtime chama uma função de driver de maneira reentrante, um thread pode ser executado dentro dessa função, enquanto outro thread que referencia o mesmo dispositivo de exibição é executado dentro de outra função de driver.

O runtime do Direct3D usa otimizações de vários processadores em algumas situações para descarregar o trabalho em um processador separado e melhorar o desempenho do computador. Quando as otimizações de vários processadores são habilitadas, uma camada de software adicional é adicionada entre o runtime do Direct3D e o driver de exibição do modo de usuário. Essa camada de software intercepta todas as chamadas que o runtime do Direct3D faria para as funções do driver de exibição no modo de usuário.

Em vez de chamar o driver de exibição do modo de usuário diretamente, a camada de software enfileira comandos em lotes que um thread de trabalho processa de forma assíncrona. No entanto, a camada de software não pode colocar em lote todas as chamadas feitas para as funções do driver de exibição no modo de usuário. Em particular, a camada de software não pode chamar em lote funções que retornam informações (por exemplo, CreateResource). Quando a camada de software deve chamar um desses tipos de funções de driver, ela libera todos os comandos enfileirados por meio do thread de trabalho e, em seguida, a camada de software chama a função de driver no thread do aplicativo main.

Otimizações de Multiple-Processor tratadas pelo driver

Se um driver executar suas próprias otimizações de vários processadores, ele não deverá implementar as funções LockAsync, UnlockAsync e Rename . Nessa situação, o driver deve chamar a função pfnSetAsyncCallbacksCb para notificar o runtime se o runtime iniciará ou interromperá o recebimento de chamadas para as funções de retorno de chamada do runtime de um thread de trabalho.

Se o driver executar suas próprias otimizações de vários processadores, ele deverá seguir a mesma política que o runtime do Direct3D usa quando determina habilitar otimizações de vários processadores. Essa política permite o compartilhamento justo de recursos do sistema em todos os processos. Em particular, o driver deve desabilitar otimizações de vários processadores nas seguintes situações:

  • O aplicativo é executado no modo de janela.

  • O computador contém apenas um processador (ou núcleo do processador); o driver deve desabilitar otimizações em computadores com processador único com hyper-threading.

  • O aplicativo solicitou que nenhuma otimização de vários processadores fosse habilitada ou que o aplicativo ussse processamento de vértice de software; essas informações são passadas para a função CreateDevice do driver.

Se os fornecedores quiserem habilitar otimizações de vários processadores em uma dessas situações, eles devem primeiro entrar em contato com a Microsoft.