c++ - procesador - seleccionar tarjeta de video predeterminada amd
¿Forzar a la máquina a usar una tarjeta gráfica dedicada? (2)
Soy parte de un equipo que desarrolla una aplicación que usa C ++ con SDL y OpenGL.
En las computadoras portátiles cuando se ejecuta la aplicación, no se utiliza la tarjeta gráfica dedicada y el contexto GL no puede crearse porque la tarjeta gráfica integrada no admite la versión de GL que deseamos.
Tengo la sensación de que este problema es específico de la computadora portátil en cuestión y no algo que podamos resolver a través del código. Pero, si alguien sabe si hay una solución, sería genial.
¿Utiliza gráficos dedicados de NVidia? AFAIK, el proceso de cambio automático de integrado a dedicado se basa en perfiles de aplicación. Su aplicación no está en la lista de aplicaciones 3D conocidas del controlador y, por lo tanto, el usuario debe cambiar manualmente a la GPU dedicada.
Intente cambiar el nombre del ejecutable de su aplicación a algo que el controlador busca. Por ejemplo, "Doom3.exe". Si eso funciona, entonces has encontrado tu problema.
Si eso no fue de ayuda, intente seguir las instrucciones de este video sobre cómo hacer que el controlador inserte su aplicación en su lista de aplicaciones 3D:
http://www.frequency.com/video/how-to-whitelist-game-with-nvidias/24814032
Pero lo anterior solo sirve para verificar si este es realmente su problema. Para una solución real a esto, debe consultar con los proveedores de controladores gráficos (AMD y NVidia) la mejor manera de insertar un perfil para su aplicación en sus listas. NVidia proporciona NVAPI y AMD tiene ADL y AGS . Definitivamente vale la pena estudiar.
La manera más fácil de C ++ de garantizar que la tarjeta gráfica dedicada se use en lugar de los gráficos conmutables de chipset en Windows es exportar los siguientes símbolos (código de ejemplo MSVC):
Habilite gráficos dedicados para NVIDIA :
extern "C"
{
__declspec(dllexport) unsigned long NvOptimusEnablement = 0x00000001;
}
Habilite gráficos dedicados para AMD Radeon :
extern "C"
{
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
}
Advertencia: si el usuario ha creado un perfil para que la aplicación use el chipset integrado, entonces estos no funcionarán.
No estoy seguro de si esto funcionaría de manera similar en Linux / MacOS (poco probable).