Share via


Déploiement de Direct3D 11 pour les développeurs de jeux

Cet article explique comment déployer les composants Direct3D 11 sur un système si nécessaire.

Vue d’ensemble

L’API Direct3D 11 étend l’API Direct3D 10.1 existante avec prise en charge du rendu multithread et de la création de ressources, du nuanceur de calcul, de la mise en place du matériel, de la compression de texture BC6H/BC7 et du modèle de nuanceur HLSL 5.0 avec liaison de nuanceur dynamique. En plus du composant Direct3D 11, un certain nombre de composants graphiques supplémentaires sont inclus dans le runtime DirectX 11 : Direct3D 11, DXGI 1.1, 10level9, le périphérique de rendu logiciel WARP10, Direct2D, DirectWrite et un Direct3D 10.1 mis à jour avec prise en charge de 10level9 et WARP10. Pour plus d’informations sur ces composants et d’autres composants graphiques Windows, consultez API graphiques dans Windows.

Tous ces nouveaux composants graphiques sont intégrés aux systèmes d’exploitation Windows 7 et Windows Server 2008 R2. L’API Direct3D 11 et les composants associés peuvent également être installés sur Windows Vista à l’aide d’une mise à jour système à partir de Windows Update. Cette mise à jour nécessite Windows Vista et Service Pack 2. Les utilisateurs finaux avec les mises à jour automatiques activées auront donc probablement déjà installé les composants Direct3D 11, comme tous les utilisateurs de Windows 7.

L’exemple D3D11InstallHelper est conçu pour simplifier la détection de l’API Direct3D 11, installer automatiquement la mise à jour système si applicable sur l’ordinateur d’un utilisateur final et pour fournir des messages appropriés à l’utilisateur final lors de la procédure manuelle si un Service Pack plus récent est requis.

Notes

Le compilateur HLSL (D3DCompile*.dll) et la bibliothèque d’utilitaireS D3DX pour Direct3D 11 (D3DX11*.dll) ne sont intégrés à aucune version du système d’exploitation Windows, mais ils peuvent être déployés dans le cadre du programme d’installation d’une application à l’aide de la technologie DirectSetup existante ; Pour plus d’informations sur l’utilisation de DirectSetup, consultez Installation de DirectX pour les développeurs de jeux. « Effects 11 » est disponible en tant que bibliothèque de prise en charge de source partagée dans Effects for Direct3D 11 Update, et vous pouvez l’inclure directement dans une application (tout comme la bibliothèque d’utilitaireS DXUT). Par conséquent, il n’a pas d’exigences supplémentaires de redistribution au moment de l’exécution.

Direct3D 11.3

Windows 10 est fourni avec l’API Direct3D 11.3 intégrée. Consultez Fonctionnalités de Direct3D 11.3 pour obtenir la liste des nouvelles fonctionnalités de l’API Direct3D 11.3.

Direct3D 11.2

Windows 8.1 et Windows Server 2012 R2 sont fournis avec l’API Direct3D 11.2 intégrée. Consultez Fonctionnalités de Direct3D 11.2 pour obtenir la liste des nouvelles fonctionnalités de l’API Direct3D 11.2.

Direct3D 11.1

Windows 8 et Windows Server 2012 sont fournis avec l’API Direct3D 11.1 intégrée. La prise en charge partielle de l’API Direct3D 11.1 est disponible sur Windows 7 ou Windows Server 2008 R2 avec la mise à jour de la plateforme pour Windows 7 installée. Pour plus d’informations sur la mise à jour de plateforme pour Windows 7, consultez Mise à jour de plateforme pour Windows 7.

D3D11InstallHelper.dll

D3D11InstallHelper.dll héberge la fonctionnalité de base pour la détection des composants Direct3D 11 et l’exécution de la mise à jour système via le service Windows Update, le cas échéant. La DLL n’affiche aucun message ou boîte de dialogue directement.

La DLL se compose des points d’entrée suivants :

CheckDirect3D11Status

Cette fonction effectue les vérifications nécessaires et retourne la status de Direct3D 11 sur cet ordinateur. Cette fonction ne nécessite pas de droits d’administrateur.

  • Un status de D3D11IH_STATUS_INSTALLED indique que Direct3D 11 est déjà installé sur l’ordinateur et qu’il est prêt à être utilisé.
  • D3D11IH_STATUS_NOT_SUPPORTED indique que cette version de Windows ne prend pas en charge Direct3D 11 ou les technologies associées.
  • Une status de D3D11IH_STATUS_NEED_LATEST_SP indique que le dernier Service Pack Windows Vista doit être installé par l’utilisateur.
  • Enfin, une status de D3D11IH_STATUS_REQUIRES_UPDATE indique que Direct3D 11 n’est pas installé sur le système, mais que la mise à jour système s’applique à cette version de Windows.

DoUpdateForDirect3D11

Cette fonction utilise l’API Windows Update pour effectuer la mise à jour du système pour l’installation de Direct3D 11 sur ce système, le cas échéant. Notez que cette fonction nécessite une connectivité réseau à Windows Update pour réussir, ainsi que des droits d’administration. Il prend une fonction de rappel de progression facultative et un pointeur de contexte utilisateur, puis retourne un code de résultat final une fois terminé.

  • Le résultat D3D11IH_RESULT_SUCCESS indique que la mise à jour système a été appliquée et est prête à être utilisée, tandis que D3D11IH_RESULT_SUCCESS_REBOOT indique que la mise à jour système nécessite le redémarrage de l’ordinateur avant d’être terminée. Notez que cette fonction ne planifie pas de redémarrage du système.
  • D3D11IH_RESULT_NOT_SUPPORTED indique que la mise à jour système ne s’applique pas à cette version de Windows. Ce résultat ne doit pas se produire si cette fonction est appelée uniquement après avoir obtenu un D3D11IH_STATUS_REQUIRES_UPDATE status à partir de CheckDirect3D11Status.
  • Un résultat de D3D11IH_RESULT_UPDATE_NOT_FOUND indique que le package de mise à jour système n’a pas été trouvé sur les serveurs Windows Update.
  • Si le téléchargement ou l’installation du Windows Update échoue, D3D11IH_RESULT_UPDATE_DOWNLOAD_FAILED ou D3D11IH_RESULT_UPDATE_INSTALL_FAILED seront retournés en conséquence.
  • Si une erreur de connectivité réseau est retournée à partir de l’API Windows Update, le résultat D3D11IH_RESULT_WU_SERVICE_ERROR est retourné, indiquant que le problème peut être intermittent ou lié à la configuration réseau ou aux paramètres de pare-feu. La nouvelle tentative de la fonction de mise à jour peut réussir.

Pour plus d’informations sur l’API Windows Update, consultez API Windows Update Agent.

D3D11Install.exe

Notes

D3D11Install.exe nécessite l’exécution de D3D11InstallHelper.dll.

D3D11Install.exe est un outil permettant d’utiliser D3D11InstallHelper.dll en tant que programme d’installation autonome avec des messages d’interface utilisateur et d’utilisateur final, ainsi qu’un exemple d’utilisation correcte de la DLL. Le processus se termine par un 0 si Direct3D 11 est déjà installé, si la mise à jour système s’applique correctement sans nécessiter de redémarrage du système, si une installation du Service Pack est requise ou si Direct3D 11 n’est pas pris en charge par cet ordinateur. La valeur 1 est retournée si la mise à jour système est appliquée avec succès et qu’un redémarrage du système est nécessaire pour se terminer. La valeur 2 est retournée pour d’autres conditions d’erreur. Notez que ce fichier exécutable nécessite des droits d’administrateur pour s’exécuter et qu’il a un manifeste qui demande une élévation lors de l’exécution sur Windows Vista ou Windows 7 avec UAC activé. D3D11Install.exe peut être utilisé comme un outil autonome pour le déploiement de la mise à jour Direct3D 11, ou il peut être utilisé directement par les programmes d’installation.

Il prend en charge les commutateurs de ligne de commande suivants :

/Calme

N’affiche aucun message, invite, boîte de dialogue de progression ou message d’erreur.

/Passif

N’affiche aucun message, invite ou message d’erreur, mais affiche la boîte de dialogue progression.

/minimal

Affiche uniquement les invites minimales.

/y

Supprime l’invite à confirmer l’installation de la mise à jour, si nécessaire et applicable, pour une installation standard et minimale.

/langid décimal

Force le code d’identificateur de langue à utiliser lors de l’affichage des messages de l’utilisateur final et des ressources de boîte de dialogue. La valeur par défaut est 1024, qui utilise le paramètre de langue par défaut du système.

/Wu

Force l’utilisation de Windows Update plutôt que la valeur par défaut du système, qui peut être Windows Server Update Services (WSUS) s’exécutant sur un serveur managé ou une autre configuration non standard.

Intégration à des programmes d’installation

Pour respecter l’exigence technique 3.1 de l’installation facile de support pour Jeux pour Windows, vous devez veiller à ce que toutes les invites de l’utilisateur final soient présentées au début du processus d’installation, et pour s’assurer qu’il n’y a pas plusieurs invites d’élévation liées à l’UAC. Il existe trois options de base pour atteindre cet objectif :

  1. La méthode la plus simple consiste à exécuter le D3D11Install.exe avec le commutateur de ligne de commande /minimal. Cela doit être effectué au début de la Q&A du programme d’installation, et l’installation doit utiliser la valeur de retour 1 pour indiquer qu’un redémarrage doit être planifié à la fin de l’installation. L’exécution du programme nécessite des droits d’administration.
  2. Utilisez D3D11InstallHelper.dll directement pour détecter la nécessité de la mise à jour, en fournissant tous les messages de l’utilisateur final nécessaires au status D3D11IH_STATUS_NEED_LATEST_SP, où la résolution nécessite des opérations manuelles de l’utilisateur. Le status résultat de D3D11IH_STATUS_NOT_SUPPORTED peut être utilisé pour contrôler l’installation des ressources liées à Direct3D 11, ou comme condition d’erreur pour les applications Direct3D 11 uniquement, mais il ne s’agit pas nécessairement d’un message de l’utilisateur final utile. Pour le status D3D11IH_STATUS_REQUIRES_UPDATE, le programme d’installation peut utiliser directement le point d’entrée de DLL DoUpdateForDirect3D11 pour effectuer la mise à jour et gérer les différents messages de l’utilisateur final résultants. Vous trouverez des exemples de messages standard en examinant la boîte de dialogue D3D11Install.exe et les ressources de la table de chaînes. Le point d’entrée de mise à jour nécessite des droits d’administrateur.
  3. Une approche hybride consiste à case activée status avec D3D11InstallHelper.dll, et dans le cas du code status D3D11IH_STATUS_NEED_LATEST_SP ou D3D11IH_STATUS_REQUIRES_UPDATE, D3D11Install.exe peut être exécuté avec les commutateurs /minimal et /y pour afficher la boîte de dialogue ou pour effectuer la mise à jour, si nécessaire. Ces étapes doivent être effectuées au début du processus d’installation, généralement immédiatement après le Q&A, et l’exécution de l’exécutable nécessite des droits d’administration.

Intégration à InstallShield

La gestion du déploiement Direct3D 11 à partir de InstallShield InstallScript s’effectue facilement à l’aide de l’exemple D3D11InstallHelper. Les étapes requises pour l’intégration à InstallShield à l’aide d’InstallScript sont les suivantes (à l’aide de la méthode 3, décrite dans la section précédente) :

  1. Ouvrez un projet InstallScript dans l’éditeur InstallShield.

  2. Ajoutez D3D11InstallHelper.dll et D3D11Install.exe au projet dans Fichiers de support.

    Pour ajouter les fichiers au projet InstallShield

    1. Sous l’onglet Installation Designer, cliquez sur Fichiers/panneaux d’affichage de prise en charge sous Comportement et logique dans le volet de navigation à gauche.
    2. Cliquez sur Indépendant de la langue, puis cliquez avec le bouton droit dans la fenêtre Fichiers et sélectionnez Insérer des fichiers. Recherchez des D3D11InstallHelper.dll et des D3D11Install.exe. L’emplacement par défaut de ces fichiers est : SDK root\Samples\C++\Misc\Bin\x86
  3. Dans l’Explorateur InstallScript, cliquez sur le fichier InstallScript (généralement Setup.rul) qui appellera la DLL ou l’exécutable, situé sous Comportement et logique dans le volet de navigation à gauche.

  4. Collez le fichier InstallScript suivant dans le fichier en haut :

#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 prototype 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 prototype NUMBER D3D11InstallHelper.DoUpdateForDirect3D11IS(BOOL); ```

  1. Collez le code InstallScript suivant dans le fichier de la fonction OnFirstUIBefore , juste avant le retour 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;
    

Intégration à un package MSI

Voici une description générale des étapes requises pour intégrer le déploiement Direct3D 11 à l’aide d’actions personnalisées MSI (à l’aide de la méthode 3, décrite plus haut dans cette rubrique) :

  1. Ajoutez une propriété à la table Msi Property appelée RelativePathToD3D11IH qui contient le chemin d’accès relatif à D3D11Install.exe et D3D11InstallHelper.dll pendant l’installation (généralement dans l’image multimédia). Cela définit également une propriété MSI D3D11IH_STATUS sur la status retournée par CheckDirect3D11Status (propriété de chaîne égale au symbole d’énumération ou « ERROR »).
  2. Après l’action CostFinalize, appelez la fonction D3D11InstallHelper.dll SetD3D11InstallMSIProperties en tant qu’action personnalisée immédiate pour définir les propriétés MSI appropriées pour les autres actions personnalisées.
  3. Lors de l’installation, déclenchez une action personnalisée différée après l’action InstallFiles qui appelle la fonction D3D11InstallHelper.dll DoD3D11InstallUsingMSI. L’action personnalisée doit définir l’indicateur msidbCustomActionTypeNoImpersonate pour qu’il s’exécute dans un contexte avec élévation de privilèges.
  4. Après l’action InstallFinalize, appelez la fonction D3D11InstallHelper.dll FinishD3D11InstallUsingMSI en tant qu’action personnalisée immédiate pour gérer le code de résultat de la demande de redémarrage réussie, si nécessaire.

Cette procédure est décrite en détail dans les instructions suivantes, qui décrivent un processus qui peut être effectué à l’aide d’un éditeur MSI, tel que l’éditeur Orca. Certains éditeurs MSI ont des Assistants qui simplifient certaines de ces étapes de configuration.

Pour configurer un package MSI pour l’intégration à D3D11InstallHelper.dll

  1. Ouvrez le package MSI dans Orca.

  2. Ajoutez la ligne indiquée dans le tableau suivant à la table Binary dans le package MSI.

    Nom Données
    D3D11IH Chemin d’accès au DLL\D3D11InstallHelper.dll

     

    Notes

    Ce fichier étant incorporé dans le package MSI, vous devez effectuer cette étape chaque fois que vous recompilez D3D11InstallHelper.dll.

     

  3. Ajoutez les lignes indiquées dans le tableau suivant à la table CustomAction dans le package MSI.

    Action Type Source Cible
    Direct3D11SetProps msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH SetD3D11InstallMSIProperties
    Direct3D11DoInstall msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 D3D11IH DoD3D11InstallUsingMSI
    Direct3D11Finish msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH FinishD3D11InstallUsingMSI

     

  4. Ajoutez les valeurs indiquées pour Action, Condition et Sequence dans le tableau suivant à la table InstallExecuteSequence dans le package MSI.

    Action Condition Séquence Notes
    Direct3D11SetProps 1016 Le numéro de séquence place l’action peu après CostFinalize.
    Direct3D11DoInstall NON installé 4004 Cette action personnalisée se produit uniquement lors d’une nouvelle installation pour tous les utilisateurs. Le numéro de séquence place l’action après InstallFiles et après les restaurations.
    Direct3D11Finish 6615 Le numéro de séquence place l’action peu après InstallFinalize.

     

  5. Ajoutez la ligne indiquée dans le tableau suivant à la table Property dans le package MSI.

    Propriété Valeur
    RelativePathToD3D11IH chemin d’accès de fichier relatif qui contient D3D11Install.exe et D3D11InstallHelper.dll

     

    Notes

    L’emplacement spécifié par le chemin d’accès est relatif à l’emplacement spécifié par le chemin d’installation, par exemple, « redist\ ».

     

  6. Enregistrez le package MSI. Pour plus d’informations sur les packages MSI et Windows Installer, consultez Windows Installer.

Conseils de débogage

Les D3D11InstallHelper.dll et les D3D11Install.exe peuvent être générés avec la configuration Debug dans Visual Studio, et ces versions impriment les messages dans le mécanisme de sortie de débogage Windows standard.

Paramètres Entreprise

L’exemple D3D11InstallHelper est conçu pour un déploiement standard via Windows Update, qui est le scénario le plus courant pour l’installation d’un jeu par les consommateurs. Toutefois, de nombreux développeurs de jeux, travaillant pour des éditeurs et des studios de développement, le font dans des paramètres d’entreprise qui ont un serveur géré localement fournissant des mises à jour logicielles à l’aide de la technologie Windows Server Update Services (WSUS). Dans ce type d’environnement, l’administrateur informatique local contrôle les mises à jour mises à la disposition des ordinateurs du réseau d’entreprise, et la version consommateur standard de la base de connaissances 971644 n’est pas disponible.

Il existe trois solutions de base pour le déploiement de DirectX 11 dans les paramètres d’entreprise/d’entreprise :

  • Dans certaines configurations, il est possible d’case activée Windows Update directement plutôt que d’utiliser le serveur WSUS géré localement. Pour cette raison, D3D11InstallHelper prend en charge le commutateur de ligne de commande /wu . Toutefois, tous les réseaux d’entreprise n’autorisent pas les connexions aux serveurs Microsoft publics.
  • L’administrateur informatique local peut approuver kb 971512, une mise à jour prise en charge par l’entreprise déployée à partir de WSUS, qui inclut l’API Direct3D 11. Il s’agit de la seule option permettant à un utilisateur Standard d’obtenir la mise à jour Direct3D 11 dans un environnement entièrement verrouillé.
  • Vous pouvez également installer manuellement 971512 Kb .

Il est très rare que l’ordinateur d’un joueur ne puisse obtenir des mises à jour qu’à partir d’un serveur WSUS géré localement, et seuls les développeurs de grandes organisations sont susceptibles de se trouver dans de tels environnements.

Pare-feu Windows pour les développeurs de jeux

Windows Games Explorer pour les développeurs de jeux