¿Qué puede causar una reducción en la velocidad de fotogramas durante la actualización de una tarjeta gráfica?

StackOverflow https://stackoverflow.com/questions/56424

  •  09-06-2019
  •  | 
  •  

Pregunta

Tenemos dos DirectX en pantalla de la aplicación que anteriormente se ejecutaban en una constante de 60 FPS (la de los monitores tasa de sincronización) con una NVIDIA 8400GS (256 MB).Sin embargo, cuando cambiamos la tarjeta para uno con 512 MB de RAM, la velocidad de fotogramas luchas para obtener por encima de los 40 FPS.(Sólo se pone este alto porque estamos utilizando triple buffering.) Las dos cartas son del mismo fabricante (PNY).Todas las demás cosas son iguales, esto es un Windows XP Embedded aplicación y empezamos con una imagen fresca para cada tarjeta.El número de versión del controlador es 169.21.

La aplicación es todo en 2D.I. E.sólo un montón de textura quads y un montón de gráficos pre-renderizados (de ahí la necesidad de actualizar la memoria de la tarjeta).También tenemos comprimido animaciones que la CPU decodifica sobre la marcha - esto implica una textura de bloqueo.Las cerraduras tomar para siempre, pero también he tratado de tener un sistema de memoria de textura para la CPU para actualizar y, a continuación, actualizar la representación de la textura mediante el dispositivo de UpdateTexture método.Ninguna diferencia en el rendimiento.

A pesar de que he leído a través de todas las preguntas frecuentes que puedo encontrar en internet acerca de DirectX rendimiento, esta es la primera vez que he trabajado en una DirectX proyecto, de manera que cualquier arcano de bits de conocimiento que usted tiene, sería útil.:)

Otra cosa, mientras yo estoy en el tema;cuando se llama Presente en el intercambio de cadenas parece DirectX espera para la presente para realizar independientemente del hecho de que estoy usando D3DPRESENT_DONOTWAIT en ambos parámetros presentes (PresentationInterval) y las banderas de la propia llamada.Porque esta es una de dos pantalla de aplicación este es un problema como el de los dos monitores parecer no se sincroniza, estoy trabajando a su alrededor por la ejecución de la Presente convocatoria a través de un threadpool.¿Qué podría la causa subyacente de este ser?

¿Fue útil?

Solución

Son las cartas exactamente de la misma (tanto GeForce 8400GS), y sólo el tamaño de la memoria se diferencian?Muy a menudo con diferentes tamaños de memoria vienen ligeramente distintas velocidades de reloj (es decir,su tarjeta con más de memoria puede utilizar una memoria más lenta!).

Así que la primera cosa a comprobar sería core GPU y la memoria velocidades de reloj, el uso de algo como GPU-Z.

Otros consejos

Es una sencilla prueba para ver si la superficie de bloqueo es el problema, solo comente la textura de la actualización para ver si la velocidad de fotogramas vuelve a 60hz.Por desgracia, la escritura a un bloqueo de la superficie y la actualización de los recursos de la mata perfomance, siempre lo ha hecho.Están utilizando los mipmaps con las texturas?Sé DX9 añadido generación automática de los mipmaps, podría ser tomar un montón de tiempo para generar los.Si su constante bloqueo de los mismos recursos de cada marco, también se podría tratar de la creación de un grupo de texturas, un poco como triple buffering, excepto con las texturas.Te iba a dejar que el render uso de una sola textura, y en la próxima actualización de elegir la siguiente textura disponibles en la piscina que no está siendo utilizado para representar.A menos que, por supuesto, su memoria limitada o su solo hacer diffs para las texturas animadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top