2017-05-25 2 views
1

Je pense que je sais comment cela devrait fonctionner - seulement ce n'est pas le cas. J'ai un ordinateur portable Lenovo avec un 860m et une carte Intel intégrée.Comment donner une option pour sélectionner une carte graphique dans une application DirectX 11?

je peux courir mon application à partir de l'extérieur avec les deux gpu, et tout fonctionne bien: le gpu sélectionné sera l'adaptateur avec l'index 0, il a l'écran d'ordinateur portable en sortie, etc.

Cependant, si je tente de utiliser l'adaptateur avec l'index 1 (si je lance normalement l'application, c'est le nvidia, si je le lance avec le nvidia gpu, c'est l'intel), IDXGIOutput :: EnumOutputs ne trouve rien, donc je ne peux pas configurer le afficher les paramètres correctement.

Je pensais simplement ignorer la configuration, ou utiliser la sortie de l'autre carte - mais alors il n'y a aucun moyen de filtrer les adaptateurs sans sortie réelle - par ex. mon pc a aussi une carte intégrée, mais il n'y a pas de moniteur physiquement connecté, donc utiliser cela ne devrait pas être possible.

J'ai également essayé de trouver exactement ce que fait le bouton de menu contextuel "Exécuter avec un processeur graphique", mais je n'ai rien trouvé.

L'objectif est de donner à l'utilisateur la possibilité de sélectionner l'adaptateur dans l'application, ses choix sont sauvegardés dans un fichier de configuration et seront utilisés après le redémarrage - mais je ne trouve pas le moyen de filtrer les adaptateurs possibles .

+0

je pense que je l'ai essayé cela avant, et si je me souviens, je n'étais pas capable de le faire. Je ne suis pas sûr à 100% (c'est pourquoi je le poste comme un commentaire), mais je pense que c'est lié au matériel et une fois que vous le démarrez en mode plein écran, il passera automatiquement à la carte nvidia. En outre, vous pouvez aller au panneau de contrôle de nvidia et mettre là la performance maximum pour votre application et il fonctionnera toujours sur la carte de NVIDIA. –

+0

Bienvenue dans Stack Overflow! S'il vous plaît [modifier] votre question pour montrer [le code que vous avez jusqu'à présent] (http://whathaveyoutried.com). Vous devez inclure au moins un aperçu (mais de préférence un [mcve]) du code que vous rencontrez des problèmes, puis nous pouvons essayer d'aider avec le problème spécifique. Vous devriez aussi lire [ask]. –

Répondre

1

Vous avez probablement un système 'adaptateur hétérogène' (par exemple NVIDIA Optimus ou AMD PowerXPress). Ces solutions permettent au pilote de manipuler l'adaptateur par défaut et l'énumération des périphériques pour contrôler quelle carte est utilisée. Vous n'avez vraiment aucun contrôle programmatique sur, mais vous pouvez injecter quelque chose dans l'application de bureau « classique » votre Win32 qui encouragera le conducteur à sélectionner la partie discrète:

// Indicates to hybrid graphics systems to prefer the discrete part by default 
extern "C" 
{ 
    __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; 
    __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; 
} 
+1

Cela fonctionne en effet. Dommage que je ne puisse pas donner le choix à l'utilisateur directement. Quoi qu'il en soit, s'il le force à partir de l'intégré, il est toujours utilisé, donc si quelqu'un sait vraiment ce qu'il fait, il peut toujours le faire. Je suppose que tout ira bien alors. Merci pour votre réponse :) – GameCodeR