У нас есть приложение DirectX с двумя экранами, которое ранее работало с постоянной частотой 60 кадров в секунду (частота синхронизации мониторов), используя NVIDIA 8400GS (256 МБ). Однако, когда мы обменяли карту на одну с 512 МБ ОЗУ, частота кадров изо всех сил пыталась получить более 40 FPS. (Это становится настолько высоким, потому что мы используем тройную буферизацию.) Две карты от одного производителя (PNY). При прочих равных условиях это приложение для Windows XP Embedded, и мы начали с нового образа для каждой карты. Номер версии драйвера: 169.21.
Приложение все 2D. И.Е. просто куча текстурированных четырехугольников и куча предварительно отрендеренной графики (отсюда и необходимость обновления памяти карты). У нас также есть сжатые анимации, которые процессор декодирует на лету - это связано с блокировкой текстуры. Блокировки занимают вечность, но я также пытался иметь отдельную текстуру системной памяти для обновления ЦП, а затем обновлять визуализированную текстуру, используя метод UpdateTexture устройства. Нет общей разницы в производительности.
Несмотря на то, что я прочитал все часто задаваемые вопросы, которые я могу найти в Интернете о производительности DirectX, это все еще первый раз, когда я работал над проектом DirectX, поэтому любые тайные знания, которые у вас есть, были бы полезны. :)
Еще одна вещь, пока я нахожусь на эту тему; при вызове Present в цепочках подкачки кажется, что DirectX ожидает завершения подарка, несмотря на то, что я использую D3DPRESENT_DONOTWAIT в обоих параметрах присутствия (PresentationInterval) и флагах самого вызова. Поскольку это приложение с двумя экранами, это проблема, так как два монитора, кажется, не заблокированы, я работаю над этим, выполняя вызовы Present через пул потоков. Что может быть основной причиной этого?