support rtx new graficos geforce card autodetect c++ directx nvidia optimus

c++ - rtx - nvidia installer



Forzando NVIDIA GPU programáticamente en computadoras portátiles Optimus (2)

Estoy programando un juego DirectX, y cuando lo ejecuto en una computadora portátil Optimus, se utiliza la GPU Intel, lo que resulta en un rendimiento horrible. Si fuerzo a la GPU NVIDIA usando el menú contextual o cambiando el nombre de mi ejecutable a bf3.exe o algún otro nombre famoso ejecutable del juego, el rendimiento es el esperado.
Obviamente, tampoco es una solución aceptable para cuando tengo que redistribuir mi juego, ¿así que hay una manera de forzar a la computadora portátil para que use la GPU NVIDIA?

Ya he intentado usar DirectX para enumerar adaptadores (IDirect3D9 :: GetAdapterCount, IDirect3D9 :: GetAdapterIdentifier) ​​y no funciona: solo se informa 1 GPU (la que está en uso).



El documento técnico de Optimus en http://www.nvidia.com/object/LO_optimus_whitepapers.html no tiene claro exactamente lo que se necesita antes de realizar un cambio a GPU. El documento técnico dice que las llamadas DX, DXVA y CUDA se detectan y harán que se encienda la GPU. Pero además, la decisión se basa en los perfiles mantenidos por NVIDIA y, por supuesto, todavía no existe uno para su juego.

Una cosa a intentar sería hacer una llamada CUDA, por ejemplo a cuInit(0); . A diferencia de DX y DXVA, no hay forma de que los gráficos integrados de Intel manejen eso, por lo que debería forzar un cambio a la GPU.