Compartilhar via


Implantação do Direct3D 11 para desenvolvedores de jogos

Este artigo descreve como implantar os componentes do Direct3D 11 em um sistema, se necessário.

Visão geral

A API do Direct3D 11 estende a API do Direct3D 10.1 existente com suporte para renderização multithreaded e criação de recursos, Sombreador de Computação, mosaico de hardware, compactação de textura BC6H/BC7 e HLSL Shader Model 5.0 com Linkage de Sombreador Dinâmico. Além do componente Direct3D 11, vários componentes gráficos adicionais são incluídos no runtime do DirectX 11: Direct3D 11, DXGI 1.1, 10level9, dispositivo de renderização de software WARP10, Direct2D, DirectWrite e um Direct3D 10.1 atualizado com suporte para 10level9 e WARP10. Para obter informações sobre esses e outros componentes gráficos do Windows, consulte APIs gráficas no Windows.

Todos esses novos componentes gráficos são integrados aos sistemas operacionais Windows 7 e Windows Server 2008 R2. A API do Direct3D 11 e os componentes relacionados também podem ser instalados no Windows Vista usando uma atualização do sistema do Windows Update. Essa atualização requer o Windows Vista e o Service Pack 2. Os usuários finais com atualizações automáticas habilitadas, portanto, provavelmente já terão os componentes do Direct3D 11 instalados, assim como todos os usuários do Windows 7.

O exemplo D3D11InstallHelper foi projetado para simplificar a detecção da API do Direct3D 11, instalar automaticamente a atualização do sistema, se aplicável ao computador de um usuário final, e fornecer mensagens apropriadas ao usuário final no procedimento manual se um Service Pack mais recente for necessário.

Nota

O compilador HLSL (D3DCompile*.dll) e a biblioteca de utilitários D3DX para Direct3D 11 (D3DX11*.dll) não são integrados a nenhuma versão do sistema operacional Windows, mas podem ser implantados como parte do instalador de um aplicativo usando a tecnologia DirectSetup existente; para obter mais informações sobre como usar o DirectSetup, consulte instalação do DirectX para desenvolvedores de jogos. "Efeitos 11" está disponível como uma biblioteca de suporte de origem compartilhada no Effects for Direct3D 11 Updatee você pode incluí-lo diretamente em um aplicativo (assim como a biblioteca de utilitários DXUT). Portanto, ele não tem requisitos adicionais de redistribuição em tempo de execução.

Direct3D 11.3

O Windows 10 é fornecido com a API direct3D 11.3 interna. Consulte Recursos do Direct3D 11.3 para obter uma lista de novos recursos na API do Direct3D 11.3.

Direct3D 11.2

O Windows 8.1 e o Windows Server 2012 R2 são fornecidos com a API Direct3D 11.2 interna. Consulte Recursos do Direct3D 11.2 para obter uma lista de novos recursos na API do Direct3D 11.2.

Direct3D 11.1

O Windows 8 e o Windows Server 2012 são fornecidos com a API Direct3D 11.1 interna. O suporte parcial para a API do Direct3D 11.1 está disponível no Windows 7 ou no Windows Server 2008 R2 com o Platform Update para Windows 7 instalado. Para obter mais informações sobre o Platform Update para Windows 7, consulte Platform Update para Windows 7.

D3D11InstallHelper.dll

D3D11InstallHelper.dll hospeda a funcionalidade principal para detectar componentes do Direct3D 11 e executar a atualização do sistema por meio do serviço Windows Update, se aplicável. A DLL não exibe mensagens ou caixas de diálogo diretamente.

A DLL consiste nos seguintes pontos de entrada:

CheckDirect3D11Status

Essa função executa as verificações necessárias e retorna o status do Direct3D 11 neste computador. Essa função não exige direitos de administrador.

  • Um status de D3D11IH_STATUS_INSTALLED indica que o Direct3D 11 já está instalado no computador e está pronto para uso.
  • D3D11IH_STATUS_NOT_SUPPORTED indica que essa versão do Windows não dá suporte ao Direct3D 11 nem a tecnologias relacionadas.
  • Um status de D3D11IH_STATUS_NEED_LATEST_SP indica que o Service Pack mais recente do Windows Vista deve ser instalado pelo usuário.
  • Por fim, um status de D3D11IH_STATUS_REQUIRES_UPDATE indica que o sistema não tem o Direct3D 11 instalado, mas que a atualização do sistema se aplica a essa versão do Windows.

DoUpdateForDirect3D11

Essa função usa a API do Windows Update para executar a atualização do sistema para instalar o Direct3D 11 nesse sistema, se aplicável. Observe que essa função requer conectividade de rede com o Windows Update para ter êxito, bem como direitos administrativos. Ele usa uma função de retorno de chamada de progresso opcional e um ponteiro de contexto do usuário e retorna um código de resultado final quando concluído.

  • O resultado do D3D11IH_RESULT_SUCCESS indica que a atualização do sistema foi aplicada e está pronta para uso, enquanto D3D11IH_RESULT_SUCCESS_REBOOT indica que a atualização do sistema exige que o computador seja reiniciado antes de ser concluído. Observe que essa função não agenda uma reinicialização do sistema.
  • D3D11IH_RESULT_NOT_SUPPORTED indica que a atualização do sistema não se aplica a esta versão do Windows. Esse resultado não deve ocorrer se essa função for chamada somente depois de obter um status de D3D11IH_STATUS_REQUIRES_UPDATE de CheckDirect3D11Status.
  • Um resultado de D3D11IH_RESULT_UPDATE_NOT_FOUND indica que o pacote de atualização do sistema não foi encontrado nos servidores do Windows Update.
  • Se a instalação ou o download do Windows Update falhar, D3D11IH_RESULT_UPDATE_DOWNLOAD_FAILED ou D3D11IH_RESULT_UPDATE_INSTALL_FAILED será retornado como resultado.
  • Se um erro de conectividade de rede for retornado da API do Windows Update, o resultado do D3D11IH_RESULT_WU_SERVICE_ERROR será retornado, indicando que o problema pode ser intermitente ou relacionado à configuração de rede ou às configurações de firewall. Tentar a função de atualização novamente pode ter êxito.

Para obter mais informações sobre a API do Windows Update, consulte a API do Agente do Windows Update.

D3D11Install.exe

Nota

D3D11Install.exe requer D3D11InstallHelper.dll para executar.

D3D11Install.exe é uma ferramenta para usar D3D11InstallHelper.dll como um instalador autônomo completo com mensagens de usuário final e interface do usuário, além de atuar como um exemplo para o uso adequado da DLL. O processo será encerrado com um 0 se o Direct3D 11 já estiver instalado, se a atualização do sistema for aplicada com êxito sem a necessidade de uma reinicialização do sistema, se uma instalação do Service Pack for necessária ou se o Direct3D 11 não tiver suporte neste computador. Um 1 será retornado se a atualização do sistema for aplicada com êxito e exigir uma reinicialização do sistema para ser concluída. Um 2 é retornado para outras condições de erro. Observe que esse arquivo executável requer direitos de administrador para ser executado e tem um manifesto que solicita elevação quando executado no Windows Vista ou windows 7 com o UAC habilitado. D3D11Install.exe pode ser usado como uma ferramenta autônoma para implantar a atualização do Direct3D 11 ou pode ser usada diretamente pelos instaladores.

Ele dá suporte aos seguintes comutadores de linha de comando:

/quiet

Não exibe mensagens, prompts, caixas de diálogo de progresso ou mensagens de erro.

/passiva

Não exibe mensagens, prompts ou mensagens de erro, mas mostrará a caixa de diálogo de progresso.

/mínimo

Mostra apenas prompts mínimos.

/y

Suprime a solicitação para confirmar a instalação da atualização, se necessário e aplicável, para uma instalação padrão e mínima.

/langid decimal

Força o código do identificador de idioma a ser usado ao exibir as mensagens do usuário final e os recursos da caixa de diálogo. O valor padrão é 1024, que usa a configuração de idioma padrão do sistema.

/wu

Força o uso do Windows Update em vez do padrão do sistema, que pode ser o WSUS (Windows Server Update Services) em execução em um servidor gerenciado ou em alguma outra configuração não padrão.

Integração em programas de instalação

Para estar em conformidade com a Instalação Fácil de Suporte, Requisito Técnico 3.1 para Jogos para Windows, é necessário tomar cuidado para que quaisquer prompts do usuário final sejam apresentados no início do processo de instalação e garantir que não haja vários prompts de elevação relacionados ao UAC. Há três opções básicas para atingir essa meta:

  1. O método mais básico é executar o D3D11Install.exe com o comutador de linha de comando /mínimo. Isso deve ser feito no início do instalador Q&A e a instalação deve usar o valor retornado de 1 para indicar que uma reinicialização deve ser agendada no final da instalação. A execução do programa requer direitos administrativos.
  2. Use D3D11InstallHelper.dll diretamente para detectar a necessidade da atualização, fornecendo todas as mensagens do usuário final necessárias para o status D3D11IH_STATUS_NEED_LATEST_SP, em que a resolução requer operações manuais do usuário. O resultado do status de D3D11IH_STATUS_NOT_SUPPORTED pode ser usado para controlar a instalação de ativos relacionados ao Direct3D 11 ou como uma condição de erro para aplicativos somente Direct3D 11, mas não é necessariamente uma mensagem útil do usuário final. Para o status D3D11IH_STATUS_REQUIRES_UPDATE, o instalador pode usar diretamente o ponto de entrada DLL DoUpdateForDirect3D11 para executar a atualização e manipular as várias mensagens de usuário final resultantes. Exemplos de mensagens padrão podem ser encontrados examinando a caixa de diálogo D3D11Install.exe e os recursos da tabela de cadeia de caracteres. O ponto de entrada de atualização requer direitos de administrador.
  3. Uma abordagem híbrida é verificar o status com D3D11InstallHelper.dlle, no caso do código de status D3D11IH_STATUS_NEED_LATEST_SP ou D3D11IH_STATUS_REQUIRES_UPDATE, D3D11Install.exe pode ser executado com os comutadores /mínimo e /y para exibir a caixa de diálogo ou executar a atualização, conforme necessário. Essas etapas devem ser executadas no início do processo de instalação, geralmente imediatamente após o Q&A, e executar o executável requer direitos administrativos.

Integração ao InstallShield

O tratamento da implantação do Direct3D 11 do InstallScript do InstallShield é feito facilmente usando o exemplo D3D11InstallHelper. As etapas necessárias para integrar ao InstallShield usando InstallScript são as seguintes (usando o método 3, descrito na seção anterior):

  1. Abra um projeto InstallScript no editor InstallShield.

  2. Adicione D3D11InstallHelper.dll e D3D11Install.exe ao projeto em arquivos de suporte .

    Adicionar os arquivos ao do Projeto InstallShield

    1. Na guia do Designer de Instalação, clique em arquivos de suporte/ em Comportamento e Lógico no painel de navegação à esquerda.
    2. Clique em Independente de Linguagem, clique com o botão direito do mouse na janela arquivos e selecione Inserir Arquivos. Navegue para adicionar D3D11InstallHelper.dll e D3D11Install.exe. O local padrão para esses arquivos é: Raiz do SDK\Samples\C++\Misc\Bin\x86
  3. No Gerenciador do InstallScript, clique no arquivo InstallScript (geralmente Setup.rul) que chamará a DLL ou executável, localizada em Comportamento e Lógica no painel de navegação à esquerda.

  4. Cole o seguinte InstallScript no arquivo próximo à parte superior:

#define D3D11IH_STATUS_INSTALLED 0 #define D3D11IH_STATUS_NOT_SUPPORTED 1 #define D3D11IH_STATUS_REQUIRES_UPDATE 2 #define D3D11IH_STATUS_NEED_LATEST_SP 3 #define D3D11IH_STATUS_ERROR -1 protótipo NUMBER D3D11InstallHelper.CheckDirect3D11StatusIS();

#define D3D11IH_RESULT_SUCCESS 0 #define D3D11IH_RESULT_SUCCESS_REBOOT 1 #define D3D11IH_RESULT_NOT_SUPPORTED 2 #define D3D11IH_RESULT_UPDATE_NOT_FOUND 3 #define D3D11IH_RESULT_UPDATE_DOWNLOAD_FAILED 4 #define D3D11IH_RESULT_UPDATE_INSTALL_FAILED 5 #define D3D11IH_RESULT_WU_SERVICE_ERROR 6 #define D3D11IH_RESULT_ERROR -1 protótipo NUMBER D3D11InstallHelper.DoUpdateForDirect3D11IS(BOOL); ```

  1. Cole o seguinte InstallScript no arquivo na função OnFirstUIBefore, pouco antes do retorno 0:

    Dlg_D3D11:
        UseDLL( SUPPORTDIR ^ "D3D11InstallHelper.DLL" );
        nResult = D3D11InstallHelper.CheckDirect3D11StatusIS();   
        UnUseDLL( SUPPORTDIR ^ "D3D11InstallHelper.DLL" );
    
        if ( nResult = D3D11IH_STATUS_REQUIRES_UPDATE
             || nResult = D3D11IH_STATUS_NEED_LATEST_SP) then
            nResult = LaunchAppAndWait(
    SUPPORTDIR^"D3D11Install.exe",
    "/minimal /y", WAIT);
            if ( nResult < 0 ) then
                MessageBox("Unable to launch D3D11Install.exe",
     SEVERE);
            elseif ( nResult == 1 ) then
                BATCH_INSTALL = 1;
            endif;          
        endif;
    

Integração em um pacote MSI

Veja a seguir uma descrição de alto nível das etapas necessárias para integrar a implantação do Direct3D 11 usando ações personalizadas de MSI (usando o método 3, descrito anteriormente neste tópico):

  1. Adicione uma propriedade à tabela propriedade MSI chamada RelativePathToD11IH que contém o caminho relativo para D3D11Install.exe e D3D11InstallHelper.dll durante a instalação (isso normalmente está na imagem de mídia). Isso também define uma propriedade MSI D3D11IH_STATUS ao status retornado por CheckDirect3D11Status (uma propriedade de cadeia de caracteres igual ao símbolo de enumeração ou "ERROR").
  2. Após a ação CostFinalize, chame a função D3D11InstallHelper.dll SetD3D11InstallMSIProperties como uma ação personalizada imediata para definir as propriedades msi apropriadas para as outras ações personalizadas.
  3. Após a instalação, dispare uma ação personalizada adiada após a ação InstallFiles que chama a função D3D11InstallHelper.dll DoD3D11InstallUsingMSI. A ação personalizada deve definir o sinalizador msidbCustomActionTypeNoImpersonate para ser executado em um contexto elevado.
  4. Após a ação InstallFinalize, chame a função D3D11InstallHelper.dll FinishD3D11InstallUsingMSI como uma ação personalizada imediata para lidar com o código de resultado da solicitação de reinicialização bem-sucedida, se necessário.

Este procedimento é descrito em detalhes nas instruções a seguir, que descrevem um processo que pode ser feito usando um editor msi, como o editor Orca. Alguns editores msi têm assistentes que simplificam algumas dessas etapas de configuração.

Para configurar um pacote MSI para integração com D3D11InstallHelper.dll

  1. Abra o pacote MSI em Orca.

  2. Adicione a linha mostrada na tabela a seguir à tabela Binária no pacote MSI.

    Nome Dados
    D3D11IH Caminho do arquivo para a DLL\D3D11InstallHelper.dll

     

    Nota

    Esse arquivo será inserido no pacote MSI, portanto, você deve executar essa etapa sempre que recompilar D3D11InstallHelper.dll.

     

  3. Adicione as linhas mostradas na tabela a seguir à tabela CustomAction no pacote MSI.

    Ação Tipo Fonte Alvo
    Direct3D11SetProps msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH SetD3D11InstallMSIProperties
    Direct3D11DoInstall msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 D3D11IH DoD3D11InstallUsingMSI
    Direct3D11Finish msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH FinishD3D11InstallUsingMSI

     

  4. Adicione os valores mostrados para Ação, Condição e Sequência na tabela a seguir à tabela InstallExecuteSequence no pacote MSI.

    Ação Condição Seqüenciar Anotações
    Direct3D11SetProps 1016 O número de sequência coloca a ação logo após CostFinalize.
    Direct3D11DoInstall NÃO Instalado 4004 Essa ação personalizada só acontecerá durante uma nova instalação para todos os usuários. O número de sequência coloca a ação após InstallFiles e após as reversões.
    Direct3D11Finish 6615 O número de sequência coloca a ação logo após InstallFinalize.

     

  5. Adicione a linha mostrada na tabela a seguir à tabela Property no pacote MSI.

    Propriedade Valor
    RelativePathToD3D11IH caminho de arquivo relativo que contém D3D11Install.exe e D3D11InstallHelper.dll

     

    Nota

    O local especificado pelo caminho é relativo ao local especificado pelo caminho de instalação, por exemplo, "redist\".

     

  6. Salve o pacote MSI. Para obter informações mais detalhadas sobre pacotes MSI e Windows Installer, consulte Windows Installer.

Dicas de depuração

Tanto D3D11InstallHelper.dll quanto D3D11Install.exe podem ser criados com a configuração de depuração no Visual Studio e essas versões imprimirão mensagens no mecanismo de saída de depuração padrão do Windows.

Configurações corporativas

O exemplo D3D11InstallHelper foi projetado para implantação padrão por meio do Windows Update, que é o cenário mais comum para a instalação de um jogo por consumidores. No entanto, muitos desenvolvedores de jogos, trabalhando para editores e em estúdios de desenvolvimento, fazem isso em configurações empresariais que têm um servidor gerenciado localmente fornecendo atualizações de software usando a tecnologia WSUS (Windows Server Update Services). Nesse tipo de ambiente, o administrador de TI local tem controle de aprovação sobre quais atualizações são disponibilizadas para computadores na rede corporativa e a versão padrão do consumidor da atualização KB 971644 não está disponível.

Há três soluções básicas para implantar o DirectX 11 em configurações corporativas/empresariais:

  • Em algumas configurações, é possível verificar diretamente o Windows Update em vez de usar o servidor WSUS gerenciado localmente. Por esse motivo, D3D11InstallHelper dá suporte à opção de linha de comando /wu. No entanto, nem todas as redes corporativas permitem conexões com os servidores públicos da Microsoft.
  • O administrador de TI local pode aprovar o KB 971512, uma atualização com suporte empresarial implantada do WSUS, que inclui a API do Direct3D 11. Essa é a única opção para um Usuário Standard obter a atualização do Direct3D 11 em um ambiente totalmente bloqueado.
  • Como alternativa, 971512 de KB podem ser instalados manualmente.

É muito raro que o computador de um jogador só possa obter atualizações de um servidor WSUS gerenciado localmente, e são apenas desenvolvedores em grandes organizações que provavelmente estarão nesses ambientes.

firewall do Windows para desenvolvedores de jogos

o Windows Games Explorer para desenvolvedores de jogos