Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como implantar os componentes do Direct3D 11 em um sistema, se necessário.
- Visão geral
- direct3D 11.3
- direct3D 11.2
- direct3D 11.1
- D3D11InstallHelper.dll
- D3D11Install.exe
- integração aos programas de instalação
- dicas de depuração
- configurações corporativas
- artigos relacionados
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:
- 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.
- 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.
- 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):
Abra um projeto InstallScript no editor InstallShield.
Adicione D3D11InstallHelper.dll e D3D11Install.exe ao projeto em arquivos de suporte .
Adicionar os arquivos ao do Projeto InstallShield
- Na guia do Designer de Instalação, clique em arquivos de suporte/ em Comportamento e Lógico no painel de navegação à esquerda.
- 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
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.
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); ```
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):
- 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").
- 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.
- 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.
- 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
Abra o pacote MSI em Orca.
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.
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 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. 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\".
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.