Почему приложение Direct3D работает лучше в полноэкранном режиме? - PullRequest
24 голосов
/ 20 ноября 2008

Производительность приложения Direct3D значительно выше в полноэкранном режиме по сравнению с оконным режимом. Каковы технические причины этого?

Полагаю, это связано с тем, что полноэкранное приложение может получить эксклюзивный контроль над дисплеем. Но почему приложение не может получить эксклюзивный контроль над частью экрана (т.е. окном) и иметь те же преимущества в производительности?

Ответы [ 4 ]

23 голосов
/ 16 мая 2009

Вот примечания к скале о том, как все работает под ним.

Экран монитора всегда должен быть связан с так называемой первичной поверхностью, чтобы иметь возможность отображать что-либо, то есть видеокарта может сканировать только одну поверхность в видеопамяти.

Когда приложение работает в полноэкранном режиме (и все настроено правильно для включения переворачивания), первичная поверхность является лишь одним из буферов приложений и переворачивается в другой буфер каждый кадр. Это наиболее эффективный способ представления на экране, но для этого требуется, чтобы приложение владело всей областью монитора (т.е. всей первичной поверхностью).

Когда полноэкранного приложения нет, а DWM выключен, первичная поверхность принадлежит ОС, и каждое оконное приложение выполняет мгновенный переход от резервного буфера приложения к первичной поверхности. Для завершения этого блита требуется некоторое время на GPU (так же, как и для других приложений, видимых на экране), поэтому он не так эффективен, как полноэкранное представление. XP работал таким образом.

Когда DWM создает экран, все становится еще сложнее. Здесь DWM владеет первичной поверхностью и должен рисовать там окна приложений. Чтобы сделать это возможным, каждое окно имеет ассоциированную поверхность, содержащую его содержимое, называемую поверхностью перенаправления (которая позволяет DWM активировать окошко с окошками, эффекты стекла и все такое хорошее). Каждый раз, когда приложение D3D выдает кадр, оно добавляет блик к поверхности перенаправления. Таким образом, должно произойти несколько блиттов: блит к поверхности перенаправления приложением, блит с поверхности перенаправления к первичному с помощью DWM, что, опять-таки, накладные расходы по сравнению с полноэкранным.

Обратите внимание, что вся эта дополнительная работа выполняется на графическом процессоре, поэтому она не влияет на производительность процессора.

Материал для чтения далее:

http://blogs.msdn.com/greg_schechter/archive/2006/03/19/555087.aspx

http://blogs.msdn.com/greg_schechter/archive/2006/05/02/588934.aspx

http://blogs.msdn.com/greg_schechter/archive/2006/03/05/544314.aspx

8 голосов
/ 20 ноября 2008

На MSDN есть бит , который говорит, что в полноэкранном режиме используется перелистывание буфера, если оно настроено правильно, а не блиттинг. Это имеет смысл.

Конечно, вы можете (и, в некотором смысле, делать) предоставлять исключительный контроль над частью экрана приложению, но что происходит с остальной частью экрана? На остальных окнах вам все еще приходится бить, проверять окклюзию и т. Д., И я думаю, что именно это и приводит к снижению производительности.

5 голосов
/ 20 ноября 2008

Я добавлю к ответу @ aib , что остальная часть экрана управляется ОС. Таким образом, если что-то еще нужно прорисовать / обработать одновременно, это должно привести к снижению производительности.

Например, если у вас есть видео, воспроизводимое в Windows Media Player, в одном окне, а затем запустите Civilization в другом, когда Civ начнет делать свою причудливую графику, ему нужно будет разделить пространство экрана со всем остальным (например, с видео.

Принимая во внимание, что если приложение DirectX имеет полноэкранный режим, все остальное может быть "обновлением" или "воспроизведением", но не рисуется.

1 голос
/ 22 июня 2009

В основном видеооборудование полностью предназначено для приложения в эксклюзивном режиме.

Нет конкуренции за видео ресурсы (конвейер, память текстур и т. Д.)

В частности, загрузка текстур может быть большим узким местом. Чем меньше вам придется это делать (потому что у вас все это есть), тем лучше.

...