Mi juego usa DirectX 10, y tengo un problema en el que los usuarios informan que mi juego no se está recuperando en su tarjeta gráfica. En cambio, prefiere ejecutarse en su tarjeta Intel integrada, arruinando el rendimiento. Es posible que esto esté relacionado con Windows 8. También podría estar relacionado con tarjetas móviles.
Hasta ahora, he estado creando el dispositivo DirectX 10 sin adaptador especificado (como he visto en todos los ejemplos / demostraciones hasta ahora), para permitir que DirectX elija su propio adaptador. Aparentemente voy a tener que cambiar eso.
Ya tengo una función que se ejecuta a través de todos los adaptadores disponibles y elige el que tiene la mayor cantidad de memoria dedicada. Eso funciona muy bien para corregir el problema, pero ¿es correcto en general?
Desafortunadamente, no puedo confiar en que la tarjeta tenga una salida de video válida (es decir, un monitor conectado) ya que las máquinas afectadas por este problema no informan salidas para la tarjeta deseada.
¿Qué algoritmo puedo usar para elegir correctamente qué adaptador usar con DirectX?
Respuestas:
La selección del adaptador con la memoria dedicada más alta disponible podría funcionar en muchos casos, pero en algunos casos una GPU con menos potencia de procesamiento podría tener más memoria dedicada, y su juego aún se ejecutará en el adaptador "incorrecto".
Esto me lleva a una contrapregunta, ¿cuál es el adaptador correcto? ¿El que tiene más poder computacional? ¿El que tiene más memoria? ¿A la que está conectada la pantalla principal? ¿El que consume menos energía? Todas estas preguntas probablemente tienen diferentes respuestas por usuario. Alguien que use una computadora portátil podría preferir una batería de larga duración en lugar de mejores gráficos. Alguien podría preferir jugar en su monitor secundario (por ejemplo, un televisor).
Por lo tanto, muchos juegos permiten al usuario decidir qué GPU quieren usar. La mayoría de los fabricantes de GPU tienen paneles de control donde se puede elegir la GPU preferida (incluso por aplicación). Algunos juegos tienen un diálogo de inicio que permite al usuario seleccionar explícitamente la GPU preferida. Este diálogo de inicio a menudo solo se muestra en la primera ejecución o después de bloqueos, por lo que también puede actuar como una buena herramienta de recuperación.
Nvidia prefiere selección GPU , AMD selección GPU preferida , Flatout 2 selección GPU preferida
fuente
Flush
y un objetivo ficticio en lugar dePresent
una cadena de intercambio) en cada uno y elegir el que complete más rápido como predeterminado. Sin embargo, aún debe permitir que los usuarios elijan, ya que pueden optar por sacrificar la velocidad de fotogramas para obtener una mejor duración de la batería.Permitiría al jugador elegir qué tarjeta de video usar, es decir, a través de una lista desplegable en el menú de opciones. Puede usar la GPU con la VRAM, la velocidad del reloj, etc. más altas detectadas como valor predeterminado. Podrías ir más allá y pedirle al jugador que elija entre "alto rendimiento" y "ahorro de energía" (elige la tarjeta de menor especificación) para el valor predeterminado cuando se inicia el juego por primera vez, y luego dejar que sean más específicos con su elección en El menú de opciones.
Esta es una solución simple que tampoco molestará al jugador si elige la tarjeta de video no deseada, ya que es bastante fácil para ellos cambiarla si elige la tarjeta incorrecta.
fuente
Si elige el adaptador basado en el que tiene más memoria, es posible que tenga problemas para detectar con precisión la cantidad de memoria utilizada por Intel HD Graphics. Intel HD Graphics tiene acceso a dos bancos de memoria; uno dedicado y otro compartido con la CPU. El tamaño de los dos bancos se refleja en la estructura DXGI_ADAPTER_DESC como DedicatedVideoMemory y SharedSystemMemory. Para fines de comparación con otros adaptadores, puede usar solo el banco dedicado o puede usar ambos.
Intel tiene una muestra de detección de GPU que también muestra cómo medir ambos bancos de memoria.
fuente